msi: large action.c cleanup
Aric Stewart
aric at codeweavers.com
Thu Jun 9 08:55:22 CDT 2005
Extending upon Mike McCormack's cleanup to us MSI_RecordGetString
-------------- next part --------------
Index: dlls/msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.142
diff -u -r1.142 action.c
--- dlls/msi/action.c 9 Jun 2005 12:05:27 -0000 1.142
+++ dlls/msi/action.c 9 Jun 2005 13:43:24 -0000
@@ -1224,6 +1224,7 @@
action = MSI_RecordGetString(row,1);
if (!action)
{
+ ERR("Error is retreaving action name\n");
rc = ERROR_FUNCTION_FAILED;
msiobj_release(&row->hdr);
break;
@@ -1236,9 +1237,9 @@
/* this is a hack to skip errors in the condition code */
if (MSI_EvaluateConditionW(package, cond) == MSICONDITION_FALSE)
{
- msiobj_release(&row->hdr);
TRACE("Skipping action: %s (condition is false)\n",
- debugstr_w(action));
+ debugstr_w(action));
+ msiobj_release(&row->hdr);
continue;
}
}
@@ -1323,9 +1324,9 @@
/* this is a hack to skip errors in the condition code */
if (MSI_EvaluateConditionW(package,cond) == MSICONDITION_FALSE)
{
- msiobj_release(&row->hdr);
TRACE("Skipping action: %s (condition is false)\n",
- debugstr_w(action));
+ debugstr_w(action));
+ msiobj_release(&row->hdr);
continue;
}
}
@@ -1814,8 +1815,7 @@
static UINT load_file(MSIPACKAGE* package, MSIRECORD * row)
{
DWORD index = package->loaded_files;
- DWORD i;
- LPWSTR buffer;
+ LPCWSTR component;
/* fill in the data */
@@ -1829,18 +1829,13 @@
memset(&package->files[index],0,sizeof(MSIFILE));
package->files[index].File = load_dynamic_stringW(row, 1);
- buffer = load_dynamic_stringW(row, 2);
- package->files[index].ComponentIndex = -1;
- for (i = 0; i < package->loaded_components; i++)
- if (strcmpW(package->components[i].Component,buffer)==0)
- {
- package->files[index].ComponentIndex = i;
- break;
- }
+ component = MSI_RecordGetString(row, 2);
+ package->files[index].ComponentIndex = get_loaded_component(package,
+ component);
+
if (package->files[index].ComponentIndex == -1)
- ERR("Unfound Component %s\n",debugstr_w(buffer));
- HeapFree(GetProcessHeap(), 0, buffer);
+ ERR("Unfound Component %s\n",debugstr_w(component));
package->files[index].FileName = load_dynamic_stringW(row,3);
reduce_to_longfilename(package->files[index].FileName);
@@ -2033,7 +2028,8 @@
'W','H','E','R','E',' ', '`', 'D','i','r','e','c','t', 'o','r','y','`',
' ','=',' ','\'','%','s','\'',
0};
- LPWSTR ptargetdir, targetdir, parent, srcdir;
+ LPWSTR ptargetdir, targetdir, srcdir;
+ LPCWSTR parent;
LPWSTR shortname = NULL;
MSIRECORD * row = 0;
INT index = -1;
@@ -2119,7 +2115,7 @@
HeapFree(GetProcessHeap(), 0, ptargetdir);
TRACE(" SourceDefault = %s\n",debugstr_w(package->folders[index].SourceDefault));
- parent = load_dynamic_stringW(row,2);
+ parent = MSI_RecordGetString(row,2);
if (parent)
{
i = load_folder(package,parent);
@@ -2131,7 +2127,6 @@
}
else
package->folders[index].ParentIndex = -2;
- HeapFree(GetProcessHeap(), 0, parent);
package->folders[index].Property = load_dynamic_property(package, dir,NULL);
@@ -2149,6 +2144,9 @@
TRACE("Working to resolve %s\n",debugstr_w(name));
+ if (!name)
+ return NULL;
+
/* special resolving for Target and Source root dir */
if (strcmpW(name,cszTargetDir)==0 || strcmpW(name,cszSourceDir)==0)
{
@@ -3366,19 +3364,13 @@
}
component = MSI_RecordGetString(row,2);
- if (!component)
- {
- ERR("Unable to get component\n");
- msiobj_release(&row->hdr);
- break;
- }
-
component_index = get_loaded_component(package,component);
if (!ACTION_VerifyComponentForAction(package, component_index,
INSTALLSTATE_LOCAL))
{
- TRACE("Skipping copy due to disabled component\n");
+ TRACE("Skipping copy due to disabled component %s\n",
+ debugstr_w(component));
/* the action taken was the same as the current install state */
package->components[component_index].Action =
@@ -3469,7 +3461,7 @@
/* OK this value is "interpreted" and then formatted based on the
first few characters */
-static LPSTR parse_value(MSIPACKAGE *package, WCHAR *value, DWORD *type,
+static LPSTR parse_value(MSIPACKAGE *package, LPCWSTR value, DWORD *type,
DWORD *size)
{
LPSTR data = NULL;
@@ -3553,7 +3545,7 @@
else
{
static const WCHAR szMulti[] = {'[','~',']',0};
- WCHAR *ptr;
+ LPCWSTR ptr;
*type=REG_SZ;
if (value[0]=='#')
@@ -3621,8 +3613,8 @@
LPSTR value_data = NULL;
HKEY root_key, hkey;
DWORD type,size;
- LPWSTR value, key, name, component, deformated;
- LPCWSTR szRoot;
+ LPWSTR deformated;
+ LPCWSTR szRoot, component, name, key, value;
INT component_index;
MSIRECORD * uirow;
LPWSTR uikey;
@@ -3642,13 +3634,14 @@
uikey = NULL;
name = NULL;
- component = load_dynamic_stringW(row, 6);
+ component = MSI_RecordGetString(row, 6);
component_index = get_loaded_component(package,component);
if (!ACTION_VerifyComponentForAction(package, component_index,
INSTALLSTATE_LOCAL))
{
- TRACE("Skipping write due to disabled component\n");
+ TRACE("Skipping write due to disabled component %s\n",
+ debugstr_w(component));
msiobj_release(&row->hdr);
package->components[component_index].Action =
@@ -3659,7 +3652,7 @@
package->components[component_index].Action = INSTALLSTATE_LOCAL;
- name = load_dynamic_stringW(row, 4);
+ name = MSI_RecordGetString(row, 4);
if( MSI_RecordIsNull(row,5) && name )
{
/* null values can have special meanings */
@@ -3670,16 +3663,12 @@
}
else if ((name[0]=='+' && name[1] == 0) ||
(name[0] == '*' && name[1] == 0))
- {
- HeapFree(GetProcessHeap(),0,name);
name = NULL;
check_first = TRUE;
- }
}
root = MSI_RecordGetInteger(row,2);
- key = load_dynamic_stringW(row, 3);
-
+ key = MSI_RecordGetString(row, 3);
/* get the root key */
switch (root)
@@ -3723,7 +3712,7 @@
}
HeapFree(GetProcessHeap(),0,deformated);
- value = load_dynamic_stringW(row,5);
+ value = MSI_RecordGetString(row,5);
if (value)
value_data = parse_value(package, value, &type, &size);
else
@@ -3759,7 +3748,8 @@
{
TRACE("Checked and setting value %s of %s\n",
debugstr_w(deformated), debugstr_w(uikey));
- RegSetValueExW(hkey, deformated, 0, type, value_data, size);
+ if (deformated || size)
+ RegSetValueExW(hkey, deformated, 0, type, value_data, size);
}
}
@@ -3776,16 +3766,12 @@
msiobj_release( &uirow->hdr );
HeapFree(GetProcessHeap(),0,value_data);
- HeapFree(GetProcessHeap(),0,value);
HeapFree(GetProcessHeap(),0,deformated);
msiobj_release(&row->hdr);
RegCloseKey(hkey);
next:
HeapFree(GetProcessHeap(),0,uikey);
- HeapFree(GetProcessHeap(),0,key);
- HeapFree(GetProcessHeap(),0,name);
- HeapFree(GetProcessHeap(),0,component);
}
MSI_ViewClose(view);
msiobj_release(&view->hdr);
@@ -3885,8 +3871,8 @@
rc = ERROR_SUCCESS;
while (rc == ERROR_SUCCESS)
{
- LPWSTR cond = NULL;
- LPWSTR message = NULL;
+ LPCWSTR cond = NULL;
+ LPCWSTR message = NULL;
rc = MSI_ViewFetch(view,&row);
if (rc != ERROR_SUCCESS)
@@ -3895,19 +3881,17 @@
break;
}
- cond = load_dynamic_stringW(row,1);
+ cond = MSI_RecordGetString(row,1);
if (MSI_EvaluateConditionW(package,cond) != MSICONDITION_TRUE)
{
LPWSTR deformated;
- message = load_dynamic_stringW(row,2);
+ message = MSI_RecordGetString(row,2);
deformat_string(package,message,&deformated);
MessageBoxW(NULL,deformated,title,MB_OK);
- HeapFree(GetProcessHeap(),0,message);
HeapFree(GetProcessHeap(),0,deformated);
rc = ERROR_FUNCTION_FAILED;
}
- HeapFree(GetProcessHeap(),0,cond);
msiobj_release(&row->hdr);
}
MSI_ViewClose(view);
@@ -3929,7 +3913,8 @@
{
MSIRECORD * row = 0;
UINT root,len;
- LPWSTR key,deformated,buffer,name,deformated_name;
+ LPWSTR deformated,buffer,deformated_name;
+ LPCWSTR key,name;
static const WCHAR ExecSeqQuery[] =
{'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
'`','R','e','g','i','s','t','r','y','`',' ',
@@ -3944,8 +3929,8 @@
return NULL;
root = MSI_RecordGetInteger(row,2);
- key = load_dynamic_stringW(row, 3);
- name = load_dynamic_stringW(row, 4);
+ key = MSI_RecordGetString(row, 3);
+ name = MSI_RecordGetString(row, 4);
deformat_string(package, key , &deformated);
deformat_string(package, name, &deformated_name);
@@ -3960,9 +3945,7 @@
else
sprintfW(buffer,fmt,root,deformated);
- HeapFree(GetProcessHeap(),0,key);
HeapFree(GetProcessHeap(),0,deformated);
- HeapFree(GetProcessHeap(),0,name);
HeapFree(GetProcessHeap(),0,deformated_name);
msiobj_release(&row->hdr);
@@ -4325,10 +4308,8 @@
while (1)
{
- WCHAR component[0x100];
- DWORD sz;
+ LPCWSTR component;
INT index;
- LPWSTR guid;
typelib_struct tl_struct;
HMODULE module;
static const WCHAR szTYPELIB[] = {'T','Y','P','E','L','I','B',0};
@@ -4340,9 +4321,7 @@
break;
}
- sz = 0x100;
- MSI_RecordGetStringW(row,3,component,&sz);
-
+ component = MSI_RecordGetString(row,3);
index = get_loaded_component(package,component);
if (index < 0)
{
@@ -4372,12 +4351,14 @@
continue;
}
- guid = load_dynamic_stringW(row,1);
module = LoadLibraryExW(package->files[index].TargetPath, NULL,
LOAD_LIBRARY_AS_DATAFILE);
if (module != NULL)
{
+ LPWSTR guid;
+ guid = load_dynamic_stringW(row,1);
CLSIDFromString(guid, &tl_struct.clsid);
+ HeapFree(GetProcessHeap(),0,guid);
tl_struct.source = strdupW(package->files[index].TargetPath);
tl_struct.path = NULL;
@@ -4386,14 +4367,14 @@
if (tl_struct.path != NULL)
{
- LPWSTR help;
- WCHAR helpid[0x100];
+ LPWSTR help = NULL;
+ LPCWSTR helpid;
HRESULT res;
- sz = 0x100;
- MSI_RecordGetStringW(row,6,helpid,&sz);
-
- help = resolve_folder(package,helpid,FALSE,FALSE,NULL);
+ helpid = MSI_RecordGetString(row,6);
+
+ if (helpid)
+ help = resolve_folder(package,helpid,FALSE,FALSE,NULL);
res = RegisterTypeLib(tl_struct.ptLib,tl_struct.path,help);
HeapFree(GetProcessHeap(),0,help);
@@ -4431,7 +4412,7 @@
{
DWORD index = package->loaded_appids;
DWORD sz;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4448,9 +4429,8 @@
MSI_RecordGetStringW(row, 1, package->appids[index].AppID, &sz);
TRACE("loading appid %s\n",debugstr_w(package->appids[index].AppID));
- buffer = load_dynamic_stringW(row,2);
+ buffer = MSI_RecordGetString(row,2);
deformat_string(package,buffer,&package->appids[index].RemoteServerName);
- HeapFree(GetProcessHeap(),0,buffer);
package->appids[index].LocalServer = load_dynamic_stringW(row,3);
package->appids[index].ServiceParameters = load_dynamic_stringW(row,4);
@@ -4499,7 +4479,7 @@
static INT load_progid(MSIPACKAGE* package, MSIRECORD *row)
{
DWORD index = package->loaded_progids;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4515,17 +4495,15 @@
package->progids[index].ProgID = load_dynamic_stringW(row,1);
TRACE("loading progid %s\n",debugstr_w(package->progids[index].ProgID));
- buffer = load_dynamic_stringW(row,2);
+ buffer = MSI_RecordGetString(row,2);
package->progids[index].ParentIndex = load_given_progid(package,buffer);
if (package->progids[index].ParentIndex < 0 && buffer)
FIXME("Unknown parent ProgID %s\n",debugstr_w(buffer));
- HeapFree(GetProcessHeap(),0,buffer);
- buffer = load_dynamic_stringW(row,3);
+ buffer = MSI_RecordGetString(row,3);
package->progids[index].ClassIndex = load_given_class(package,buffer);
if (package->progids[index].ClassIndex< 0 && buffer)
FIXME("Unknown class %s\n",debugstr_w(buffer));
- HeapFree(GetProcessHeap(),0,buffer);
package->progids[index].Description = load_dynamic_stringW(row,4);
@@ -4549,10 +4527,9 @@
}
else
{
- buffer = load_dynamic_stringW(row,5);
+ buffer = MSI_RecordGetString(row,5);
if (buffer)
build_icon_path(package,buffer,&(package->progids[index].IconPath));
- HeapFree(GetProcessHeap(),0,buffer);
}
package->progids[index].CurVerIndex = -1;
@@ -4611,7 +4588,7 @@
{
DWORD index = package->loaded_classes;
DWORD sz,i;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4629,10 +4606,9 @@
TRACE("loading class %s\n",debugstr_w(package->classes[index].CLSID));
sz = IDENTIFIER_SIZE;
MSI_RecordGetStringW(row, 2, package->classes[index].Context, &sz);
- buffer = load_dynamic_stringW(row,3);
+ buffer = MSI_RecordGetString(row,3);
package->classes[index].ComponentIndex = get_loaded_component(package,
buffer);
- HeapFree(GetProcessHeap(),0,buffer);
package->classes[index].ProgIDText = load_dynamic_stringW(row,4);
package->classes[index].ProgIDIndex =
@@ -4640,13 +4616,12 @@
package->classes[index].Description = load_dynamic_stringW(row,5);
- buffer = load_dynamic_stringW(row,6);
+ buffer = MSI_RecordGetString(row,6);
if (buffer)
package->classes[index].AppIDIndex =
load_given_appid(package, buffer);
else
package->classes[index].AppIDIndex = -1;
- HeapFree(GetProcessHeap(),0,buffer);
package->classes[index].FileTypeMask = load_dynamic_stringW(row,7);
@@ -4671,10 +4646,9 @@
}
else
{
- buffer = load_dynamic_stringW(row,8);
+ buffer = MSI_RecordGetString(row,8);
if (buffer)
build_icon_path(package,buffer,&(package->classes[index].IconPath));
- HeapFree(GetProcessHeap(),0,buffer);
}
if (!MSI_RecordIsNull(row,10))
@@ -4706,13 +4680,11 @@
reduce_to_longfilename(package->classes[index].DefInprocHandler32);
}
}
- buffer = load_dynamic_stringW(row,11);
+ buffer = MSI_RecordGetString(row,11);
deformat_string(package,buffer,&package->classes[index].Argument);
- HeapFree(GetProcessHeap(),0,buffer);
- buffer = load_dynamic_stringW(row,12);
+ buffer = MSI_RecordGetString(row,12);
package->classes[index].FeatureIndex = get_loaded_feature(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
package->classes[index].Attributes = MSI_RecordGetInteger(row,13);
@@ -4763,7 +4735,7 @@
{
DWORD index = package->loaded_mimes;
DWORD sz;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4780,10 +4752,9 @@
package->mimes[index].ContentType = load_dynamic_stringW(row,1);
TRACE("loading mime %s\n",debugstr_w(package->mimes[index].ContentType));
- buffer = load_dynamic_stringW(row,2);
+ buffer = MSI_RecordGetString(row,2);
package->mimes[index].ExtensionIndex = load_given_extension(package,
buffer);
- HeapFree(GetProcessHeap(),0,buffer);
sz = IDENTIFIER_SIZE;
MSI_RecordGetStringW(row,3,package->mimes[index].CLSID,&sz);
@@ -4829,7 +4800,7 @@
{
DWORD index = package->loaded_extensions;
DWORD sz;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4848,23 +4819,20 @@
TRACE("loading extension %s\n",
debugstr_w(package->extensions[index].Extension));
- buffer = load_dynamic_stringW(row,2);
+ buffer = MSI_RecordGetString(row,2);
package->extensions[index].ComponentIndex =
get_loaded_component(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
package->extensions[index].ProgIDText = load_dynamic_stringW(row,3);
package->extensions[index].ProgIDIndex = load_given_progid(package,
package->extensions[index].ProgIDText);
- buffer = load_dynamic_stringW(row,4);
+ buffer = MSI_RecordGetString(row,4);
package->extensions[index].MIMEIndex = load_given_mime(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
- buffer = load_dynamic_stringW(row,5);
+ buffer = MSI_RecordGetString(row,5);
package->extensions[index].FeatureIndex =
get_loaded_feature(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
return index;
}
@@ -4911,7 +4879,7 @@
{
MSIPACKAGE* package = (MSIPACKAGE*)param;
DWORD index = package->loaded_verbs;
- LPWSTR buffer;
+ LPCWSTR buffer;
/* fill in the data */
@@ -4924,23 +4892,20 @@
memset(&package->verbs[index],0,sizeof(MSIVERB));
- buffer = load_dynamic_stringW(row,1);
+ buffer = MSI_RecordGetString(row,1);
package->verbs[index].ExtensionIndex = load_given_extension(package,buffer);
if (package->verbs[index].ExtensionIndex < 0 && buffer)
ERR("Verb unable to find loaded extension %s\n", debugstr_w(buffer));
- HeapFree(GetProcessHeap(),0,buffer);
package->verbs[index].Verb = load_dynamic_stringW(row,2);
TRACE("loading verb %s\n",debugstr_w(package->verbs[index].Verb));
package->verbs[index].Sequence = MSI_RecordGetInteger(row,3);
- buffer = load_dynamic_stringW(row,4);
+ buffer = MSI_RecordGetString(row,4);
deformat_string(package,buffer,&package->verbs[index].Command);
- HeapFree(GetProcessHeap(),0,buffer);
- buffer = load_dynamic_stringW(row,5);
+ buffer = MSI_RecordGetString(row,5);
deformat_string(package,buffer,&package->verbs[index].Argument);
- HeapFree(GetProcessHeap(),0,buffer);
/* assosiate the verb with the correct extension */
if (package->verbs[index].ExtensionIndex >= 0)
@@ -4963,17 +4928,17 @@
static UINT iterate_all_classes(MSIRECORD *rec, LPVOID param)
{
- LPWSTR clsid;
- LPWSTR context;
- LPWSTR buffer;
+ LPCWSTR clsid;
+ LPCWSTR context;
+ LPCWSTR buffer;
INT component_index;
MSIPACKAGE* package =(MSIPACKAGE*)param;
INT i;
BOOL match = FALSE;
- clsid = load_dynamic_stringW(rec,1);
- context = load_dynamic_stringW(rec,2);
- buffer = load_dynamic_stringW(rec,3);
+ clsid = MSI_RecordGetString(rec,1);
+ context = MSI_RecordGetString(rec,2);
+ buffer = MSI_RecordGetString(rec,3);
component_index = get_loaded_component(package,buffer);
for (i = 0; i < package->loaded_classes; i++)
@@ -4989,10 +4954,6 @@
}
}
- HeapFree(GetProcessHeap(),0,buffer);
- HeapFree(GetProcessHeap(),0,clsid);
- HeapFree(GetProcessHeap(),0,context);
-
if (!match)
load_class(package, rec);
@@ -5018,15 +4979,15 @@
static UINT iterate_all_extensions(MSIRECORD *rec, LPVOID param)
{
- LPWSTR buffer;
- LPWSTR extension;
+ LPCWSTR buffer;
+ LPCWSTR extension;
INT component_index;
MSIPACKAGE* package =(MSIPACKAGE*)param;
BOOL match = FALSE;
INT i;
- extension = load_dynamic_stringW(rec,1);
- buffer = load_dynamic_stringW(rec,2);
+ extension = MSI_RecordGetString(rec,1);
+ buffer = MSI_RecordGetString(rec,2);
component_index = get_loaded_component(package,buffer);
for (i = 0; i < package->loaded_extensions; i++)
@@ -5040,9 +5001,6 @@
}
}
- HeapFree(GetProcessHeap(),0,buffer);
- HeapFree(GetProcessHeap(),0,extension);
-
if (!match)
load_extension(package, rec);
@@ -5068,12 +5026,11 @@
static UINT iterate_all_progids(MSIRECORD *rec, LPVOID param)
{
- LPWSTR buffer;
+ LPCWSTR buffer;
MSIPACKAGE* package =(MSIPACKAGE*)param;
- buffer = load_dynamic_stringW(rec,1);
+ buffer = MSI_RecordGetString(rec,1);
load_given_progid(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
return ERROR_SUCCESS;
}
@@ -5113,12 +5070,11 @@
static UINT iterate_all_mimes(MSIRECORD *rec, LPVOID param)
{
- LPWSTR buffer;
+ LPCWSTR buffer;
MSIPACKAGE* package =(MSIPACKAGE*)param;
- buffer = load_dynamic_stringW(rec,1);
+ buffer = MSI_RecordGetString(rec,1);
load_given_mime(package,buffer);
- HeapFree(GetProcessHeap(),0,buffer);
return ERROR_SUCCESS;
}
@@ -5783,7 +5739,8 @@
while (1)
{
LPWSTR target_file, target_folder;
- WCHAR buffer[0x100];
+ LPCWSTR buffer;
+ WCHAR filename[0x100];
DWORD sz;
DWORD index;
static const WCHAR szlnk[]={'.','l','n','k',0};
@@ -5795,9 +5752,7 @@
break;
}
- sz = 0x100;
- MSI_RecordGetStringW(row,4,buffer,&sz);
-
+ buffer = MSI_RecordGetString(row,4);
index = get_loaded_component(package,buffer);
if (index < 0)
@@ -5840,23 +5795,21 @@
continue;
}
- sz = 0x100;
- MSI_RecordGetStringW(row,2,buffer,&sz);
+ buffer = MSI_RecordGetString(row,2);
target_folder = resolve_folder(package, buffer,FALSE,FALSE,NULL);
/* may be needed because of a bug somehwere else */
create_full_pathW(target_folder);
sz = 0x100;
- MSI_RecordGetStringW(row,3,buffer,&sz);
- reduce_to_longfilename(buffer);
- if (!strchrW(buffer,'.') || strcmpiW(strchrW(buffer,'.'),szlnk))
- strcatW(buffer,szlnk);
- target_file = build_directory_name(2, target_folder, buffer);
+ MSI_RecordGetStringW(row,3,filename,&sz);
+ reduce_to_longfilename(filename);
+ if (!strchrW(filename,'.') || strcmpiW(strchrW(filename,'.'),szlnk))
+ strcatW(filename,szlnk);
+ target_file = build_directory_name(2, target_folder, filename);
HeapFree(GetProcessHeap(),0,target_folder);
- sz = 0x100;
- MSI_RecordGetStringW(row,5,buffer,&sz);
+ buffer = MSI_RecordGetString(row,5);
if (strchrW(buffer,'['))
{
LPWSTR deformated;
@@ -5876,8 +5829,7 @@
if (!MSI_RecordIsNull(row,6))
{
LPWSTR deformated;
- sz = 0x100;
- MSI_RecordGetStringW(row,6,buffer,&sz);
+ buffer = MSI_RecordGetString(row,6);
deformat_string(package,buffer,&deformated);
IShellLinkW_SetArguments(sl,deformated);
HeapFree(GetProcessHeap(),0,deformated);
@@ -5885,10 +5837,8 @@
if (!MSI_RecordIsNull(row,7))
{
- LPWSTR deformated;
- deformated = load_dynamic_stringW(row,7);
- IShellLinkW_SetDescription(sl,deformated);
- HeapFree(GetProcessHeap(),0,deformated);
+ buffer = MSI_RecordGetString(row,7);
+ IShellLinkW_SetDescription(sl,buffer);
}
if (!MSI_RecordIsNull(row,8))
@@ -5899,8 +5849,7 @@
WCHAR *Path = NULL;
INT index;
- sz = 0x100;
- MSI_RecordGetStringW(row,9,buffer,&sz);
+ buffer = MSI_RecordGetString(row,9);
build_icon_path(package,buffer,&Path);
index = MSI_RecordGetInteger(row,10);
@@ -5915,8 +5864,7 @@
if (!MSI_RecordIsNull(row,12))
{
LPWSTR Path;
- sz = 0x100;
- MSI_RecordGetStringW(row,12,buffer,&sz);
+ buffer = MSI_RecordGetString(row,12);
Path = resolve_folder(package, buffer, FALSE, FALSE, NULL);
IShellLinkW_SetWorkingDirectory(sl,Path);
HeapFree(GetProcessHeap(), 0, Path);
@@ -5996,8 +5948,8 @@
while (1)
{
HANDLE the_file;
- WCHAR *FilePath=NULL;
- WCHAR *FileName=NULL;
+ LPWSTR FilePath=NULL;
+ LPCWSTR FileName=NULL;
CHAR buffer[1024];
rc = MSI_ViewFetch(view,&row);
@@ -6007,7 +5959,7 @@
break;
}
- FileName = load_dynamic_stringW(row,1);
+ FileName = MSI_RecordGetString(row,1);
if (!FileName)
{
ERR("Unable to get FileName\n");
@@ -6017,8 +5969,6 @@
build_icon_path(package,FileName,&FilePath);
- HeapFree(GetProcessHeap(),0,FileName);
-
TRACE("Creating icon file at %s\n",debugstr_w(FilePath));
the_file = CreateFileW(FilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
@@ -6161,7 +6122,7 @@
while (1)
{
- LPWSTR component,filename,dirproperty,section,key,value,identifier;
+ LPCWSTR component,section,key,value,identifier,filename,dirproperty;
LPWSTR deformated_section, deformated_key, deformated_value;
LPWSTR folder, fullname = NULL;
MSIRECORD * uirow;
@@ -6174,14 +6135,14 @@
break;
}
- component = load_dynamic_stringW(row, 8);
+ component = MSI_RecordGetString(row, 8);
component_index = get_loaded_component(package,component);
- HeapFree(GetProcessHeap(),0,component);
if (!ACTION_VerifyComponentForAction(package, component_index,
INSTALLSTATE_LOCAL))
{
- TRACE("Skipping ini file due to disabled component\n");
+ TRACE("Skipping ini file due to disabled component %s\n",
+ debugstr_w(component));
msiobj_release(&row->hdr);
package->components[component_index].Action =
@@ -6192,12 +6153,12 @@
package->components[component_index].Action = INSTALLSTATE_LOCAL;
- identifier = load_dynamic_stringW(row,1);
- filename = load_dynamic_stringW(row,2);
- dirproperty = load_dynamic_stringW(row,3);
- section = load_dynamic_stringW(row,4);
- key = load_dynamic_stringW(row,5);
- value = load_dynamic_stringW(row,6);
+ identifier = MSI_RecordGetString(row,1);
+ filename = MSI_RecordGetString(row,2);
+ dirproperty = MSI_RecordGetString(row,3);
+ section = MSI_RecordGetString(row,4);
+ key = MSI_RecordGetString(row,5);
+ value = MSI_RecordGetString(row,6);
action = MSI_RecordGetInteger(row,7);
deformat_string(package,section,&deformated_section);
@@ -6257,13 +6218,7 @@
ui_actiondata(package,szWriteIniValues,uirow);
msiobj_release( &uirow->hdr );
cleanup:
- HeapFree(GetProcessHeap(),0,identifier);
HeapFree(GetProcessHeap(),0,fullname);
- HeapFree(GetProcessHeap(),0,filename);
- HeapFree(GetProcessHeap(),0,key);
- HeapFree(GetProcessHeap(),0,value);
- HeapFree(GetProcessHeap(),0,section);
- HeapFree(GetProcessHeap(),0,dirproperty);
HeapFree(GetProcessHeap(),0,folder);
HeapFree(GetProcessHeap(),0,deformated_key);
HeapFree(GetProcessHeap(),0,deformated_value);
@@ -6310,7 +6265,8 @@
while (1)
{
- LPWSTR filename;
+ LPCWSTR filename;
+ LPWSTR FullName;
INT index;
DWORD len;
@@ -6321,35 +6277,33 @@
break;
}
- filename = load_dynamic_stringW(row,1);
+ filename = MSI_RecordGetString(row,1);
index = get_loaded_file(package,filename);
if (index < 0)
{
ERR("Unable to find file id %s\n",debugstr_w(filename));
- HeapFree(GetProcessHeap(),0,filename);
msiobj_release(&row->hdr);
continue;
}
- HeapFree(GetProcessHeap(),0,filename);
len = strlenW(ExeStr);
len += strlenW(package->files[index].TargetPath);
len +=2;
- filename = HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR));
- strcpyW(filename,ExeStr);
- strcatW(filename,package->files[index].TargetPath);
- strcatW(filename,close);
+ FullName = HeapAlloc(GetProcessHeap(),0,len*sizeof(WCHAR));
+ strcpyW(FullName,ExeStr);
+ strcatW(FullName,package->files[index].TargetPath);
+ strcatW(FullName,close);
- TRACE("Registering %s\n",debugstr_w(filename));
- brc = CreateProcessW(NULL, filename, NULL, NULL, FALSE, 0, NULL,
+ TRACE("Registering %s\n",debugstr_w(FullName));
+ brc = CreateProcessW(NULL, FullName, NULL, NULL, FALSE, 0, NULL,
c_colon, &si, &info);
if (brc)
msi_dialog_check_messages(info.hProcess);
- HeapFree(GetProcessHeap(),0,filename);
+ HeapFree(GetProcessHeap(),0,FullName);
msiobj_release(&row->hdr);
}
MSI_ViewClose(view);
@@ -7331,7 +7285,7 @@
while (1)
{
LPWSTR name;
- LPWSTR file;
+ LPCWSTR file;
UINT index;
DWORD size;
@@ -7342,12 +7296,11 @@
break;
}
- file = load_dynamic_stringW(row,1);
+ file = MSI_RecordGetString(row,1);
index = get_loaded_file(package,file);
if (index < 0)
{
ERR("Unable to load file\n");
- HeapFree(GetProcessHeap(),0,file);
continue;
}
@@ -7356,7 +7309,6 @@
package->files[index].ComponentIndex, INSTALLSTATE_LOCAL))
{
TRACE("Skipping: Component not scheduled for install\n");
- HeapFree(GetProcessHeap(),0,file);
msiobj_release(&row->hdr);
@@ -7377,7 +7329,6 @@
(LPBYTE)package->files[index].FileName,size);
}
- HeapFree(GetProcessHeap(),0,file);
HeapFree(GetProcessHeap(),0,name);
msiobj_release(&row->hdr);
}
@@ -7394,11 +7345,11 @@
static UINT ITERATE_PublishComponent(MSIRECORD *rec, LPVOID param)
{
MSIPACKAGE *package = (MSIPACKAGE*)param;
- LPWSTR compgroupid=NULL;
- LPWSTR feature=NULL;
- LPWSTR text = NULL;
- LPWSTR qualifier = NULL;
- LPWSTR component = NULL;
+ LPCWSTR compgroupid=NULL;
+ LPCWSTR feature=NULL;
+ LPCWSTR text = NULL;
+ LPCWSTR qualifier = NULL;
+ LPCWSTR component = NULL;
LPWSTR advertise = NULL;
LPWSTR output = NULL;
HKEY hkey;
@@ -7406,7 +7357,7 @@
UINT index;
DWORD sz = 0;
- component = load_dynamic_stringW(rec,3);
+ component = MSI_RecordGetString(rec,3);
index = get_loaded_component(package,component);
if (!ACTION_VerifyComponentForAction(package, index,
@@ -7419,19 +7370,18 @@
TRACE("Skipping: Component %s not scheduled for install\n",
debugstr_w(component));
- HeapFree(GetProcessHeap(),0,component);
return ERROR_SUCCESS;
}
- compgroupid = load_dynamic_stringW(rec,1);
+ compgroupid = MSI_RecordGetString(rec,1);
rc = MSIREG_OpenUserComponentsKey(compgroupid, &hkey, TRUE);
if (rc != ERROR_SUCCESS)
goto end;
- text = load_dynamic_stringW(rec,4);
- qualifier = load_dynamic_stringW(rec,2);
- feature = load_dynamic_stringW(rec,5);
+ text = MSI_RecordGetString(rec,4);
+ qualifier = MSI_RecordGetString(rec,2);
+ feature = MSI_RecordGetString(rec,5);
advertise = create_component_advertise_string(package,
&package->components[index], feature);
@@ -7457,11 +7407,6 @@
end:
RegCloseKey(hkey);
HeapFree(GetProcessHeap(),0,output);
- HeapFree(GetProcessHeap(),0,compgroupid);
- HeapFree(GetProcessHeap(),0,component);
- HeapFree(GetProcessHeap(),0,feature);
- HeapFree(GetProcessHeap(),0,text);
- HeapFree(GetProcessHeap(),0,qualifier);
return rc;
}
More information about the wine-patches
mailing list