Mercurial > pidgin
comparison src/protocols/msn/utils.c @ 6358:8ba58b296cc1
[gaim-migrate @ 6862]
This should fix a problem I encountered when I realized again that Qt sucks
and likes to crash when I have certain tags not closed. The format string
conversion code in MSN was taken from the old MSN prpl, and that code
didn't close tags. This should fix that problem.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sun, 03 Aug 2003 02:16:15 +0000 |
| parents | 13a37cacd10b |
| children | dfde69e105ae |
comparison
equal
deleted
inserted
replaced
| 6357:1fa4410d2e13 | 6358:8ba58b296cc1 |
|---|---|
| 78 buf[j] = '\0'; | 78 buf[j] = '\0'; |
| 79 | 79 |
| 80 return buf; | 80 return buf; |
| 81 } | 81 } |
| 82 | 82 |
| 83 char * | 83 void |
| 84 msn_parse_format(const char *mime) | 84 msn_parse_format(const char *mime, char **pre_ret, char **post_ret) |
| 85 { | 85 { |
| 86 char *cur; | 86 char *cur; |
| 87 GString *ret = g_string_new(NULL); | 87 GString *pre = g_string_new(NULL); |
| 88 GString *post = g_string_new(NULL); | |
| 88 unsigned int colors[3]; | 89 unsigned int colors[3]; |
| 90 | |
| 91 if (pre_ret != NULL) *pre_ret = NULL; | |
| 92 if (post_ret != NULL) *post_ret = NULL; | |
| 89 | 93 |
| 90 cur = strstr(mime, "FN="); | 94 cur = strstr(mime, "FN="); |
| 91 | 95 |
| 92 if (cur && (*(cur = cur + 3) != ';')) { | 96 if (cur && (*(cur = cur + 3) != ';')) { |
| 93 ret = g_string_append(ret, "<FONT FACE=\""); | 97 pre = g_string_append(pre, "<FONT FACE=\""); |
| 94 | 98 |
| 95 while (*cur && *cur != ';') { | 99 while (*cur && *cur != ';') { |
| 96 ret = g_string_append_c(ret, *cur); | 100 pre = g_string_append_c(pre, *cur); |
| 97 cur++; | 101 cur++; |
| 98 } | 102 } |
| 99 | 103 |
| 100 ret = g_string_append(ret, "\">"); | 104 pre = g_string_append(pre, "\">"); |
| 105 post = g_string_prepend(post, "</FONT>"); | |
| 101 } | 106 } |
| 102 | 107 |
| 103 cur = strstr(mime, "EF="); | 108 cur = strstr(mime, "EF="); |
| 104 | 109 |
| 105 if (cur && (*(cur = cur + 3) != ';')) { | 110 if (cur && (*(cur = cur + 3) != ';')) { |
| 106 while (*cur && *cur != ';') { | 111 while (*cur && *cur != ';') { |
| 107 ret = g_string_append_c(ret, '<'); | 112 pre = g_string_append_c(pre, '<'); |
| 108 ret = g_string_append_c(ret, *cur); | 113 pre = g_string_append_c(pre, *cur); |
| 109 ret = g_string_append_c(ret, '>'); | 114 pre = g_string_append_c(pre, '>'); |
| 110 cur++; | 115 cur++; |
| 111 } | 116 } |
| 112 } | 117 } |
| 113 | 118 |
| 114 cur = strstr(mime, "CO="); | 119 cur = strstr(mime, "CO="); |
| 134 | 139 |
| 135 g_snprintf(tag, sizeof(tag), | 140 g_snprintf(tag, sizeof(tag), |
| 136 "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">", | 141 "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">", |
| 137 colors[2], colors[1], colors[0]); | 142 colors[2], colors[1], colors[0]); |
| 138 | 143 |
| 139 ret = g_string_append(ret, tag); | 144 pre = g_string_append(pre, tag); |
| 145 post = g_string_prepend(post, "</FONT>"); | |
| 140 } | 146 } |
| 141 } | 147 } |
| 142 | 148 |
| 143 cur = msn_url_decode(ret->str); | 149 cur = msn_url_decode(pre->str); |
| 144 g_string_free(ret, TRUE); | 150 g_string_free(pre, TRUE); |
| 145 | 151 |
| 146 return cur; | 152 if (pre_ret != NULL) |
| 153 *pre_ret = cur; | |
| 154 | |
| 155 cur = msn_url_decode(post->str); | |
| 156 g_string_free(post, TRUE); | |
| 157 | |
| 158 if (post_ret != NULL) | |
| 159 *post_ret = cur; | |
| 147 } | 160 } |
