Hans Leidekker : msi: Name and arguments in the service control table are formatted strings.

Alexandre Julliard julliard at winehq.org
Thu Jan 28 11:15:37 CST 2010


Module: wine
Branch: master
Commit: 7c9cb1e1be3d78aafadcce55864e071718f7a08f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7c9cb1e1be3d78aafadcce55864e071718f7a08f

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Thu Jan 28 11:05:34 2010 +0100

msi: Name and arguments in the service control table are formatted strings.

---

 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)




More information about the wine-cvs mailing list