https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a5e210012b47ce77f04c0f...
commit a5e210012b47ce77f04c0ff977a1afc8fb4d288d Author: winesync ros-dev@reactos.org AuthorDate: Sat Mar 12 15:11:59 2022 +0100 Commit: Mark Jansen mark.jansen@reactos.org CommitDate: Sun Mar 20 19:27:39 2022 +0100
[WINESYNC] msi: Make MsiSetTargetPath() RPC-compatible.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Hans Leidekker hans@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
wine commit id e5fba6d23ee82229582a0cf19a455b3c5ca43776 by Zebediah Figura z.figura12@gmail.com --- dll/win32/msi/install.c | 26 +------------------------- dll/win32/msi/package.c | 5 ++--- dll/win32/msi/winemsi.idl | 2 +- modules/rostests/winetests/msi/custom.c | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 29 deletions(-)
diff --git a/dll/win32/msi/install.c b/dll/win32/msi/install.c index 68d8eb573aa..ba329eb8f80 100644 --- a/dll/win32/msi/install.c +++ b/dll/win32/msi/install.c @@ -535,36 +535,12 @@ UINT WINAPI MsiSetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder, package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE); if (!package) { - HRESULT hr; - BSTR folder, path; MSIHANDLE remote;
if (!(remote = msi_get_remote(hInstall))) return ERROR_INVALID_HANDLE;
- folder = SysAllocString( szFolder ); - path = SysAllocString( szFolderPath ); - if (!folder || !path) - { - SysFreeString(folder); - SysFreeString(path); - return ERROR_OUTOFMEMORY; - } - - hr = remote_SetTargetPath(remote, folder, path); - - SysFreeString(folder); - SysFreeString(path); - - if (FAILED(hr)) - { - if (HRESULT_FACILITY(hr) == FACILITY_WIN32) - return HRESULT_CODE(hr); - - return ERROR_FUNCTION_FAILED; - } - - return ERROR_SUCCESS; + return remote_SetTargetPath(remote, szFolder, szFolderPath); }
ret = MSI_SetTargetPathW( package, szFolder, szFolderPath ); diff --git a/dll/win32/msi/package.c b/dll/win32/msi/package.c index f4d93e047a0..89ac2ce3a6f 100644 --- a/dll/win32/msi/package.c +++ b/dll/win32/msi/package.c @@ -2498,10 +2498,9 @@ UINT __cdecl remote_GetTargetPath(MSIHANDLE hinst, LPCWSTR folder, LPWSTR *value return r; }
-HRESULT __cdecl remote_SetTargetPath(MSIHANDLE hinst, BSTR folder, BSTR value) +UINT __cdecl remote_SetTargetPath(MSIHANDLE hinst, LPCWSTR folder, LPCWSTR value) { - UINT r = MsiSetTargetPathW(hinst, folder, value); - return HRESULT_FROM_WIN32(r); + return MsiSetTargetPathW(hinst, folder, value); }
HRESULT __cdecl remote_GetSourcePath(MSIHANDLE hinst, BSTR folder, BSTR value, DWORD *size) diff --git a/dll/win32/msi/winemsi.idl b/dll/win32/msi/winemsi.idl index 5e09c85b6cd..a0e1ddbb840 100644 --- a/dll/win32/msi/winemsi.idl +++ b/dll/win32/msi/winemsi.idl @@ -77,7 +77,7 @@ interface IWineMsiRemote UINT remote_DoAction( [in] MSIHANDLE hinst, [in, string] LPCWSTR action ); UINT remote_Sequence( [in] MSIHANDLE hinst, [in, string] LPCWSTR table, [in] int sequence ); UINT remote_GetTargetPath( [in] MSIHANDLE hinst, [in, string] LPCWSTR folder, [out, string] LPWSTR *value ); - HRESULT remote_SetTargetPath( [in] MSIHANDLE hinst, [in] BSTR folder, [in] BSTR value ); + UINT remote_SetTargetPath( [in] MSIHANDLE hinst, [in, string] LPCWSTR folder, [in, string] LPCWSTR value ); HRESULT remote_GetSourcePath( [in] MSIHANDLE hinst, [in] BSTR folder, [out, size_is(*size)] BSTR value, [in, out] DWORD *size ); HRESULT remote_GetMode( [in] MSIHANDLE hinst, [in] MSIRUNMODE mode, [out] BOOL *ret ); HRESULT remote_SetMode( [in] MSIHANDLE hinst, [in] MSIRUNMODE mode, [in] BOOL state ); diff --git a/modules/rostests/winetests/msi/custom.c b/modules/rostests/winetests/msi/custom.c index 5062ecd77f2..111032c37a4 100644 --- a/modules/rostests/winetests/msi/custom.c +++ b/modules/rostests/winetests/msi/custom.c @@ -541,6 +541,22 @@ static void test_targetpath(MSIHANDLE hinst) ok(hinst, !r, "got %u\n", r); ok(hinst, !lstrcmpW(bufferW, xyzW), "got %s\n", dbgstr_w(bufferW)); ok(hinst, sz == 3, "got size %u\n", sz); + + r = MsiSetTargetPathA(hinst, NULL, "C:\subdir"); + ok(hinst, r == ERROR_INVALID_PARAMETER, "got %u\n", r); + + r = MsiSetTargetPathA(hinst, "TARGETDIR", NULL); + ok(hinst, r == ERROR_INVALID_PARAMETER, "got %u\n", r); + + r = MsiSetTargetPathA(hinst, "TARGETDIR", "C:\subdir"); + ok(hinst, !r, "got %u\n", r); + + sz = sizeof(buffer); + r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz); + ok(hinst, !r, "got %u\n", r); + ok(hinst, !strcmp(buffer, "C:\subdir\"), "got "%s"\n", buffer); + + r = MsiSetTargetPathA(hinst, "TARGETDIR", "C:\"); }
/* Main test. Anything that doesn't depend on a specific install configuration