]> git.sesse.net Git - vlc/blobdiff - src/text/unicode.c
Small simplification (ToCharset).
[vlc] / src / text / unicode.c
index b12d26d2d5d92fd2a0afe52e8128a2372167687c..bad916cedac7fa2cd7119e1c79e274d2152d5d2b 100644 (file)
@@ -39,6 +39,8 @@
 #include <sys/types.h>
 #ifdef UNDER_CE
 #  include <tchar.h>
+#elif defined(WIN32)
+#  include <io.h>
 #endif
 #include <errno.h>
 #include <wctype.h>
@@ -71,7 +73,7 @@ char *FromLocale (const char *locale)
 #ifdef ASSUME_UTF8
     return (char *)locale;
 #else
-    return locale ? FromCharset ("", locale) : NULL;
+    return locale ? FromCharset ("", locale, strlen(locale)) : NULL;
 #endif
 }
 
@@ -89,7 +91,7 @@ char *FromLocaleDup (const char *locale)
 #ifdef ASSUME_UTF8
     return strdup (locale);
 #else
-    return FromCharset ("", locale);
+    return FromCharset ("", locale, strlen(locale));
 #endif
 }
 
@@ -108,7 +110,8 @@ char *ToLocale (const char *utf8)
 #ifdef ASSUME_UTF8
     return (char *)utf8;
 #else
-    return utf8 ? ToCharset ("", utf8) : NULL;
+    size_t outsize;
+    return utf8 ? ToCharset ("", utf8, &outsize) : NULL;
 #endif
 }
 
@@ -127,7 +130,8 @@ char *ToLocaleDup (const char *utf8)
 #ifdef ASSUME_UTF8
     return strdup (utf8);
 #else
-    return ToCharset ("", utf8);
+    size_t outsize;
+    return ToCharset ("", utf8, &outsize);
 #endif
 }
 
@@ -185,6 +189,8 @@ int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap )
     char *ansi = ToLocaleDup (str);
     free (str);
 
+    if (ansi == NULL)
+        return -1;
     fputs (ansi, stream);
     free (ansi);
     return res;
@@ -429,7 +435,7 @@ void *ToCharset(const char *charset, const char *in, size_t *outsize)
 
         const char *inp = in;
         char *outp = res;
-        size_t inb = inlen + 1;
+        size_t inb = inlen;
         size_t outb = outlen;
 
         if (vlc_iconv (hd, &inp, &inb, &outp, &outb) != (size_t)(-1))
@@ -443,11 +449,9 @@ void *ToCharset(const char *charset, const char *in, size_t *outsize)
         }
 
         free (res);
+        res = NULL;
         if (errno != E2BIG) /* conversion failure */
-        {
-            res = NULL;
             break;
-        }
     }
     vlc_iconv_close (hd);
     return res;