James Hawkins : msi: Forward MsiEnumPatchesExA to MsiEnumPatchesExW.
Alexandre Julliard
julliard at winehq.org
Mon Dec 8 09:46:21 CST 2008
Module: wine
Branch: master
Commit: a32fcfa9b1edcf76d732045bd78984179a819e7b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a32fcfa9b1edcf76d732045bd78984179a819e7b
Author: James Hawkins <jhawkins at codeweavers.com>
Date: Mon Dec 8 03:14:00 2008 -0600
msi: Forward MsiEnumPatchesExA to MsiEnumPatchesExW.
---
dlls/msi/registry.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 66 insertions(+), 2 deletions(-)
diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c
index d0ba4d3..f4046c0 100644
--- a/dlls/msi/registry.c
+++ b/dlls/msi/registry.c
@@ -1656,11 +1656,75 @@ UINT WINAPI MsiEnumPatchesExA(LPCSTR szProductCode, LPCSTR szUserSid,
LPSTR szTargetProductCode, MSIINSTALLCONTEXT *pdwTargetProductContext,
LPSTR szTargetUserSid, LPDWORD pcchTargetUserSid)
{
- FIXME("(%s, %s, %d, %d, %d, %p, %p, %p, %p, %p) stub!\n",
+ LPWSTR prodcode = NULL;
+ LPWSTR usersid = NULL;
+ LPWSTR targsid = NULL;
+ WCHAR patch[GUID_SIZE];
+ WCHAR targprod[GUID_SIZE];
+ DWORD len;
+ UINT r;
+
+ TRACE("(%s, %s, %d, %d, %d, %p, %p, %p, %p, %p)\n",
debugstr_a(szProductCode), debugstr_a(szUserSid), dwContext, dwFilter,
dwIndex, szPatchCode, szTargetProductCode, pdwTargetProductContext,
szTargetUserSid, pcchTargetUserSid);
- return ERROR_NO_MORE_ITEMS;
+
+ if (szTargetUserSid && !pcchTargetUserSid)
+ return ERROR_INVALID_PARAMETER;
+
+ if (szProductCode) prodcode = strdupAtoW(szProductCode);
+ if (szUserSid) usersid = strdupAtoW(szUserSid);
+
+ r = MsiEnumPatchesExW(prodcode, usersid, dwContext, dwFilter, dwIndex,
+ patch, targprod, pdwTargetProductContext,
+ NULL, &len);
+ if (r != ERROR_SUCCESS)
+ goto done;
+
+ WideCharToMultiByte(CP_ACP, 0, patch, -1, szPatchCode,
+ GUID_SIZE, NULL, NULL);
+ WideCharToMultiByte(CP_ACP, 0, targprod, -1, szTargetProductCode,
+ GUID_SIZE, NULL, NULL);
+
+ if (!szTargetUserSid)
+ {
+ if (pcchTargetUserSid)
+ *pcchTargetUserSid = len;
+
+ goto done;
+ }
+
+ targsid = msi_alloc(++len * sizeof(WCHAR));
+ if (!targsid)
+ {
+ r = ERROR_OUTOFMEMORY;
+ goto done;
+ }
+
+ r = MsiEnumPatchesExW(prodcode, usersid, dwContext, dwFilter, dwIndex,
+ patch, targprod, pdwTargetProductContext,
+ targsid, &len);
+ if (r != ERROR_SUCCESS || !szTargetUserSid)
+ goto done;
+
+ WideCharToMultiByte(CP_ACP, 0, targsid, -1, szTargetUserSid,
+ *pcchTargetUserSid, NULL, NULL);
+
+ len = lstrlenW(targsid);
+ if (*pcchTargetUserSid < len + 1)
+ {
+ r = ERROR_MORE_DATA;
+ *pcchTargetUserSid = len * sizeof(WCHAR);
+ }
+ else
+ *pcchTargetUserSid = len;
+
+done:
+ msi_free(prodcode);
+ msi_free(usersid);
+ msi_free(targsid);
+
+ return r;
}
/***********************************************************************
More information about the wine-cvs
mailing list