Skip to content

Commit 2491afa

Browse files
winesynclearn-more
authored andcommitted
[WINESYNC] msi: Handle the remote case directly in MsiGetSourcePathA().
Signed-off-by: Zebediah Figura <[email protected]> Signed-off-by: Hans Leidekker <[email protected]> Signed-off-by: Alexandre Julliard <[email protected]> wine commit id 43ce218a48f5b3420f48379e911e974b8bb9ef88 by Zebediah Figura <[email protected]>
1 parent 2f2e68e commit 2491afa

File tree

2 files changed

+42
-14
lines changed

2 files changed

+42
-14
lines changed

dll/win32/msi/install.c

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -421,22 +421,50 @@ static UINT MSI_GetSourcePath( MSIHANDLE hInstall, LPCWSTR szFolder,
421421
/***********************************************************************
422422
* MsiGetSourcePathA (MSI.@)
423423
*/
424-
UINT WINAPI MsiGetSourcePathA( MSIHANDLE hInstall, LPCSTR szFolder,
425-
LPSTR szPathBuf, LPDWORD pcchPathBuf )
424+
UINT WINAPI MsiGetSourcePathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
426425
{
427-
LPWSTR folder;
428-
awstring str;
426+
MSIPACKAGE *package;
427+
const WCHAR *path;
428+
WCHAR *folderW;
429429
UINT r;
430430

431-
TRACE("%s %p %p\n", debugstr_a(szFolder), szPathBuf, pcchPathBuf);
431+
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
432+
433+
if (!folder)
434+
return ERROR_INVALID_PARAMETER;
435+
436+
if (!(folderW = strdupAtoW(folder)))
437+
return ERROR_OUTOFMEMORY;
438+
439+
package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
440+
if (!package)
441+
{
442+
WCHAR *path = NULL;
443+
MSIHANDLE remote;
444+
445+
if (!(remote = msi_get_remote(hinst)))
446+
{
447+
heap_free(folderW);
448+
return ERROR_INVALID_HANDLE;
449+
}
432450

433-
str.unicode = FALSE;
434-
str.str.a = szPathBuf;
451+
r = remote_GetSourcePath(remote, folderW, &path);
452+
if (!r)
453+
r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
454+
455+
midl_user_free(path);
456+
heap_free(folderW);
457+
return r;
458+
}
435459

436-
folder = strdupAtoW( szFolder );
437-
r = MSI_GetSourcePath( hInstall, folder, &str, pcchPathBuf );
438-
msi_free( folder );
460+
path = msi_resolve_source_folder(package, folderW, NULL);
461+
if (path)
462+
r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
463+
else
464+
r = ERROR_DIRECTORY;
439465

466+
heap_free(folderW);
467+
msiobj_release(&package->hdr);
440468
return r;
441469
}
442470

modules/rostests/winetests/msi/custom.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -584,28 +584,28 @@ static void test_targetpath(MSIHANDLE hinst)
584584
sz = 0;
585585
r = MsiGetSourcePathA(hinst, "TARGETDIR", NULL, &sz);
586586
ok(hinst, !r, "got %u\n", r);
587-
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
587+
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
588588

589589
sz = 0;
590590
strcpy(buffer,"q");
591591
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
592592
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
593593
ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
594-
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
594+
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
595595

596596
sz = 1;
597597
strcpy(buffer,"x");
598598
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
599599
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
600600
ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
601-
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
601+
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
602602

603603
sz = srcsz;
604604
strcpy(buffer,"x");
605605
r = MsiGetSourcePathA(hinst, "TARGETDIR", buffer, &sz);
606606
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
607607
ok(hinst, strlen(buffer) == srcsz - 1, "wrong buffer length %d\n", strlen(buffer));
608-
todo_wine_ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
608+
ok(hinst, sz == srcsz * 2, "got size %u\n", sz);
609609

610610
sz = srcsz + 1;
611611
strcpy(buffer,"x");

0 commit comments

Comments
 (0)