[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