Some update packages use both x86 and wow64 expressions.
Signed-off-by: Mohamad Al-Jaf mohamadaljaf@gmail.com --- programs/wusa/main.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/programs/wusa/main.c b/programs/wusa/main.c index 74dfeb68d5f..2cfaa1a2d63 100644 --- a/programs/wusa/main.c +++ b/programs/wusa/main.c @@ -477,6 +477,14 @@ static BOOL strbuf_append(struct strbuf *buf, const WCHAR *str, DWORD len) return TRUE; }
+static BOOL expression_is_x86(const WCHAR *str) +{ +#ifdef __x86_64__ + return !wcsicmp(str, L"x86") || !wcsicmp(str, L"wow64"); +#endif + return FALSE; +} + static WCHAR *lookup_expression(struct assembly_entry *assembly, const WCHAR *key) { WCHAR path[MAX_PATH]; @@ -484,25 +492,19 @@ static WCHAR *lookup_expression(struct assembly_entry *assembly, const WCHAR *ke
if (!wcsicmp(key, L"runtime.system32") || !wcsicmp(key, L"runtime.drivers") || !wcsicmp(key, L"runtime.wbem")) { -#ifdef __x86_64__ - if (!wcsicmp(assembly->identity.architecture, L"x86")) csidl = CSIDL_SYSTEMX86; -#endif - if (!csidl) csidl = CSIDL_SYSTEM; + if (expression_is_x86(assembly->identity.architecture)) csidl = CSIDL_SYSTEMX86; + else csidl = CSIDL_SYSTEM; } else if (!wcsicmp(key, L"runtime.windows") || !wcsicmp(key, L"runtime.inf")) csidl = CSIDL_WINDOWS; else if (!wcsicmp(key, L"runtime.programfiles")) { -#ifdef __x86_64__ - if (!wcsicmp(assembly->identity.architecture, L"x86")) csidl = CSIDL_PROGRAM_FILESX86; -#endif - if (!csidl) csidl = CSIDL_PROGRAM_FILES; + if (expression_is_x86(assembly->identity.architecture)) csidl = CSIDL_PROGRAM_FILESX86; + else csidl = CSIDL_PROGRAM_FILES; } else if (!wcsicmp(key, L"runtime.commonfiles")) { -#ifdef __x86_64__ - if (!wcsicmp(assembly->identity.architecture, L"x86")) csidl = CSIDL_PROGRAM_FILES_COMMONX86; -#endif - if (!csidl) csidl = CSIDL_PROGRAM_FILES_COMMON; + if (expression_is_x86(assembly->identity.architecture)) csidl = CSIDL_PROGRAM_FILES_COMMONX86; + else csidl = CSIDL_PROGRAM_FILES_COMMON; } #ifdef __x86_64__ else if (!wcsicmp(key, L"runtime.programfilesx86")) csidl = CSIDL_PROGRAM_FILESX86;