Module: wine Branch: master Commit: 06a438152c6dd8b9b17b87376074ac6fe5c1dc1d URL: http://source.winehq.org/git/wine.git/?a=commit;h=06a438152c6dd8b9b17b873760...
Author: James Hawkins jhawkins@codeweavers.com Date: Tue Dec 9 00:21:35 2008 -0600
msi: Forward MsiGetProductPropertyA to MsiGetProductPropertyW.
---
dlls/msi/msi.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 59 insertions(+), 4 deletions(-)
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c index d53cc91..4160695 100644 --- a/dlls/msi/msi.c +++ b/dlls/msi/msi.c @@ -1700,11 +1700,66 @@ HRESULT WINAPI MsiGetFileSignatureInformationW( LPCWSTR szSignedObjectPath, return ERROR_CALL_NOT_IMPLEMENTED; }
-UINT WINAPI MsiGetProductPropertyA( MSIHANDLE hProduct, LPCSTR szProperty, - LPSTR szValue, LPDWORD pccbValue ) +/****************************************************************** + * MsiGetProductPropertyA [MSI.@] + */ +UINT WINAPI MsiGetProductPropertyA(MSIHANDLE hProduct, LPCSTR szProperty, + LPSTR szValue, LPDWORD pccbValue) { - FIXME("%ld %s %p %p\n", hProduct, debugstr_a(szProperty), szValue, pccbValue); - return ERROR_CALL_NOT_IMPLEMENTED; + LPWSTR prop = NULL, val = NULL; + DWORD len; + UINT r; + + TRACE("(%ld, %s, %p, %p)\n", hProduct, debugstr_a(szProperty), + szValue, pccbValue); + + if (szValue && !pccbValue) + return ERROR_INVALID_PARAMETER; + + if (szProperty) prop = strdupAtoW(szProperty); + + len = 0; + r = MsiGetProductPropertyW(hProduct, prop, NULL, &len); + if (r != ERROR_SUCCESS && r != ERROR_MORE_DATA) + goto done; + + if (r == ERROR_SUCCESS) + { + if (szValue) *szValue = '\0'; + if (pccbValue) *pccbValue = 0; + goto done; + } + + val = msi_alloc(++len * sizeof(WCHAR)); + if (!val) + { + r = ERROR_OUTOFMEMORY; + goto done; + } + + r = MsiGetProductPropertyW(hProduct, prop, val, &len); + if (r != ERROR_SUCCESS) + goto done; + + len = WideCharToMultiByte(CP_ACP, 0, val, -1, NULL, 0, NULL, NULL); + + if (szValue) + WideCharToMultiByte(CP_ACP, 0, val, -1, szValue, + *pccbValue, NULL, NULL); + + if (pccbValue) + { + if (len > *pccbValue) + r = ERROR_MORE_DATA; + + *pccbValue = len - 1; + } + +done: + msi_free(prop); + msi_free(val); + + return r; }
UINT WINAPI MsiGetProductPropertyW( MSIHANDLE hProduct, LPCWSTR szProperty,