Changeset 1843:0450f5a09d1f for charset.c
Legend:
- Unmodified
- Added
- Removed
-
charset.c
r1820 r1843 379 379 380 380 /* 381 * Convert a string in place381 * Convert a string 382 382 * Used in rfc2047.c and rfc2231.c 383 383 */ 384 384 385 int mutt_convert_string (char * s, size_t len, const char *from, const char *to)385 int mutt_convert_string (char **ps, const char *from, const char *to) 386 386 { 387 387 iconv_t cd; 388 388 const char *repls[] = { "\357\277\275", "?", 0 }; 389 char *s = *ps; 389 390 390 391 if (!s || !*s) … … 393 394 if (to && from && (cd = mutt_iconv_open (to, from)) != (iconv_t)-1) 394 395 { 395 int n;396 int len; 396 397 const char *ib; 397 char * c, *ob;398 char *buf, *ob; 398 399 size_t ibl, obl; 399 400 const char **inrepls = 0; … … 407 408 outrepl = "?"; 408 409 409 n = strlen (s);410 c = safe_malloc (n);411 memcpy (c, s, n);412 ib = c, ibl = n, ob = s, obl = len ? len-1 : n;410 len = strlen (s); 411 ib = s, ibl = len + 1; 412 obl = MB_LEN_MAX * ibl; 413 ob = buf = safe_malloc (obl + 1); 413 414 mutt_iconv (cd, &ib, &ibl, &ob, &obl, inrepls, outrepl); 414 free (c);415 415 iconv_close (cd); 416 free (s); 416 417 *ob = '\0'; 418 *ps = safe_strdup (buf); 419 free (buf); 417 420 return 0; 418 421 }
