Akihiro Sagawa : advapi32: Fix the error code on load failure.
Alexandre Julliard
julliard at winehq.org
Mon May 27 14:50:20 CDT 2019
Module: wine
Branch: master
Commit: 62f52103646c20e81fe7bb76e51dee1813a82edf
URL: https://source.winehq.org/git/wine.git/?a=commit;h=62f52103646c20e81fe7bb76e51dee1813a82edf
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Sun May 26 21:15:09 2019 +0900
advapi32: Fix the error code on load failure.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/registry.c | 12 ++++++------
dlls/advapi32/tests/registry.c | 8 +++-----
2 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index f18e34f..8596aea 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -3133,6 +3133,10 @@ static INT load_string(HINSTANCE hModule, UINT resId, LPWSTR *pResString)
/* Strings are length-prefixed. Lowest nibble of resId is an index. */
idxString = resId & 0xf;
while (idxString--) pString += *pString + 1;
+ if (!*pString) {
+ SetLastError(ERROR_NOT_FOUND);
+ return 0;
+ }
*pResString = pString + 1;
return *pString;
@@ -3153,11 +3157,11 @@ static LONG load_mui_string(const WCHAR *file_name, UINT res_id, WCHAR *buffer,
hModule = LoadLibraryExW(file_name, NULL,
LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE);
if (!hModule)
- return ERROR_BADKEY;
+ return GetLastError();
size = load_string(hModule, res_id, &string);
if (!size) {
- result = ERROR_FILE_NOT_FOUND;
+ result = GetLastError();
goto cleanup;
}
*req_chars = size + 1;
@@ -3210,10 +3214,6 @@ cleanup:
* RETURNS
* Success: ERROR_SUCCESS,
* Failure: nonzero error code from winerror.h
- *
- * NOTES
- * This is an API of Windows Vista, which wasn't available at the time this code
- * was written. We have to check for the correct behaviour once it's available.
*/
LSTATUS WINAPI RegLoadMUIStringW(HKEY hKey, LPCWSTR pwszValue, LPWSTR pwszBuffer, DWORD cbBuffer,
LPDWORD pcbData, DWORD dwFlags, LPCWSTR pwszBaseDir)
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
index 0f4e196..8a2fb3b 100644
--- a/dlls/advapi32/tests/registry.c
+++ b/dlls/advapi32/tests/registry.c
@@ -3854,7 +3854,6 @@ static void test_RegLoadMUIString(void)
BOOL use_sysdir;
DWORD expected;
DWORD broken_ret;
- BOOL todo;
} test_case[] = {
/* 0 */
{ "", REG_SZ, FALSE, ERROR_INVALID_DATA },
@@ -3868,9 +3867,9 @@ static void test_RegLoadMUIString(void)
{ "@%WineMuiTest2%", REG_EXPAND_SZ, TRUE, ERROR_SUCCESS },
/* 8 */
{ "@%WineMuiExe%,a", REG_SZ, FALSE, ERROR_INVALID_DATA },
- { "@%WineMuiExe%,-4", REG_SZ, FALSE, ERROR_NOT_FOUND, ERROR_FILE_NOT_FOUND, TRUE },
- { "@%WineMuiExe%,-39", REG_SZ, FALSE, ERROR_RESOURCE_NAME_NOT_FOUND, 0, TRUE },
- { "@%WineMuiDat%,-16", REG_EXPAND_SZ, FALSE, ERROR_BAD_EXE_FORMAT, ERROR_FILE_NOT_FOUND, TRUE },
+ { "@%WineMuiExe%,-4", REG_SZ, FALSE, ERROR_NOT_FOUND, ERROR_FILE_NOT_FOUND },
+ { "@%WineMuiExe%,-39", REG_SZ, FALSE, ERROR_RESOURCE_NAME_NOT_FOUND },
+ { "@%WineMuiDat%,-16", REG_EXPAND_SZ, FALSE, ERROR_BAD_EXE_FORMAT, ERROR_FILE_NOT_FOUND },
};
if (!pRegLoadMUIStringA || !pRegLoadMUIStringW)
@@ -4013,7 +4012,6 @@ static void test_RegLoadMUIString(void)
ret = pRegLoadMUIStringW(hkey_main, tz_valueW, bufW, ARRAY_SIZE(bufW),
&size, 0,
test_case[i].use_sysdir ? sysdirW : NULL);
- todo_wine_if(test_case[i].todo)
ok(ret == test_case[i].expected ||
broken(test_case[i].value[0] == '%' && ret == ERROR_SUCCESS /* vista */) ||
broken(test_case[i].broken_ret && ret == test_case[i].broken_ret /* vista */),
More information about the wine-cvs
mailing list