Show
Ignore:
Timestamp:
2007-02-27 09:44:08 (21 months ago)
Author:
TAKIZAWA Takashi <taki@…>
Branch:
HEAD
Message:

Updated $assumed_charset patch (closes: #2218).
Thanks to TAKAHASHI Tamotsu for the fixes and for handling patch conflicts.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • charset.c

    r4921 r4932  
    283283} 
    284284 
     285char *mutt_get_default_charset () 
     286{ 
     287  static char fcharset[SHORT_STRING]; 
     288  const char *c = AssumedCharset; 
     289  const char *c1; 
     290 
     291  if (c && *c) { 
     292    c1 = strchr (c, ':'); 
     293    strfcpy (fcharset, c, c1 ? (c1 - c + 1) : sizeof (fcharset)); 
     294    return fcharset; 
     295  } 
     296  return strcpy (fcharset, "us-ascii"); /* __STRCPY_CHECKED__ */ 
     297} 
    285298 
    286299#ifndef HAVE_ICONV 
     
    592605  FREE (_fc);           /* __FREE_CHECKED__ */ 
    593606} 
    594  
    595 const char *mutt_get_first_charset (const char *charset) 
    596 { 
    597   static char fcharset[SHORT_STRING]; 
    598   const char *c, *c1; 
    599  
    600   c = charset; 
    601   if (!mutt_strlen(c)) 
    602     return "us-ascii"; 
    603   if (!(c1 = strchr (c, ':'))) 
    604     return charset; 
    605   strfcpy (fcharset, c, c1 - c + 1); 
    606   return fcharset; 
    607 } 
    608  
    609 static size_t convert_string (ICONV_CONST char *f, size_t flen, 
    610                              const char *from, const char *to, 
    611                              char **t, size_t *tlen) 
    612 { 
    613   iconv_t cd; 
    614   char *buf, *ob; 
    615   size_t obl, n; 
    616   int e; 
    617  
    618   cd = mutt_iconv_open (to, from, 0); 
    619   if (cd == (iconv_t)(-1)) 
    620     return (size_t)(-1); 
    621   obl = 4 * flen + 1; 
    622   ob = buf = safe_malloc (obl); 
    623   n = iconv (cd, &f, &flen, &ob, &obl); 
    624   if (n == (size_t)(-1) || iconv (cd, 0, 0, &ob, &obl) == (size_t)(-1)) 
    625   { 
    626     e = errno; 
    627     FREE (&buf); 
    628     iconv_close (cd); 
    629     errno = e; 
    630     return (size_t)(-1); 
    631   } 
    632   *ob = '\0'; 
    633  
    634   *tlen = ob - buf; 
    635  
    636   safe_realloc ((void **) &buf, ob - buf + 1); 
    637   *t = buf; 
    638   iconv_close (cd); 
    639  
    640   return n; 
    641 } 
    642  
    643 int mutt_convert_nonmime_string (char **ps) 
    644 { 
    645   const char *c, *c1; 
    646  
    647   for (c = AssumedCharset; c; c = c1 ? c1 + 1 : 0) 
    648   { 
    649     char *u = *ps; 
    650     char *s; 
    651     char *fromcode; 
    652     size_t m, n; 
    653     size_t ulen = mutt_strlen (*ps); 
    654     size_t slen; 
    655  
    656     if (!u || !*u) 
    657       return 0; 
    658  
    659     c1 = strchr (c, ':'); 
    660     n = c1 ? c1 - c : mutt_strlen (c); 
    661     if (!n) 
    662       continue; 
    663     fromcode = safe_malloc (n + 1); 
    664     strfcpy (fromcode, c, n + 1); 
    665     m = convert_string (u, ulen, fromcode, Charset, &s, &slen); 
    666     FREE (&fromcode); 
    667     if (m != (size_t)(-1)) 
    668     { 
    669       FREE (ps); /* __FREE_CHECKED__ */ 
    670       *ps = s; 
    671       return 0; 
    672     } 
    673   } 
    674   return -1; 
    675 } 
    676