https://git.reactos.org/?p=reactos.git;a=commitdiff;h=a5e210012b47ce77f04c0ff977a1afc8fb4d288d

commit a5e210012b47ce77f04c0ff977a1afc8fb4d288d
Author:     winesync <[email protected]>
AuthorDate: Sat Mar 12 15:11:59 2022 +0100
Commit:     Mark Jansen <[email protected]>
CommitDate: Sun Mar 20 19:27:39 2022 +0100

    [WINESYNC] msi: Make MsiSetTargetPath() RPC-compatible.
    
    Signed-off-by: Zebediah Figura <[email protected]>
    Signed-off-by: Hans Leidekker <[email protected]>
    Signed-off-by: Alexandre Julliard <[email protected]>
    
    wine commit id e5fba6d23ee82229582a0cf19a455b3c5ca43776 by Zebediah Figura 
<[email protected]>
---
 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

Reply via email to