diff options
Diffstat (limited to '')
-rw-r--r-- | src/support.c | 82 |
1 files changed, 38 insertions, 44 deletions
diff --git a/src/support.c b/src/support.c index 847178d9c..2f3e4fd5d 100644 --- a/src/support.c +++ b/src/support.c @@ -110,50 +110,44 @@ strcasestr(const char *haystack, const char *needle) char * strscroll(char *str, char *separator, int width, scroll_state_t *st) { - gchar *tmp, *buf; - gsize len, size; - - if( st->offset==0 ) - { - st->offset++; - return g_strdup(str); - } - - /* create a buffer containing the string and the separator */ - size = strlen(str)+strlen(separator)+1; - tmp = g_malloc(size); - g_strlcpy(tmp, str, size); - g_strlcat(tmp, separator, size); - len = my_strlen(tmp); - - if( st->offset >= len ) - st->offset = 0; - - /* create the new scrolled string */ - size = width+1; - if (g_utf8_validate(tmp, -1, NULL) ) - { - int ulen; - buf = g_malloc(size*6);// max length of utf8 char is 6 - g_utf8_strncpy(buf, g_utf8_offset_to_pointer(tmp,st->offset), size); - if( (ulen = g_utf8_strlen(buf, -1)) < width ) - g_utf8_strncpy(buf+strlen(buf), tmp, size - ulen - 1); - } - else - { - buf = g_malloc(size); - g_strlcpy(buf, tmp+st->offset, size); - if( strlen(buf) < width ) - g_strlcat(buf, tmp, size); - } - if( time(NULL)-st->t >= 1 ) - { - st->t = time(NULL); - st->offset++; - } - g_free(tmp); - return buf; - + gchar *tmp, *buf; + gsize len, size; + + if( st->offset==0 ) { + st->offset++; + return g_strdup(str); + } + + /* create a buffer containing the string and the separator */ + size = strlen(str)+strlen(separator)+1; + tmp = g_malloc(size); + g_strlcpy(tmp, str, size); + g_strlcat(tmp, separator, size); + len = my_strlen(tmp); + + if( st->offset >= len ) + st->offset = 0; + + /* create the new scrolled string */ + size = width+1; + if (g_utf8_validate(tmp, -1, NULL) ) { + int ulen; + buf = g_malloc(size*6);// max length of utf8 char is 6 + g_utf8_strncpy(buf, g_utf8_offset_to_pointer(tmp,st->offset), size); + if( (ulen = g_utf8_strlen(buf, -1)) < width ) + g_utf8_strncpy(buf+strlen(buf), tmp, size - ulen - 1); + } else { + buf = g_malloc(size); + g_strlcpy(buf, tmp+st->offset, size); + if (strlen(buf) < width) + g_strlcat(buf, tmp, size); + } + if( time(NULL)-st->t >= 1 ) { + st->t = time(NULL); + st->offset++; + } + g_free(tmp); + return buf; } void |