mirror of
https://github.com/reactos/reactos.git
synced 2025-05-01 11:39:58 +00:00
[WINESYNC] msi: Handle the remote case directly in MsiGetSourcePathA().
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 43ce218a48f5b3420f48379e911e974b8bb9ef88 by Zebediah Figura <z.figura12@gmail.com>
This commit is contained in:
parent
2f2e68eb50
commit
2491afaa14
2 changed files with 42 additions and 14 deletions
|
@ -421,22 +421,50 @@ static UINT MSI_GetSourcePath( MSIHANDLE hInstall, LPCWSTR szFolder,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* MsiGetSourcePathA (MSI.@)
|
* MsiGetSourcePathA (MSI.@)
|
||||||
*/
|
*/
|
||||||
UINT WINAPI MsiGetSourcePathA( MSIHANDLE hInstall, LPCSTR szFolder,
|
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
|
||||||
LPSTR szPathBuf, LPDWORD pcchPathBuf )
|
|
||||||
{
|
{
|
||||||
LPWSTR folder;
|
MSIPACKAGE *package;
|
||||||
awstring str;
|
const WCHAR *path;
|
||||||
|
WCHAR *folderW;
|
||||||
UINT r;
|
UINT r;
|
||||||
|
|
||||||
TRACE("%s %p %p\n", debugstr_a(szFolder), szPathBuf, pcchPathBuf);
|
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
|
||||||
|
|
||||||
str.unicode = FALSE;
|
if (!folder)
|
||||||
str.str.a = szPathBuf;
|
return ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
folder = strdupAtoW( szFolder );
|
if (!(folderW = strdupAtoW(folder)))
|
||||||
r = MSI_GetSourcePath( hInstall, folder, &str, pcchPathBuf );
|
return ERROR_OUTOFMEMORY;
|
||||||
msi_free( folder );
|
|
||||||
|
|
||||||
|
package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
|
||||||
|
if (!package)
|
||||||
|
{
|
||||||
|
WCHAR *path = NULL;
|
||||||
|
MSIHANDLE remote;
|
||||||
|
|
||||||
|
if (!(remote = msi_get_remote(hinst)))
|
||||||
|
{
|
||||||
|
heap_free(folderW);
|
||||||
|
return ERROR_INVALID_HANDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = remote_GetSourcePath(remote, folderW, &path);
|
||||||
|
if (!r)
|
||||||
|
r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
|
||||||
|
|
||||||
|
midl_user_free(path);
|
||||||
|
heap_free(folderW);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
path = msi_resolve_source_folder(package, folderW, NULL);
|
||||||
|
if (path)
|
||||||
|
r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
|
||||||
|
else
|
||||||
|
r = ERROR_DIRECTORY;
|
||||||
|
|
||||||
|
heap_free(folderW);
|
||||||
|
msiobj_release(&package->hdr);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -584,28 +584,28 @@ static void test_targetpath(MSIHANDLE hinst)
|
||||||
sz = 0;
|
sz = 0;
|
||||||
r = MsiGetSourcePathA(hinst, "TARGETDIR", NULL, &sz);
|
r = MsiGetSourcePathA(hinst, "TARGETDIR", NULL, &sz);
|
||||||
ok(hinst, !r, "got %u\n", r);
|
ok(hinst, !r, "got %u\n", r);
|
||||||
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
||||||
|
|
||||||
sz = 0;
|
sz = 0;
|
||||||
strcpy(buffer,"q");
|
strcpy(buffer,"q");
|
||||||
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
||||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||||
ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
|
ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
|
||||||
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
||||||
|
|
||||||
sz = 1;
|
sz = 1;
|
||||||
strcpy(buffer,"x");
|
strcpy(buffer,"x");
|
||||||
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
||||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||||
ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
|
ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
|
||||||
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
||||||
|
|
||||||
sz = srcsz;
|
sz = srcsz;
|
||||||
strcpy(buffer,"x");
|
strcpy(buffer,"x");
|
||||||
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
|
||||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||||
ok(hinst, strlen(buffer) == srcsz - 1, "wrong buffer length %d\n", strlen(buffer));
|
ok(hinst, strlen(buffer) == srcsz - 1, "wrong buffer length %d\n", strlen(buffer));
|
||||||
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
|
||||||
|
|
||||||
sz = srcsz + 1;
|
sz = srcsz + 1;
|
||||||
strcpy(buffer,"x");
|
strcpy(buffer,"x");
|
||||||
|
|
Loading…
Reference in a new issue