ChangeSet ID: 21204 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/10 05:06:04
Modified files: dlls/msi : msi.c
Log message: Aric Stewart aric@codeweavers.com Use MsiDecomposeDescriptorW in MsiProvideQualifiedComponentExW.
Patch: http://cvs.winehq.org/patch.py?id=21204
Old revision New revision Changes Path 1.115 1.116 +8 -25 wine/dlls/msi/msi.c
Index: wine/dlls/msi/msi.c diff -u -p wine/dlls/msi/msi.c:1.115 wine/dlls/msi/msi.c:1.116 --- wine/dlls/msi/msi.c:1.115 10 Nov 2005 11: 6: 4 -0000 +++ wine/dlls/msi/msi.c 10 Nov 2005 11: 6: 4 -0000 @@ -1491,6 +1491,9 @@ end: return ret; }
+/*********************************************************************** + * MsiProvideQualifiedComponentExW [MSI.@] + */ UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR szComponent, LPCWSTR szQualifier, DWORD dwInstallMode, LPWSTR szProduct, DWORD Unused1, DWORD Unused2, LPWSTR lpPathBuf, @@ -1500,10 +1503,9 @@ UINT WINAPI MsiProvideQualifiedComponent UINT rc; LPWSTR info; DWORD sz; - LPWSTR product = NULL; - LPWSTR component = NULL; - LPWSTR ptr; - GUID clsid; + WCHAR product[MAX_FEATURE_CHARS+1]; + WCHAR component[MAX_FEATURE_CHARS+1]; + WCHAR feature[MAX_FEATURE_CHARS+1];
TRACE("%s %s %li %s %li %li %p %p\n", debugstr_w(szComponent), debugstr_w(szQualifier), dwInstallMode, debugstr_w(szProduct), @@ -1530,25 +1532,8 @@ UINT WINAPI MsiProvideQualifiedComponent return ERROR_INDEX_ABSENT; }
- /* find the component */ - ptr = strchrW(&info[20],'>'); - if (ptr) - ptr++; - else - { - RegCloseKey(hkey); - msi_free(info); - return ERROR_INDEX_ABSENT; - } - - if (!szProduct) - { - decode_base85_guid(info,&clsid); - StringFromCLSID(&clsid, &product); - } - decode_base85_guid(ptr,&clsid); - StringFromCLSID(&clsid, &component); - + MsiDecomposeDescriptorW(info, product, feature, component, &sz); + if (!szProduct) rc = MsiGetComponentPathW(product, component, lpPathBuf, pcchPathBuf); else @@ -1556,8 +1541,6 @@ UINT WINAPI MsiProvideQualifiedComponent
RegCloseKey(hkey); msi_free(info); - msi_free(product); - msi_free(component);
if (rc == INSTALLSTATE_LOCAL) return ERROR_SUCCESS;