Show
Ignore:
Timestamp:
2000-05-20 08:46:39 (9 years ago)
Author:
Thomas Roessler <roessler@…>
Branch:
HEAD
Message:

String conversion patch from EGE.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • charset.c

    r1820 r1843  
    379379 
    380380/* 
    381  * Convert a string in place 
     381 * Convert a string 
    382382 * Used in rfc2047.c and rfc2231.c 
    383383 */ 
    384384 
    385 int mutt_convert_string (char *s, size_t len, const char *from, const char *to) 
     385int mutt_convert_string (char **ps, const char *from, const char *to) 
    386386{ 
    387387  iconv_t cd; 
    388388  const char *repls[] = { "\357\277\275", "?", 0 }; 
     389  char *s = *ps; 
    389390 
    390391  if (!s || !*s) 
     
    393394  if (to && from && (cd = mutt_iconv_open (to, from)) != (iconv_t)-1)  
    394395  { 
    395     int n; 
     396    int len; 
    396397    const char *ib; 
    397     char *c, *ob; 
     398    char *buf, *ob; 
    398399    size_t ibl, obl; 
    399400    const char **inrepls = 0; 
     
    407408      outrepl = "?"; 
    408409       
    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); 
    413414    mutt_iconv (cd, &ib, &ibl, &ob, &obl, inrepls, outrepl); 
    414     free (c); 
    415415    iconv_close (cd); 
     416    free (s); 
    416417    *ob = '\0'; 
     418    *ps = safe_strdup (buf); 
     419    free (buf); 
    417420    return 0; 
    418421  }