Add havecharset().
[doldaconnect.git] / daemon / utils.c
index 878fb61..38e3ac9 100644 (file)
@@ -126,6 +126,19 @@ wchar_t *swprintf2(wchar_t *format, ...)
     return(buf);
 }
 
+int havecharset(char *charset)
+{
+    iconv_t cd;
+    
+    if((cd = iconv_open("wchar_t", charset)) == (iconv_t)-1)
+       return(0);
+    iconv_close(cd);
+    if((cd = iconv_open(charset, "wchar_t")) == (iconv_t)-1)
+       return(0);
+    iconv_close(cd);
+    return(1);
+}
+
 wchar_t *icmbstowcs(char *mbs, char *charset)
 {
     int ret;
@@ -190,7 +203,7 @@ wchar_t *icsmbstowcs(char *mbs, char *charset, wchar_t *def)
        free(buf);
     if((buf = icmbstowcs(mbs, charset)) == NULL)
     {
-       if(*def == '~')
+       if((def != NULL) && (*def == L'~'))
        {
            flog(LOG_WARNING, "icsmbstowcs: could not convert wcs string into charset %s: %s", charset, strerror(errno));
            def++;
@@ -264,7 +277,7 @@ char *icswcstombs(wchar_t *wcs, char *charset, char *def)
        free(buf);
     if((buf = icwcstombs(wcs, charset)) == NULL)
     {
-       if(*def == '~')
+       if((def != NULL) && (*def == '~'))
        {
            flog(LOG_WARNING, "icswcstombs: could not convert mbs string from charset %s: %s", charset, strerror(errno));
            def++;