Module: wine Branch: master Commit: 77d259f46c1cd75c89cd14e5c96fb54025b26736 URL: http://source.winehq.org/git/wine.git/?a=commit;h=77d259f46c1cd75c89cd14e5c9...
Author: James Hawkins jhawkins@codeweavers.com Date: Wed May 21 18:39:45 2008 -0500
msi: Search the last used source if the cabinet to extract cannot be found.
---
dlls/msi/files.c | 3 ++- dlls/msi/helpers.c | 10 ++++++++++ dlls/msi/msipriv.h | 1 + 3 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/dlls/msi/files.c b/dlls/msi/files.c index d2bef7c..ae7f3f0 100644 --- a/dlls/msi/files.c +++ b/dlls/msi/files.c @@ -577,7 +577,7 @@ UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO *mi) }
/* FIXME: search NETWORK and URL sources as well */ -static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) +UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) { WCHAR source[MAX_PATH]; WCHAR volume[MAX_PATH]; @@ -586,6 +586,7 @@ static UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi) DWORD index, size, id; UINT r;
+ size = MAX_PATH; r = MsiSourceListGetInfoW(package->ProductCode, NULL, package->Context, MSICODE_PRODUCT, INSTALLPROPERTY_LASTUSEDSOURCEW, source, &size); diff --git a/dlls/msi/helpers.c b/dlls/msi/helpers.c index 3ff47ed..cffc09a 100644 --- a/dlls/msi/helpers.c +++ b/dlls/msi/helpers.c @@ -1163,6 +1163,16 @@ UINT msi_extract_file(MSIPACKAGE *package, MSIFILE *file, LPWSTR destdir) if (r != ERROR_SUCCESS) goto done;
+ if (GetFileAttributesW(mi->source) == INVALID_FILE_ATTRIBUTES) + { + r = find_published_source(package, mi); + if (r != ERROR_SUCCESS) + { + ERR("Cabinet not found: %s\n", debugstr_w(mi->source)); + return ERROR_INSTALL_FAILURE; + } + } + data.package = package; data.mi = mi; data.file = file; diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h index 90eaa19..19d0b0d 100644 --- a/dlls/msi/msipriv.h +++ b/dlls/msi/msipriv.h @@ -908,6 +908,7 @@ extern UINT msi_load_media_info(MSIPACKAGE *package, MSIFILE *file, MSIMEDIAINFO extern void msi_free_media_info(MSIMEDIAINFO *mi); extern BOOL msi_cabextract(MSIPACKAGE* package, MSIMEDIAINFO *mi, PFNFDINOTIFY notify, LPVOID data); extern UINT msi_extract_file(MSIPACKAGE *package, MSIFILE *file, LPWSTR destdir); +extern UINT find_published_source(MSIPACKAGE *package, MSIMEDIAINFO *mi);
/* control event stuff */ extern VOID ControlEvent_FireSubscribedEvent(MSIPACKAGE *package, LPCWSTR event,