[2/4] msi: Name and arguments in the service control table are formatted strings.
Hans Leidekker
hans at codeweavers.com
Thu Jan 28 04:05:34 CST 2010
See http://bugs.winehq.org/show_bug.cgi?id=15894
---
dlls/msi/action.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 3280e82..783acb4 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -4466,8 +4466,8 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
MSIPACKAGE *package = param;
MSICOMPONENT *comp;
SC_HANDLE scm, service = NULL;
- LPCWSTR name, *vector = NULL;
- LPWSTR args;
+ LPCWSTR *vector = NULL;
+ LPWSTR name, args;
DWORD event, numargs;
UINT r = ERROR_FUNCTION_FAILED;
@@ -4475,9 +4475,9 @@ static UINT ITERATE_StartService(MSIRECORD *rec, LPVOID param)
if (!comp || comp->Action == INSTALLSTATE_UNKNOWN || comp->Action == INSTALLSTATE_ABSENT)
return ERROR_SUCCESS;
- name = MSI_RecordGetString(rec, 2);
+ deformat_string(package, MSI_RecordGetString(rec, 2), &name);
+ deformat_string(package, MSI_RecordGetString(rec, 4), &args);
event = MSI_RecordGetInteger(rec, 3);
- args = strdupW(MSI_RecordGetString(rec, 4));
if (!(event & msidbServiceControlEventStart))
return ERROR_SUCCESS;
@@ -4510,6 +4510,7 @@ done:
CloseServiceHandle(service);
CloseServiceHandle(scm);
+ msi_free(name);
msi_free(args);
msi_free(vector);
return r;
@@ -4594,7 +4595,6 @@ static UINT ITERATE_StopService(MSIRECORD *rec, LPVOID param)
deformat_string(package, MSI_RecordGetString(rec, 2), &name);
deformat_string(package, MSI_RecordGetString(rec, 4), &args);
- args = strdupW(MSI_RecordGetString(rec, 4));
scm = OpenSCManagerW(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (!scm)
--
1.6.3.3
More information about the wine-patches
mailing list