Mercurial > pidgin
diff src/util.c @ 5136:381da05cb5ed
[gaim-migrate @ 5500]
this started out as simply adding an option to right-click on a jabber buddy
and re-request authorization. Then I ended up chasing the disgusting mess
of const vs non-const parameters all over gaim.
The end result is that you can now right-click on jabber buddies and
re-request auth like you can for ICQ. Also, a lot more things are const
that should be, I fixed a bug or two, and I cleaned up one of my least
favorite functions in gaim (linkify_text). It is now decidedly less evil.
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Tue, 15 Apr 2003 04:18:00 +0000 |
parents | 89c0c811befa |
children | 91ea5ef2278b |
line wrap: on
line diff
--- a/src/util.c Tue Apr 15 03:45:31 2003 +0000 +++ b/src/util.c Tue Apr 15 04:18:00 2003 +0000 @@ -137,17 +137,15 @@ return ret; } -gint linkify_text(char *text) +char *linkify_text(const char *text) { - char *c, *t, *q = NULL; - char *cpy = g_malloc(strlen(text) * 3 + 1); + const char *c, *t, *q = NULL; + char *tmp; char url_buf[BUF_LEN * 4]; - int cnt = 0; + GString *ret = g_string_new(""); /* Assumes you have a buffer able to cary at least BUF_LEN * 2 bytes */ - strncpy(cpy, text, strlen(text)); - cpy[strlen(text)] = 0; - c = cpy; + c = text; while (*c) { if(!q && (*c == '\"' || *c == '\'')) { q = c; @@ -159,12 +157,13 @@ if (!g_ascii_strncasecmp(c, "/A>", 3)) { break; } - text[cnt++] = *c; + ret = g_string_append_c(ret, *c); c++; if (!(*c)) break; } - } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || (!g_ascii_strncasecmp(c, "https://", 8)))) { + } else if ((*c=='h') && (!g_ascii_strncasecmp(c, "http://", 7) || + (!g_ascii_strncasecmp(c, "https://", 8)))) { t = c; while (1) { if (badchar(*t)) { @@ -178,8 +177,8 @@ t--; strncpy(url_buf, c, t - c); url_buf[t - c] = 0; - cnt += g_snprintf(&text[cnt], 1024, "<A HREF=\"%s\">%s</A>", - url_buf, url_buf); + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); c = t; break; } @@ -206,9 +205,9 @@ t--; strncpy(url_buf, c, t - c); url_buf[t - c] = 0; - cnt += g_snprintf(&text[cnt], 1024, - "<A HREF=\"http://%s\">%s</A>", url_buf, - url_buf); + g_string_append_printf(ret, + "<A HREF=\"http://%s\">%s</A>", url_buf, + url_buf); c = t; break; } @@ -225,8 +224,8 @@ t--; strncpy(url_buf, c, t - c); url_buf[t - c] = 0; - cnt += g_snprintf(&text[cnt], 1024, "<A HREF=\"%s\">%s</A>", - url_buf, url_buf); + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", + url_buf, url_buf); c = t; break; } @@ -247,9 +246,9 @@ t--; strncpy(url_buf, c, t - c); url_buf[t - c] = 0; - cnt += g_snprintf(&text[cnt], 1024, - "<A HREF=\"ftp://%s\">%s</A>", url_buf, - url_buf); + g_string_append_printf(ret, + "<A HREF=\"ftp://%s\">%s</A>", url_buf, + url_buf); c = t; break; } @@ -266,7 +265,7 @@ t--; strncpy(url_buf, c, t - c); url_buf[t - c] = 0; - cnt += g_snprintf(&text[cnt], 1024, "<A HREF=\"%s\">%s</A>", + g_string_append_printf(ret, "<A HREF=\"%s\">%s</A>", url_buf, url_buf); c = t; break; @@ -276,7 +275,7 @@ t++; } - } else if (c != cpy && (*c == '@')) { + } else if (c != text && (*c == '@')) { char *tmp; int flag; int len = 0; @@ -291,7 +290,7 @@ t = c; while (flag) { if (badchar(*t)) { - cnt -= (len - 1); + ret = g_string_truncate(ret, ret->len - (len - 1)); break; } else { len++; @@ -303,8 +302,8 @@ url_buf[len] = 0; g_free(tmp); t--; - if (t < cpy) { - cnt = 0; + if (t < text) { + ret = g_string_assign(ret, ""); break; } } @@ -319,12 +318,8 @@ for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) *d = '\0'; - cnt += g_snprintf(&text[cnt], 1024, - "<A HREF=\"mailto:%s\">%s</A>", url_buf, - url_buf); - text[cnt] = 0; - - + g_string_append_printf(ret, "<A HREF=\"mailto:%s\">%s</A>", + url_buf, url_buf); c = t; break; @@ -341,13 +336,13 @@ if (*c == 0) break; - text[cnt++] = *c; + ret = g_string_append_c(ret, *c); c++; } - text[cnt] = 0; - g_free(cpy); - return cnt; + tmp = ret->str; + g_string_free(ret, FALSE); + return tmp; } @@ -892,7 +887,7 @@ g_free(text2); } -char *add_cr(char *text) +char *add_cr(const char *text) { char *ret = NULL; int count = 0, i, j;