summaryrefslogtreecommitdiff
path: root/src/lib/icu
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2015-06-23 12:47:35 +0200
committerMax Kellermann <max@duempel.org>2015-06-23 13:20:11 +0200
commitaecfcaa8a2b646f6a2503ba5b2b647c89d53e405 (patch)
treef31092206740253f6a84e66df1bd2c2a71ec3660 /src/lib/icu
parent61a3028788186c36708234b03a8eca8d5e009515 (diff)
lib/icu/Win32: wrappers for WideCharToMultiByte(), MultiByteToWideChar()
Diffstat (limited to 'src/lib/icu')
-rw-r--r--src/lib/icu/Win32.cxx60
-rw-r--r--src/lib/icu/Win32.hxx38
2 files changed, 98 insertions, 0 deletions
diff --git a/src/lib/icu/Win32.cxx b/src/lib/icu/Win32.cxx
new file mode 100644
index 000000000..6f190c924
--- /dev/null
+++ b/src/lib/icu/Win32.cxx
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h"
+#include "Win32.hxx"
+#include "util/AllocatedString.hxx"
+
+#include <windows.h>
+
+AllocatedString<char>
+WideCharToMultiByte(unsigned code_page, const wchar_t *src)
+{
+ int length = WideCharToMultiByte(code_page, 0, src, -1, nullptr, 0,
+ nullptr, nullptr);
+ if (length <= 0)
+ return nullptr;
+
+ char *buffer = new char[length];
+ length = WideCharToMultiByte(code_page, 0, src, -1, buffer, length,
+ nullptr, nullptr);
+ if (length <= 0) {
+ delete[] buffer;
+ return nullptr;
+ }
+
+ return AllocatedString<char>::Donate(buffer);
+}
+
+AllocatedString<wchar_t>
+MultiByteToWideChar(unsigned code_page, const char *src)
+{
+ int length = MultiByteToWideChar(code_page, 0, src, -1, nullptr, 0);
+ if (length <= 0)
+ return nullptr;
+
+ wchar_t *buffer = new wchar_t[length];
+ length = MultiByteToWideChar(code_page, 0, src, -1, buffer, length);
+ if (length <= 0) {
+ delete[] buffer;
+ return nullptr;
+ }
+
+ return AllocatedString<wchar_t>::Donate(buffer);
+}
diff --git a/src/lib/icu/Win32.hxx b/src/lib/icu/Win32.hxx
new file mode 100644
index 000000000..253fe169a
--- /dev/null
+++ b/src/lib/icu/Win32.hxx
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2003-2015 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_ICU_WIN32_HXX
+#define MPD_ICU_WIN32_HXX
+
+#include "check.h"
+#include "Compiler.h"
+
+#include <wchar.h>
+
+template<typename T> class AllocatedString;
+
+gcc_pure gcc_nonnull_all
+AllocatedString<char>
+WideCharToMultiByte(unsigned code_page, const wchar_t *src);
+
+gcc_pure gcc_nonnull_all
+AllocatedString<wchar_t>
+MultiByteToWideChar(unsigned code_page, const char *src);
+
+#endif