Mercurial > pidgin
comparison src/util.c @ 7667:30593bf56e71
[gaim-migrate @ 8311]
(23:56:25) shx: LSchiere: there's something wrong in my patch
(23:56:34) Luke: okay
(23:56:38) Luke: what's that
(23:57:45) shx: I forgot to add a '0' a the end of a string
(23:57:56) shx: in the gaim_mime_decode_field funcition
(23:59:35) Luke: where in that?
(00:00:16) shx: at the end, just before this
(00:00:18) shx: if (*unencoded_start)
(00:00:19) shx: n = strcpy(n, unencoded_start);
(00:00:27) shx: whould be this
(00:00:28) shx: *n = '\0';
(00:01:05) Luke: so you are just setting it to NULL
(00:01:53) Luke: i don't understand why you need that n set at all inside
that if, since you just return new on the next line down
(00:03:35) shx: I doing some test right now, but I remember I added that
because I had of some errors
(00:05:04) Luke: i think what you may be hitting is a functional work
around for not properly initializing variables, something that shouldn't
work but does. because you shouldn't need to set something just before you
return unless you are returning IT (or unless you are using staticly
declared memory, in which case you might concievably be using that variable
again when you next enter the function
(00:05:55) shx: no
(00:06:18) shx: n is a pointer to the end of the string, and changes as the
while goes on
(00:06:37) Luke: ah
(00:06:42) shx: n doesn't matter
(00:07:01) Luke: so should the *n = '\0' be inside the if or outside it?
(00:07:30) shx: before the if
(00:07:44) shx: *n = '\0';
(00:07:45) shx: if (*unencoded_start)
(00:07:45) shx: n = strcpy(n, unencoded_start);
(00:08:07) shx: in the case there is no *unencoded_start
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Sun, 30 Nov 2003 05:10:24 +0000 |
| parents | 0351ff7030d0 |
| children | 42e5d2f4e4b1 |
comparison
equal
deleted
inserted
replaced
| 7666:25488bd0d461 | 7667:30593bf56e71 |
|---|---|
| 267 | 267 |
| 268 *n = '\0'; | 268 *n = '\0'; |
| 269 | 269 |
| 270 if (size) | 270 if (size) |
| 271 *size = n - new; | 271 *size = n - new; |
| 272 | 272 |
| 273 /* Resize to take less space */ | 273 /* Resize to take less space */ |
| 274 /* new = realloc(new, n - new); */ | 274 /* new = realloc(new, n - new); */ |
| 275 | 275 |
| 276 *data = new; | 276 *data = new; |
| 277 } | 277 } |
| 292 gaim_quotedp_decode(text, &decoded, &len); | 292 gaim_quotedp_decode(text, &decoded, &len); |
| 293 else if (g_ascii_strcasecmp(encoding, "B") == 0) | 293 else if (g_ascii_strcasecmp(encoding, "B") == 0) |
| 294 gaim_base64_decode(text, &decoded, &len); | 294 gaim_base64_decode(text, &decoded, &len); |
| 295 else | 295 else |
| 296 return NULL; | 296 return NULL; |
| 297 | 297 |
| 298 | 298 |
| 299 converted = g_convert(decoded, len, OUT_CHARSET, charset, NULL, NULL, NULL); | 299 converted = g_convert(decoded, len, OUT_CHARSET, charset, NULL, NULL, NULL); |
| 300 g_free(decoded); | 300 g_free(decoded); |
| 301 | 301 |
| 302 return converted; | 302 return converted; |
| 303 } | 303 } |
| 321 unencoded_start = cur) | 321 unencoded_start = cur) |
| 322 { | 322 { |
| 323 int len; | 323 int len; |
| 324 char *token; | 324 char *token; |
| 325 GQueue *tokens = g_queue_new(); | 325 GQueue *tokens = g_queue_new(); |
| 326 | 326 |
| 327 for (cur += 2, mark = cur; *cur; cur++) { | 327 for (cur += 2, mark = cur; *cur; cur++) { |
| 328 if (*cur == '?') { | 328 if (*cur == '?') { |
| 329 token = g_strndup(mark, cur - mark); | 329 token = g_strndup(mark, cur - mark); |
| 330 g_queue_push_head(tokens, token); | 330 g_queue_push_head(tokens, token); |
| 331 | 331 |
| 332 mark = (cur + 1); | 332 mark = (cur + 1); |
| 333 | 333 |
| 334 if (*mark == '=') | 334 if (*mark == '=') |
| 335 break; | 335 break; |
| 336 } else { | 336 } else { |
| 337 if ((tokens->length == 2) && (*cur == ' ')) | 337 if ((tokens->length == 2) && (*cur == ' ')) |
| 338 break; | 338 break; |
| 350 n = strncpy(n, unencoded_start, len) + len; | 350 n = strncpy(n, unencoded_start, len) + len; |
| 351 | 351 |
| 352 charset = g_queue_pop_tail(tokens); | 352 charset = g_queue_pop_tail(tokens); |
| 353 encoding = g_queue_pop_tail(tokens); | 353 encoding = g_queue_pop_tail(tokens); |
| 354 text = g_queue_pop_tail(tokens); | 354 text = g_queue_pop_tail(tokens); |
| 355 | 355 |
| 356 if ((decoded = gaim_mime_decode_word(charset, encoding, text))) { | 356 if ((decoded = gaim_mime_decode_word(charset, encoding, text))) { |
| 357 len = strlen(decoded); | 357 len = strlen(decoded); |
| 358 n = strncpy(n, decoded, len) + len; | 358 n = strncpy(n, decoded, len) + len; |
| 359 g_free(decoded); | 359 g_free(decoded); |
| 360 } | 360 } |
| 361 | 361 |
| 362 g_free(charset); | 362 g_free(charset); |
| 363 g_free(encoding); | 363 g_free(encoding); |
| 364 g_free(text); | 364 g_free(text); |
| 365 } else { | 365 } else { |
| 366 len = cur - unencoded_start; | 366 len = cur - unencoded_start; |
| 367 n = strncpy(n, unencoded_start, len) + len; | 367 n = strncpy(n, unencoded_start, len) + len; |
| 368 | 368 |
| 369 while ((token = g_queue_pop_tail(tokens))) | 369 while ((token = g_queue_pop_tail(tokens))) |
| 370 g_free(token); | 370 g_free(token); |
| 371 } | 371 } |
| 372 | 372 |
| 373 g_queue_free(tokens); | 373 g_queue_free(tokens); |
| 374 } | 374 } |
| 375 | |
| 376 *n = '\0'; | |
| 375 | 377 |
| 376 if (*unencoded_start) | 378 if (*unencoded_start) |
| 377 n = strcpy(n, unencoded_start); | 379 n = strcpy(n, unencoded_start); |
| 378 | 380 |
| 379 return new; | 381 return new; |
