[vlc-commits] Win32: add ToCodePage() and FromCodePage()

Rémi Denis-Courmont git at videolan.org
Thu Mar 22 17:57:10 CET 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Mar 22 18:38:21 2012 +0200| [2f457682ba049089eaf256c4af7b2a9abf843727] | committer: Rémi Denis-Courmont

Win32: add ToCodePage() and FromCodePage()

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2f457682ba049089eaf256c4af7b2a9abf843727
---

 include/vlc_charset.h |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/include/vlc_charset.h b/include/vlc_charset.h
index 42293fe..4bd30ca 100644
--- a/include/vlc_charset.h
+++ b/include/vlc_charset.h
@@ -100,6 +100,41 @@ static inline wchar_t *ToWide (const char *utf8)
     return out;
 }
 
+VLC_USED VLC_MALLOC
+static inline char *ToCodePage (unsigned cp, const char *utf8)
+{
+    wchar_t *wide = ToWide (utf8);
+    if (wide == NULL)
+        return NULL;
+
+    size_t len = WideCharToMultiByte (cp, 0, wide, -1, NULL, 0, NULL, NULL);
+    if (len == 0)
+        return NULL;
+
+    char *out = (char *)malloc (len);
+    if (likely(out != NULL))
+        WideCharToMultiByte (cp, 0, wide, -1, out, len, NULL, NULL);
+    free (wide);
+    return out;
+}
+
+VLC_USED VLC_MALLOC
+static inline char *FromCodePage (unsigned cp, const char *mb)
+{
+    int len = MultiByteToWideChar (cp, 0, mb, -1, NULL, 0);
+    if (len == 0)
+        return NULL;
+
+    wchar_t *wide = (wchar_t *)malloc (len * sizeof (wchar_t));
+    if (unlikely(wide == NULL))
+        return NULL;
+    MultiByteToWideChar (cp, 0, mb, -1, wide, len);
+
+    char *utf8 = FromWide (wide);
+    free (wide);
+    return utf8;
+}
+
 # ifdef UNICODE
 #  define FromT FromWide
 #  define ToT   ToWide



More information about the vlc-commits mailing list