Module: wine Branch: master Commit: 7a460eba711f96ddddd31feb4bdb0fc1f087b42f URL: http://source.winehq.org/git/wine.git/?a=commit;h=7a460eba711f96ddddd31feb4b...
Author: Hans Leidekker hans@codeweavers.com Date: Fri Oct 22 10:36:32 2010 +0200
msi: The LoadOrderGroup, StartName and Password fields from the ServiceInstall table are formatted strings.
---
dlls/msi/action.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c index a9826c9..3b21810 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -5367,9 +5367,8 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) MSIRECORD *row; MSIFILE *file; SC_HANDLE hscm, service = NULL; - LPCWSTR comp, depends, pass; - LPWSTR name = NULL, disp = NULL; - LPCWSTR load_order, serv_name, key; + LPCWSTR comp, depends, key; + LPWSTR name = NULL, disp = NULL, load_order = NULL, serv_name = NULL, pass = NULL; DWORD serv_type, start_type; DWORD err_control; SERVICE_DESCRIPTIONW sd = {NULL}; @@ -5400,9 +5399,9 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) deformat_string(package, MSI_RecordGetString(rec, 3), &disp); serv_type = MSI_RecordGetInteger(rec, 4); err_control = MSI_RecordGetInteger(rec, 6); - load_order = MSI_RecordGetString(rec, 7); - serv_name = MSI_RecordGetString(rec, 9); - pass = MSI_RecordGetString(rec, 10); + deformat_string(package, MSI_RecordGetString(rec, 7), &load_order); + deformat_string(package, MSI_RecordGetString(rec, 9), &serv_name); + deformat_string(package, MSI_RecordGetString(rec, 10), &pass); comp = MSI_RecordGetString(rec, 12); deformat_string(package, MSI_RecordGetString(rec, 13), &sd.lpDescription);
@@ -5413,7 +5412,6 @@ static UINT ITERATE_InstallService(MSIRECORD *rec, LPVOID param) ERR("Control query failed!\n"); goto done; } - key = MSI_RecordGetString(row, 6);
file = get_loaded_file(package, key); @@ -5444,6 +5442,9 @@ done: msi_free(name); msi_free(disp); msi_free(sd.lpDescription); + msi_free(load_order); + msi_free(serv_name); + msi_free(pass);
return ERROR_SUCCESS; }