msi: Handle the remote case directly in MsiGetTargetPathA().
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>
This commit is contained in:
parent
2e2934e455
commit
c9fc351021
|
@ -271,26 +271,50 @@ static UINT MSI_GetTargetPath( MSIHANDLE hInstall, LPCWSTR szFolder,
|
|||
/***********************************************************************
|
||||
* MsiGetTargetPathA (MSI.@)
|
||||
*/
|
||||
UINT WINAPI MsiGetTargetPathA( MSIHANDLE hInstall, LPCSTR szFolder,
|
||||
LPSTR szPathBuf, LPDWORD pcchPathBuf )
|
||||
UINT WINAPI MsiGetTargetPathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
|
||||
{
|
||||
LPWSTR szwFolder;
|
||||
awstring path;
|
||||
MSIPACKAGE *package;
|
||||
const WCHAR *path;
|
||||
WCHAR *folderW;
|
||||
UINT r;
|
||||
|
||||
TRACE("%s %p %p\n", debugstr_a(szFolder), szPathBuf, pcchPathBuf);
|
||||
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
|
||||
|
||||
szwFolder = strdupAtoW(szFolder);
|
||||
if (szFolder && !szwFolder)
|
||||
return ERROR_FUNCTION_FAILED;
|
||||
if (!folder)
|
||||
return ERROR_INVALID_PARAMETER;
|
||||
|
||||
path.unicode = FALSE;
|
||||
path.str.a = szPathBuf;
|
||||
if (!(folderW = strdupAtoW(folder)))
|
||||
return ERROR_OUTOFMEMORY;
|
||||
|
||||
r = MSI_GetTargetPath( hInstall, szwFolder, &path, pcchPathBuf );
|
||||
package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
|
||||
if (!package)
|
||||
{
|
||||
WCHAR *path = NULL;
|
||||
MSIHANDLE remote;
|
||||
|
||||
msi_free( szwFolder );
|
||||
if (!(remote = msi_get_remote(hinst)))
|
||||
{
|
||||
heap_free(folderW);
|
||||
return ERROR_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
r = remote_GetTargetPath(remote, folderW, &path);
|
||||
if (!r)
|
||||
r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
|
||||
|
||||
midl_user_free(path);
|
||||
heap_free(folderW);
|
||||
return r;
|
||||
}
|
||||
|
||||
path = msi_get_target_folder(package, folderW);
|
||||
if (path)
|
||||
r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
|
||||
else
|
||||
r = ERROR_DIRECTORY;
|
||||
|
||||
heap_free(folderW);
|
||||
msiobj_release(&package->hdr);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
|
|
@ -485,28 +485,28 @@ static void test_targetpath(MSIHANDLE hinst)
|
|||
sz = 0;
|
||||
r = MsiGetTargetPathA(hinst, "TARGETDIR", NULL, &sz);
|
||||
ok(hinst, !r, "got %u\n", r);
|
||||
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
|
||||
sz = 0;
|
||||
strcpy(buffer,"q");
|
||||
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
|
||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||
ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
|
||||
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
|
||||
sz = 1;
|
||||
strcpy(buffer,"x");
|
||||
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
|
||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||
ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
|
||||
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
|
||||
sz = 3;
|
||||
strcpy(buffer,"x");
|
||||
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
|
||||
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
|
||||
ok(hinst, !strcmp(buffer, "C:"), "got \"%s\"\n", buffer);
|
||||
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
ok(hinst, sz == 6, "got size %u\n", sz);
|
||||
|
||||
sz = 4;
|
||||
strcpy(buffer,"x");
|
||||
|
|
Loading…
Reference in New Issue