8000 build, bugfix: fix UTF-8 to UTF-16 conversion on Windows. · fibjs/fibjs@b51fda6 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit b51fda6

Browse files
committed
build, bugfix: fix UTF-8 to UTF-16 conversion on Windows.
1 parent a7469ca commit b51fda6

File tree

9 files changed

+38
-36
lines changed

9 files changed

+38
-36
lines changed

fibjs/include/LevelDB.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ class LevelDB : public LevelDB_base {
9292
std::string str = s.ToString();
9393

9494
int wchars_num = (int)MultiByteToWideChar(CP_ACP, 0, str.c_str(), (int)str.length(), NULL, 0);
95-
wchar_t* wstr = new wchar_t[wchars_num + 1];
96-
MultiByteToWideChar(CP_ACP, 0, str.c_str(), (int)str.length(), wstr, wchars_num + 1);
95+
char16_t* wstr = new char16_t[wchars_num + 1];
96+
MultiByteToWideChar(CP_ACP, 0, str.c_str(), (int)str.length(), (wchar_t*)wstr, wchars_num + 1);
9797

9898
result_t hr = Runtime::setError(utf16to8String(wstr, wchars_num));
9999
delete[] wstr;

fibjs/include/path.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1141,7 +1141,7 @@ inline result_t _fullpath_win32(exlib::string path, exlib::string& retVal)
11411141
exlib::wstring str = utf8to16String(path);
11421142
char16_t utf16_buffer[MAX_PATH];
11431143

1144-
DWORD utf16_len = GetFullPathNameW(str.c_str(), MAX_PATH, utf16_buffer, NULL);
1144+
DWORD utf16_len = GetFullPathNameW((LPCWSTR)str.c_str(), MAX_PATH, (LPWSTR)utf16_buffer, NULL);
11451145
if (!utf16_len)
11461146
return CHECK_ERROR(LastError());
11471147

fibjs/include/utf8.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ inline exlib::wstring utf8to16String(exlib::string src)
6767
return utf8to16String(src.c_str(), (ssize_t)src.length());
6868
}
6969

70-
#define UTF8_W(s) utf8to16String(s).c_str()
70+
#ifdef _WIN32
71+
#define UTF8_W(s) (LPCWSTR)utf8to16String(s).c_str()
72+
#endif
7173

7274
inline exlib::string utf16to8String(const char16_t* src, ssize_t srclen = -1)
7375
{

fibjs/src/base/utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ exlib::string getResultMessage(result_t hr)
124124
char16_t MsgBuf[1024];
125125

126126
if (FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
127-
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), MsgBuf, 1024, NULL)) {
127+
NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)MsgBuf, 1024, NULL)) {
128128
exlib::string s = fmtString(hr, UTF8_A(MsgBuf));
129129
size_t sz = s.length();
130130

fibjs/src/console/console.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ result_t readInput(exlib::string msg, exlib::string& retVal, AsyncEvent* ac, boo
609609
if (textLen > 0 && utext[textLen - 1] == '\r')
610610
utext[--textLen] = '\0';
611611

612-
retVal = utf16to8String(utext, textLen);
612+
retVal = utf16to8String((const char16_t*)utext, textLen);
613613
free(utext);
614614

615615
return 0;

fibjs/src/db/LevelDB.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ result_t LevelDB::open(const char* connString)
4343
exlib::wstring wstr = utf8to16String(connString);
4444
exlib::string str;
4545

46-
int chars_num = (int)WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), (int)wstr.length(), NULL, 0, NULL, NULL);
46+
int chars_num = (int)WideCharToMultiByte(CP_ACP, 0, (const wchar_t*)wstr.c_str(), (int)wstr.length(), NULL, 0, NULL, NULL);
4747
str.resize(chars_num);
48-
WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), (int)wstr.length(), str.data(), chars_num + 1, NULL, NULL);
48+
WideCharToMultiByte(CP_ACP, 0, (const wchar_t*)wstr.c_str(), (int)wstr.length(), str.data(), chars_num + 1, NULL, NULL);
4949
connString = str.c_str();
5050
#endif
5151

fibjs/src/gui/windows/WebView.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class gui_worker : public IClassFactory {
9797
m_pProtSink = pIProtSink;
9898
m_pProtSink->AddRef();
9999

100-
exlib::string origin(utf16to8String(szUrl));
100+
exlib::string origin(utf16to8String((const char16_t*)szUrl));
101101
if (!qstrcmp(origin.c_str(), "fs://", 5)) {
102102
origin = origin.substr(5, origin.length());
103103
}
@@ -245,20 +245,20 @@ class gui_worker : public IClassFactory {
245245
return INET_E_DEFAULT_ACTION;
246246
}
247247

248-
exlib::string base(utf16to8String(pwzBaseUrl + 5));
248+
exlib::string base(utf16to8String((const char16_t*)pwzBaseUrl + 5));
249249
exlib::string path;
250250
exlib::string out;
251251

252252
path_base::dirname(base, path);
253-
resolvePath(path, utf16to8String(pwzRelativeUrl));
253+
resolvePath(path, utf16to8String((const char16_t*)pwzRelativeUrl));
254254
path_base::normalize(path, out);
255255

256256
exlib::wstring outw = utf8to16String("fs://" + out);
257257

258258
if (cchResult < outw.length() + 1)
259259
return E_POINTER;
260260

261-
exlib::qmemcpy(pwzResult, outw.c_str(), outw.length() + 1);
261+
exlib::qmemcpy((char16_t*)pwzResult, outw.c_str(), outw.length() + 1);
262262
*pcchResult = (ULONG)outw.length() + 1;
263263

264264
return S_OK;
@@ -659,7 +659,7 @@ result_t WebView::getUrl(exlib::string& retVal, AsyncEvent* ac)
659659

660660
BSTR url;
661661
if (webBrowser2->get_LocationURL(&url) == 0) {
662-
retVal = utf16to8String(url);
662+
retVal = utf16to8String((const char16_t*)url);
663663
::SysFreeString(url);
664664
}
665665

@@ -1297,9 +1297,9 @@ HRESULT WebView::Exec(const GUID* pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt
12971297
char buf[32];
12981298

12991299
if (rgvaEventInfo[3].bstrVal) {
1300-
msg += utf16to8String(rgvaEventInfo[3].bstrVal);
1300+
msg += utf16to8String((const char16_t*)rgvaEventInfo[3].bstrVal);
13011301
if (rgvaEventInfo[4].bstrVal) {
1302-
msg += "\n at " + utf16to8String(rgvaEventInfo[4].bstrVal);
1302+
msg += "\n at " + utf16to8String((const char16_t*)rgvaEventInfo[4].bstrVal);
13031303
snprintf(buf, sizeof(buf), ":%d:%d", rgvaEventInfo[0].intVal, rgvaEventInfo[1].intVal);
13041304
msg += buf;
13051305
}
@@ -1656,15 +1656,15 @@ HRESULT WebView::OnPostMessage(DISPPARAMS* pDispParams)
16561656
return DISP_E_BADPARAMCOUNT;
16571657

16581658
if (pDispParams->rgvarg[0].vt == VT_BSTR)
1659-
_emit("message", utf16to8String(pDispParams->rgvarg[0].bstrVal));
1659+
_emit("message", utf16to8String((const char16_t*)pDispParams->rgvarg[0].bstrVal));
16601660
else {
16611661
_variant_t vstr;
16621662
HRESULT hr = VariantChangeType(&vstr, &pDispParams->rgvarg[0],
16631663
VARIANT_ALPHABOOL, VT_BSTR);
16641664
if (!SUCCEEDED(hr))
16651665
return hr;
16661666

1667-
_emit("message", utf16to8String(vstr.bstrVal));
1667+
_emit("message", utf16to8String((const char16_t*)vstr.bstrVal));
16681668
}
16691669

16701670
return S_OK;
@@ -1690,7 +1690,7 @@ HRESULT WebView::OnLog(DISPPARAMS* pDispParams)
16901690

16911691
exlib::string msg;
16921692
if (pDispParams->rgvarg[0].vt == VT_BSTR) {
1693-
msg = utf16to8String(pDispParams->rgvarg[0].bstrVal);
1693+
msg = utf16to8String((const char16_t*)pDispParams->rgvarg[0].bstrVal);
16941694
} else {
16951695
_variant_t vstr;
16961696
HRESULT hr = VariantChangeType(&vstr, &pDispParams->rgvarg[0],
@@ -1699,7 +1699,7 @@ HRESULT WebView::OnLog(DISPPARAMS* pDispParams)
16991699
return hr;
17001700

17011701
if (vstr.bstrVal)
1702-
msg = utf16to8String(vstr.bstrVal);
1702+
msg = utf16to8String((const char16_t*)vstr.bstrVal);
17031703
}
17041704

17051705
outLog(priority, msg);

fibjs/src/os/os_printer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ result_t os_base::printerInfo(v8::Local<v8::Array>& retVal)
4040
for (DWORD i = 0; i < dwReturned; i++) {
4141
v8::Local<v8::Object> o = v8::Object::New(isolate->m_isolate);
4242
PRINTER_INFO_5W* pItem = &pinfo[i];
43-
o->Set(context, isolate->NewString("name"), isolate->NewString(utf16to8String(pItem->pPrinterName)));
44-
o->Set(context, isolate->NewString("port"), isolate->NewString(utf16to8String(pItem->pPortName)));
43+
o->Set(context, isolate->NewString("name"), isolate->NewString(utf16to8String((const char16_t*)pItem->pPrinterName)));
44+
o->Set(context, isolate->NewString("port"), isolate->NewString(utf16to8String((const char16_t*)pItem->pPortName)));
4545
if (PRINTER_ATTRIBUTE_LOCAL & pItem->Attributes)
4646
o->Set(context, isolate->NewString("type"), isolate->NewString("local"));
4747
else if (PRINTER_ATTRIBUTE_NETWORK & pItem->Attributes)

fibjs/src/os/registry.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class Registry {
6565
int32_t type = bWrite ? KEY_WRITE | KEY_SET_VALUE : KEY_READ;
6666
exlib::wstring wpath = utf8to16String(path);
6767

68-
LONG lResult = RegOpenKeyExW(s_hkeys[root], wpath.c_str(), 0, type, &hKey);
68+
LONG lResult = RegOpenKeyExW(s_hkeys[root], (const wchar_t*)wpath.c_str(), 0, type, &hKey);
6969
if (lResult != ERROR_SUCCESS) {
7070
if (bCreate && lResult == ERROR_FILE_NOT_FOUND) {
7171
SECURITY_DESCRIPTOR SD;
@@ -82,7 +82,7 @@ class Registry {
8282
SA.lpSecurityDescriptor = &SD;
8383
SA.bInheritHandle = false;
8484

85-
lResult = RegCreateKeyExW(s_hkeys[root], wpath.c_str(), 0, (LPWSTR)NULL,
85+
lResult = RegCreateKeyExW(s_hkeys[root], (const wchar_t*)wpath.c_str(), 0, (LPWSTR)NULL,
8686
REG_OPTION_NON_VOLATILE, KEY_WRITE, &SA, &hKey,
8787
&dwFunc);
8888

@@ -135,7 +135,7 @@ result_t registry_base::listSubKey(int32_t root, exlib::string key, obj_ptr<NArr
135135
retCode = RegEnumKeyExW(r.hKey, i, achValue, &cchValue, NULL,
136136
NULL, NULL, &ftLastWriteTime);
137137
if (retCode == ERROR_SUCCESS)
138-
l->append(utf16to8String(achValue, cchValue));
138+
l->append(utf16to8String((const char16_t*)achValue, cchValue));
139139
}
140140

141141
retVal = l;
@@ -173,7 +173,7 @@ result_t registry_base::listValue(int32_t root, exlib::string key, obj_ptr<NArra
173173
retCode = RegEnumValueW(r.hKey, i, achValue, &cchValue, NULL,
174174
NULL, NULL, NULL);
175175
if (retCode == ERROR_SUCCESS)
176-
l->append(utf16to8String(achValue, cchValue));
176+
l->append(utf16to8String((const char16_t*)achValue, cchValue));
177177
}
178178

179179
retVal = l;
@@ -190,7 +190,7 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
190190

191191
DWORD dwType = 0, dwSize = 0;
192192

193-
LONG lResult = RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, NULL, &dwSize);
193+
LONG lResult = RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, NULL, &dwSize);
194194
if (lResult != ERROR_SUCCESS)
195195
return CHECK_ERROR(-lResult);
196196

@@ -200,7 +200,7 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
200200
int32_t value = 0;
201201
dwSize = sizeof(value);
202202

203-
RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, (LPBYTE)&value, &dwSize);
203+
RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, (LPBYTE)&value, &dwSize);
204204
retVal = GetReturnValue(isolate, value);
205205
break;
206206
}
@@ -209,7 +209,7 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
209209
int64_t value = 0;
210210
dwSize = sizeof(value);
211211

212-
RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, (LPBYTE)&value, &dwSize);
212+
RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, (LPBYTE)&value, &dwSize);
213213
retVal = GetReturnValue(isolate, value);
214214
break;
215215
}
@@ -220,7 +220,7 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
220220
exlib::string sbuf;
221221

222222
buf.resize(dwSize / 2 - 1);
223-
RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, (LPBYTE)buf.data(), &dwSize);
223+
RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, (LPBYTE)buf.data(), &dwSize);
224224

225225
sbuf = utf16to8String(buf);
226226
retVal = GetReturnValue(isolate, sbuf);
@@ -233,19 +233,19 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
233233
exlib::string sbuf;
234234

235235
buf.resize(dwSize / 2);
236-
RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, (LPBYTE)buf.data(), &dwSize);
236+
RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, (LPBYTE)buf.data(), &dwSize);
237237

238238
v8::Local<v8::Array> arr = v8::Array::New(isolate->m_isolate);
239239
int32_t n = 0;
240240

241-
const wchar_t* p1 = buf.c_str();
241+
const wchar_t* p1 = (const wchar_t*)buf.c_str();
242242
const wchar_t* pn = p1 + dwSize / 2;
243243
while ((p1 < pn) && *p1) {
244244
const wchar_t* p2 = p1;
245245
while (*p2)
246246
p2++;
247247

248-
sbuf = utf16to8String(p1, (int32_t)(p2 - p1));
248+
sbuf = utf16to8String((const char16_t*)p1, (int32_t)(p2 - p1));
249249
arr->Set(context, n++, GetReturnValue(isolate, sbuf));
250250
p1 = p2 + 1;
251251
}
@@ -258,7 +258,7 @@ result_t registry_base::get(int32_t root, exlib::string key, v8::Local<v8::Value
258258
obj_ptr<Buffer> buf;
259259

260260
buf = new Buffer(NULL, dwSize);
261-
RegQueryValueExW(r.hKey, r.skey.c_str(), NULL, &dwType, buf->data(), &dwSize);
261+
RegQueryValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), NULL, &dwType, buf->data(), &dwSize);
262262

263263
buf->valueOf(retVal);
264264

@@ -279,7 +279,7 @@ result_t set_reg(int32_t root, exlib::string key, int32_t type, const void* data
279279
if (hr < 0)
280280
return hr;
281281

282-
LONG lResult = RegSetValueExW(r.hKey, r.skey.c_str(), 0, type, (const BYTE*)data, size);
282+
LONG lResult = RegSetValueExW(r.hKey, (const wchar_t*)r.skey.c_str(), 0, type, (const BYTE*)data, size);
283283
if (lResult != ERROR_SUCCESS)
284284
return CHECK_ERROR(-lResult);
285285

@@ -346,9 +346,9 @@ result_t registry_base::del(int32_t root, exlib::string key)
346346
if (hr < 0)
347347
return hr;
348348

349-
LONG lResult = RegDeleteValueW(r.hKey, r.skey.c_str());
349+
LONG lResult = RegDeleteValueW(r.hKey, (const wchar_t*)r.skey.c_str());
350350
if (lResult == ERROR_FILE_NOT_FOUND)
351-
lResult = RegDeleteKeyW(r.hKey, r.skey.c_str());
351+
lResult = RegDeleteKeyW(r.hKey, (const wchar_t*)r.skey.c_str());
352352

353353
if (lResult != ERROR_SUCCESS)
354354
return CHECK_ERROR(-lResult);

0 commit comments

Comments
 (0)
0