master
c 46 lines 1.31 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "windows-events-unicode.h"
4
5 inline void utf82unicode(wchar_t *dst, size_t dst_size, const char *src) {
6 if (src) {
7 // Convert from UTF-8 to wide char (UTF-16)
8 if (utf8_to_utf16(dst, dst_size, src, -1) == 0)
9 wcsncpy(dst, L"[failed conv.]", dst_size - 1);
10 }
11 else
12 wcsncpy(dst, L"[null]", dst_size - 1);
13 }
14
15 inline void unicode2utf8(char *dst, size_t dst_size, const wchar_t *src) {
16 if (src) {
17 if(WideCharToMultiByte(CP_UTF8, 0, src, -1, dst, (int)dst_size, NULL, NULL) == 0)
18 strncpyz(dst, "[failed conv.]", dst_size - 1);
19 }
20 else
21 strncpyz(dst, "[null]", dst_size - 1);
22 }
23
24 wchar_t *channel2unicode(const char *utf8str) {
25 static __thread wchar_t buffer[1024];
26 utf82unicode(buffer, _countof(buffer), utf8str);
27 return buffer;
28 }
29
30 char *channel2utf8(const wchar_t *channel) {
31 static __thread char buffer[1024];
32 unicode2utf8(buffer, sizeof(buffer), channel);
33 return buffer;
34 }
35
36 char *query2utf8(const wchar_t *query) {
37 static __thread char buffer[16384];
38 unicode2utf8(buffer, sizeof(buffer), query);
39 return buffer;
40 }
41
42 char *provider2utf8(const wchar_t *provider) {
43 static __thread char buffer[256];
44 unicode2utf8(buffer, sizeof(buffer), provider);
45 return buffer;
46 }