Skip to content

Commit c33915e

Browse files
winesynclearn-more
authored andcommitted
[WINESYNC] msi: Handle the remote case directly in MsiGetTargetPathA().
Signed-off-by: Zebediah Figura <[email protected]> Signed-off-by: Hans Leidekker <[email protected]> Signed-off-by: Alexandre Julliard <[email protected]> wine commit id c9fc3510218f3426b9b448b4569ff4fd275044f8 by Zebediah Figura <[email protected]>
1 parent 02726bb commit c33915e

File tree

2 files changed

+40
-16
lines changed

2 files changed

+40
-16
lines changed

dll/win32/msi/install.c

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -271,26 +271,50 @@ static UINT MSI_GetTargetPath( MSIHANDLE hInstall, LPCWSTR szFolder,
271271
/***********************************************************************
272272
* MsiGetTargetPathA (MSI.@)
273273
*/
274-
UINT WINAPI MsiGetTargetPathA( MSIHANDLE hInstall, LPCSTR szFolder,
275-
LPSTR szPathBuf, LPDWORD pcchPathBuf )
274+
UINT WINAPI MsiGetTargetPathA(MSIHANDLE hinst, const char *folder, char *buf, DWORD *sz)
276275
{
277-
LPWSTR szwFolder;
278-
awstring path;
276+
MSIPACKAGE *package;
277+
const WCHAR *path;
278+
WCHAR *folderW;
279279
UINT r;
280280

281-
TRACE("%s %p %p\n", debugstr_a(szFolder), szPathBuf, pcchPathBuf);
281+
TRACE("%s %p %p\n", debugstr_a(folder), buf, sz);
282282

283-
szwFolder = strdupAtoW(szFolder);
284-
if (szFolder && !szwFolder)
285-
return ERROR_FUNCTION_FAILED;
283+
if (!folder)
284+
return ERROR_INVALID_PARAMETER;
285+
286+
if (!(folderW = strdupAtoW(folder)))
287+
return ERROR_OUTOFMEMORY;
288+
289+
package = msihandle2msiinfo(hinst, MSIHANDLETYPE_PACKAGE);
290+
if (!package)
291+
{
292+
WCHAR *path = NULL;
293+
MSIHANDLE remote;
286294

287-
path.unicode = FALSE;
288-
path.str.a = szPathBuf;
295+
if (!(remote = msi_get_remote(hinst)))
296+
{
297+
heap_free(folderW);
298+
return ERROR_INVALID_HANDLE;
299+
}
289300

290-
r = MSI_GetTargetPath( hInstall, szwFolder, &path, pcchPathBuf );
301+
r = remote_GetTargetPath(remote, folderW, &path);
302+
if (!r)
303+
r = msi_strncpyWtoA(path, -1, buf, sz, TRUE);
291304

292-
msi_free( szwFolder );
305+
midl_user_free(path);
306+
heap_free(folderW);
307+
return r;
308+
}
293309

310+
path = msi_get_target_folder(package, folderW);
311+
if (path)
312+
r = msi_strncpyWtoA(path, -1, buf, sz, FALSE);
313+
else
314+
r = ERROR_DIRECTORY;
315+
316+
heap_free(folderW);
317+
msiobj_release(&package->hdr);
294318
return r;
295319
}
296320

modules/rostests/winetests/msi/custom.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -485,28 +485,28 @@ static void test_targetpath(MSIHANDLE hinst)
485485
sz = 0;
486486
r = MsiGetTargetPathA(hinst, "TARGETDIR", NULL, &sz);
487487
ok(hinst, !r, "got %u\n", r);
488-
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
488+
ok(hinst, sz == 6, "got size %u\n", sz);
489489

490490
sz = 0;
491491
strcpy(buffer,"q");
492492
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
493493
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
494494
ok(hinst, !strcmp(buffer, "q"), "got \"%s\"\n", buffer);
495-
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
495+
ok(hinst, sz == 6, "got size %u\n", sz);
496496

497497
sz = 1;
498498
strcpy(buffer,"x");
499499
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
500500
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
501501
ok(hinst, !buffer[0], "got \"%s\"\n", buffer);
502-
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
502+
ok(hinst, sz == 6, "got size %u\n", sz);
503503

504504
sz = 3;
505505
strcpy(buffer,"x");
506506
r = MsiGetTargetPathA(hinst, "TARGETDIR", buffer, &sz);
507507
ok(hinst, r == ERROR_MORE_DATA, "got %u\n", r);
508508
ok(hinst, !strcmp(buffer, "C:"), "got \"%s\"\n", buffer);
509-
todo_wine_ok(hinst, sz == 6, "got size %u\n", sz);
509+
ok(hinst, sz == 6, "got size %u\n", sz);
510510

511511
sz = 4;
512512
strcpy(buffer,"x");

0 commit comments

Comments
 (0)