Module: wine Branch: master Commit: 1d453a1ff08ea3bbc8a519f19a94dcf4f215d874 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1d453a1ff08ea3bbc8a519f19a...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Mar 23 11:48:46 2010 +0100
msi: Search network sources in addition to disk sources.
---
dlls/msi/media.c | 32 +++++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-)
diff --git a/dlls/msi/media.c b/dlls/msi/media.c index 5e70d50..5c53027 100644 --- a/dlls/msi/media.c +++ b/dlls/msi/media.c @@ -686,7 +686,7 @@ static UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO return ERROR_SUCCESS; }
-/* FIXME: search NETWORK and URL sources as well */ +/* FIXME: search URL sources as well */ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) { WCHAR source[MAX_PATH]; @@ -694,8 +694,16 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) WCHAR prompt[MAX_PATH]; DWORD volumesz, promptsz; DWORD index, size, id; + WCHAR last_type[2]; UINT r;
+ size = 2; + r = MsiSourceListGetInfoW(package->ProductCode, NULL, + package->Context, MSICODE_PRODUCT, + INSTALLPROPERTY_LASTUSEDTYPEW, last_type, &size); + if (r != ERROR_SUCCESS) + return r; + size = MAX_PATH; r = MsiSourceListGetInfoW(package->ProductCode, NULL, package->Context, MSICODE_PRODUCT, @@ -706,6 +714,27 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) index = 0; volumesz = MAX_PATH; promptsz = MAX_PATH; + + if (last_type[0] == 'n') + { + while (MsiSourceListEnumSourcesW(package->ProductCode, NULL, + package->Context, + MSISOURCETYPE_NETWORK, index++, + volume, &volumesz) == ERROR_SUCCESS) + { + if (!strncmpiW(source, volume, strlenW(source))) + { + lstrcpyW(mi->source, source); + lstrcatW(mi->source, mi->cabinet); + TRACE("Found network source %s\n", debugstr_w(mi->source)); + return ERROR_SUCCESS; + } + } + } + + index = 0; + volumesz = MAX_PATH; + promptsz = MAX_PATH; while (MsiSourceListEnumMediaDisksW(package->ProductCode, NULL, package->Context, MSICODE_PRODUCT, index++, &id, @@ -721,6 +750,7 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) { /* FIXME: what about SourceDir */ lstrcpyW(mi->source, source); + TRACE("Found disk source %s\n", debugstr_w(mi->source)); return ERROR_SUCCESS; } }