Back to index

courier  0.68.2
strftime.c
Go to the documentation of this file.
00001 #include "config.h"
00002 /*
00003 */
00004 #include      <string.h>
00005 #include      <time.h>
00006 #include      "sqwebmail.h"
00007 #include      "unicode/unicode.h"
00008 
00009 extern const char *sqwebmail_system_charset;
00010 extern const char *sqwebmail_content_charset;
00011 
00012 #if    HAVE_LOCALE_H
00013 #if    HAVE_SETLOCALE
00014 #if    USE_LIBCHARSET || HAVE_LANGINFO_CODESET
00015 
00016 size_t strftime_unicode(char *s, size_t max, const char *fmt,
00017                      const struct tm *tm)
00018 {
00019        char sbuf[128] = "\0";
00020        char *buf;
00021 
00022        if (sqwebmail_system_charset && *sqwebmail_system_charset
00023            && sqwebmail_content_charset && *sqwebmail_content_charset
00024            && strcasecmp(sqwebmail_system_charset, "ASCII"))
00025        {
00026               int err;
00027               char *sfmt=libmail_u_convert_tobuf(fmt,
00028                                              sqwebmail_content_charset,
00029                                              sqwebmail_system_charset,
00030                                              &err);
00031 
00032               if (sfmt && err)
00033               {
00034                      free(sfmt);
00035                      sfmt=0;
00036               }
00037 
00038               if (sfmt)
00039               {
00040                      strftime(sbuf, sizeof(sbuf), sfmt, tm);
00041                      sbuf[sizeof(sbuf)-1] = 0;
00042                      free(sfmt);
00043 
00044                      buf=libmail_u_convert_tobuf(sbuf,
00045                                               sqwebmail_system_charset,
00046                                               sqwebmail_content_charset,
00047                                               &err);
00048 
00049                      if (buf && err)
00050                      {
00051                             free(buf);
00052                             buf=0;
00053                      }
00054 
00055                      if (buf)
00056                      {
00057                             strncpy(s, buf, max);
00058                             free(buf);
00059                      }
00060                      else
00061                      {
00062                             strncpy(s, sbuf, max);
00063                      }
00064                      return strlen(s);
00065               }
00066        }
00067 
00068        return strftime(s, max, fmt, tm);
00069 }
00070 
00071 #endif
00072 #endif
00073 #endif
00074