- Rename dupstrW to strdupW, and remove duplicate definition.
- Move definition of string manipulation functions to msipriv.h.
This commit is contained in:
parent
12bbaa7baf
commit
95dea4969a
|
@ -508,8 +508,8 @@ int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path)
|
||||||
|
|
||||||
memset(&package->files[index],0,sizeof(MSIFILE));
|
memset(&package->files[index],0,sizeof(MSIFILE));
|
||||||
|
|
||||||
package->files[index].File = dupstrW(name);
|
package->files[index].File = strdupW(name);
|
||||||
package->files[index].TargetPath = dupstrW(path);
|
package->files[index].TargetPath = strdupW(path);
|
||||||
package->files[index].Temporary = TRUE;
|
package->files[index].Temporary = TRUE;
|
||||||
|
|
||||||
TRACE("Tracking tempfile (%s)\n",debugstr_w(package->files[index].File));
|
TRACE("Tracking tempfile (%s)\n",debugstr_w(package->files[index].File));
|
||||||
|
@ -677,7 +677,7 @@ static void ui_actiondata(MSIPACKAGE *package, LPCWSTR action, MSIRECORD * recor
|
||||||
package->ActionFormat = load_dynamic_stringW(row,3);
|
package->ActionFormat = load_dynamic_stringW(row,3);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,package->LastAction);
|
HeapFree(GetProcessHeap(),0,package->LastAction);
|
||||||
package->LastAction = dupstrW(action);
|
package->LastAction = strdupW(action);
|
||||||
|
|
||||||
msiobj_release(&row->hdr);
|
msiobj_release(&row->hdr);
|
||||||
MSI_ViewClose(view);
|
MSI_ViewClose(view);
|
||||||
|
@ -875,8 +875,8 @@ UINT ACTION_DoTopLevelINSTALL(MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||||
{
|
{
|
||||||
LPWSTR p, check, path;
|
LPWSTR p, check, path;
|
||||||
|
|
||||||
package->PackagePath = dupstrW(szPackagePath);
|
package->PackagePath = strdupW(szPackagePath);
|
||||||
path = dupstrW(szPackagePath);
|
path = strdupW(szPackagePath);
|
||||||
p = strrchrW(path,'\\');
|
p = strrchrW(path,'\\');
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
|
@ -1921,7 +1921,7 @@ static INT load_folder(MSIPACKAGE *package, const WCHAR* dir)
|
||||||
|
|
||||||
memset(&package->folders[index],0,sizeof(MSIFOLDER));
|
memset(&package->folders[index],0,sizeof(MSIFOLDER));
|
||||||
|
|
||||||
package->folders[index].Directory = dupstrW(dir);
|
package->folders[index].Directory = strdupW(dir);
|
||||||
|
|
||||||
rc = MSI_OpenQuery(package->db, &view, Query, dir);
|
rc = MSI_OpenQuery(package->db, &view, Query, dir);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
|
@ -1980,13 +1980,13 @@ static INT load_folder(MSIPACKAGE *package, const WCHAR* dir)
|
||||||
{
|
{
|
||||||
TRACE(" TargetDefault = %s\n",debugstr_w(targetdir));
|
TRACE(" TargetDefault = %s\n",debugstr_w(targetdir));
|
||||||
HeapFree(GetProcessHeap(),0, package->folders[index].TargetDefault);
|
HeapFree(GetProcessHeap(),0, package->folders[index].TargetDefault);
|
||||||
package->folders[index].TargetDefault = dupstrW(targetdir);
|
package->folders[index].TargetDefault = strdupW(targetdir);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (srcdir)
|
if (srcdir)
|
||||||
package->folders[index].SourceDefault = dupstrW(srcdir);
|
package->folders[index].SourceDefault = strdupW(srcdir);
|
||||||
else if (targetdir)
|
else if (targetdir)
|
||||||
package->folders[index].SourceDefault = dupstrW(targetdir);
|
package->folders[index].SourceDefault = strdupW(targetdir);
|
||||||
HeapFree(GetProcessHeap(), 0, ptargetdir);
|
HeapFree(GetProcessHeap(), 0, ptargetdir);
|
||||||
|
|
||||||
parent = load_dynamic_stringW(row,2);
|
parent = load_dynamic_stringW(row,2);
|
||||||
|
@ -2084,13 +2084,13 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
|
||||||
|
|
||||||
if (!source && package->folders[i].ResolvedTarget)
|
if (!source && package->folders[i].ResolvedTarget)
|
||||||
{
|
{
|
||||||
path = dupstrW(package->folders[i].ResolvedTarget);
|
path = strdupW(package->folders[i].ResolvedTarget);
|
||||||
TRACE(" already resolved to %s\n",debugstr_w(path));
|
TRACE(" already resolved to %s\n",debugstr_w(path));
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
else if (source && package->folders[i].ResolvedSource)
|
else if (source && package->folders[i].ResolvedSource)
|
||||||
{
|
{
|
||||||
path = dupstrW(package->folders[i].ResolvedSource);
|
path = strdupW(package->folders[i].ResolvedSource);
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
else if (!source && package->folders[i].Property)
|
else if (!source && package->folders[i].Property)
|
||||||
|
@ -2114,7 +2114,7 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
|
||||||
{
|
{
|
||||||
TRACE(" TargetDefault = %s\n",debugstr_w(package->folders[i].TargetDefault));
|
TRACE(" TargetDefault = %s\n",debugstr_w(package->folders[i].TargetDefault));
|
||||||
path = build_directory_name(3, p, package->folders[i].TargetDefault, NULL);
|
path = build_directory_name(3, p, package->folders[i].TargetDefault, NULL);
|
||||||
package->folders[i].ResolvedTarget = dupstrW(path);
|
package->folders[i].ResolvedTarget = strdupW(path);
|
||||||
TRACE(" resolved into %s\n",debugstr_w(path));
|
TRACE(" resolved into %s\n",debugstr_w(path));
|
||||||
if (set_prop)
|
if (set_prop)
|
||||||
MSI_SetPropertyW(package,name,path);
|
MSI_SetPropertyW(package,name,path);
|
||||||
|
@ -2122,7 +2122,7 @@ LPWSTR resolve_folder(MSIPACKAGE *package, LPCWSTR name, BOOL source,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
path = build_directory_name(3, p, package->folders[i].SourceDefault, NULL);
|
path = build_directory_name(3, p, package->folders[i].SourceDefault, NULL);
|
||||||
package->folders[i].ResolvedSource = dupstrW(path);
|
package->folders[i].ResolvedSource = strdupW(path);
|
||||||
}
|
}
|
||||||
HeapFree(GetProcessHeap(),0,p);
|
HeapFree(GetProcessHeap(),0,p);
|
||||||
}
|
}
|
||||||
|
@ -3119,7 +3119,7 @@ inline static UINT get_file_target(MSIPACKAGE *package, LPCWSTR file_key,
|
||||||
{
|
{
|
||||||
if (package->files[index].State >= 2)
|
if (package->files[index].State >= 2)
|
||||||
{
|
{
|
||||||
*file_source = dupstrW(package->files[index].TargetPath);
|
*file_source = strdupW(package->files[index].TargetPath);
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -3231,7 +3231,7 @@ static UINT ACTION_DuplicateFiles(MSIPACKAGE *package)
|
||||||
if (MSI_RecordIsNull(row,5))
|
if (MSI_RecordIsNull(row,5))
|
||||||
{
|
{
|
||||||
LPWSTR p;
|
LPWSTR p;
|
||||||
dest_path = dupstrW(file_source);
|
dest_path = strdupW(file_source);
|
||||||
p = strrchrW(dest_path,'\\');
|
p = strrchrW(dest_path,'\\');
|
||||||
if (p)
|
if (p)
|
||||||
*p=0;
|
*p=0;
|
||||||
|
@ -3759,7 +3759,7 @@ static LPWSTR resolve_keypath( MSIPACKAGE* package, INT
|
||||||
|
|
||||||
if (j>=0)
|
if (j>=0)
|
||||||
{
|
{
|
||||||
LPWSTR p = dupstrW(package->files[j].TargetPath);
|
LPWSTR p = strdupW(package->files[j].TargetPath);
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4882,7 +4882,7 @@ static UINT ACTION_CreateShortcuts(MSIPACKAGE *package)
|
||||||
{
|
{
|
||||||
LPWSTR keypath;
|
LPWSTR keypath;
|
||||||
FIXME("poorly handled shortcut format, advertised shortcut\n");
|
FIXME("poorly handled shortcut format, advertised shortcut\n");
|
||||||
keypath = dupstrW(package->components[index].FullKeypath);
|
keypath = strdupW(package->components[index].FullKeypath);
|
||||||
IShellLinkW_SetPath(sl,keypath);
|
IShellLinkW_SetPath(sl,keypath);
|
||||||
HeapFree(GetProcessHeap(),0,keypath);
|
HeapFree(GetProcessHeap(),0,keypath);
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,39 +116,3 @@ int get_loaded_component(MSIPACKAGE* package, LPCWSTR Component );
|
||||||
int get_loaded_feature(MSIPACKAGE* package, LPCWSTR Feature );
|
int get_loaded_feature(MSIPACKAGE* package, LPCWSTR Feature );
|
||||||
int get_loaded_file(MSIPACKAGE* package, LPCWSTR file);
|
int get_loaded_file(MSIPACKAGE* package, LPCWSTR file);
|
||||||
int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path);
|
int track_tempfile(MSIPACKAGE *package, LPCWSTR name, LPCWSTR path);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
inline static char *strdupWtoA( const WCHAR *str )
|
|
||||||
{
|
|
||||||
char *ret = NULL;
|
|
||||||
if (str)
|
|
||||||
{
|
|
||||||
DWORD len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL
|
|
||||||
);
|
|
||||||
if ((ret = HeapAlloc( GetProcessHeap(), 0, len )))
|
|
||||||
WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL );
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static WCHAR *strdupAtoW( const char *str )
|
|
||||||
{
|
|
||||||
WCHAR *ret = NULL;
|
|
||||||
if (str)
|
|
||||||
{
|
|
||||||
DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
|
|
||||||
if ((ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
|
|
||||||
MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static LPWSTR dupstrW(LPCWSTR src)
|
|
||||||
{
|
|
||||||
LPWSTR dest;
|
|
||||||
if (!src) return NULL;
|
|
||||||
dest = HeapAlloc(GetProcessHeap(), 0, (strlenW(src)+1)*sizeof(WCHAR));
|
|
||||||
strcpyW(dest, src);
|
|
||||||
return dest;
|
|
||||||
}
|
|
||||||
|
|
|
@ -145,7 +145,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
|
||||||
else
|
else
|
||||||
newbuf = HeapAlloc(GetProcessHeap(),0, sizeof(LPWSTR));
|
newbuf = HeapAlloc(GetProcessHeap(),0, sizeof(LPWSTR));
|
||||||
|
|
||||||
newbuf[count] = dupstrW(action);
|
newbuf[count] = strdupW(action);
|
||||||
package->CommitAction = newbuf;
|
package->CommitAction = newbuf;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -160,7 +160,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute)
|
||||||
else
|
else
|
||||||
newbuf = HeapAlloc(GetProcessHeap(),0, sizeof(LPWSTR));
|
newbuf = HeapAlloc(GetProcessHeap(),0, sizeof(LPWSTR));
|
||||||
|
|
||||||
newbuf[count] = dupstrW(action);
|
newbuf[count] = strdupW(action);
|
||||||
package->DeferredAction = newbuf;
|
package->DeferredAction = newbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ static void file_running_action(MSIPACKAGE* package, HANDLE Handle,
|
||||||
|
|
||||||
newbuf[count].handle = Handle;
|
newbuf[count].handle = Handle;
|
||||||
newbuf[count].process = process;
|
newbuf[count].process = process;
|
||||||
newbuf[count].name = dupstrW(name);
|
newbuf[count].name = strdupW(name);
|
||||||
|
|
||||||
package->RunningAction = newbuf;
|
package->RunningAction = newbuf;
|
||||||
}
|
}
|
||||||
|
@ -508,8 +508,8 @@ static UINT HANDLE_CustomType1(MSIPACKAGE *package, LPCWSTR source,
|
||||||
info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) );
|
info = HeapAlloc( GetProcessHeap(), 0, sizeof(*info) );
|
||||||
msiobj_addref( &package->hdr );
|
msiobj_addref( &package->hdr );
|
||||||
info->package = package;
|
info->package = package;
|
||||||
info->target = dupstrW(target);
|
info->target = strdupW(target);
|
||||||
info->source = dupstrW(tmp_file);
|
info->source = strdupW(tmp_file);
|
||||||
|
|
||||||
ThreadHandle = CreateThread(NULL,0,DllThread,(LPVOID)info,0,&ThreadId);
|
ThreadHandle = CreateThread(NULL,0,DllThread,(LPVOID)info,0,&ThreadId);
|
||||||
|
|
||||||
|
|
|
@ -309,7 +309,7 @@ static UINT msi_dialog_checkbox_control( msi_dialog *dialog, MSIRECORD *rec )
|
||||||
control->handler = msi_dialog_checkbox_handler;
|
control->handler = msi_dialog_checkbox_handler;
|
||||||
prop = MSI_RecordGetString( rec, 9 );
|
prop = MSI_RecordGetString( rec, 9 );
|
||||||
if( prop )
|
if( prop )
|
||||||
control->property = dupstrW( prop );
|
control->property = strdupW( prop );
|
||||||
msi_dialog_checkbox_sync_state( dialog, control );
|
msi_dialog_checkbox_sync_state( dialog, control );
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
|
@ -364,7 +364,7 @@ static UINT msi_dialog_edit_control( msi_dialog *dialog, MSIRECORD *rec )
|
||||||
control->handler = msi_dialog_edit_handler;
|
control->handler = msi_dialog_edit_handler;
|
||||||
prop = MSI_RecordGetString( rec, 9 );
|
prop = MSI_RecordGetString( rec, 9 );
|
||||||
if( prop )
|
if( prop )
|
||||||
control->property = dupstrW( prop );
|
control->property = strdupW( prop );
|
||||||
val = load_dynamic_property( dialog->package, control->property, NULL );
|
val = load_dynamic_property( dialog->package, control->property, NULL );
|
||||||
SetWindowTextW( control->hwnd, val );
|
SetWindowTextW( control->hwnd, val );
|
||||||
HeapFree( GetProcessHeap(), 0, val );
|
HeapFree( GetProcessHeap(), 0, val );
|
||||||
|
@ -433,7 +433,7 @@ static UINT msi_dialog_create_radiobutton( MSIRECORD *rec, LPVOID param )
|
||||||
|
|
||||||
prop = MSI_RecordGetString( rec, 1 );
|
prop = MSI_RecordGetString( rec, 1 );
|
||||||
if( prop )
|
if( prop )
|
||||||
control->property = dupstrW( prop );
|
control->property = strdupW( prop );
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -467,7 +467,7 @@ static UINT msi_dialog_radiogroup_control( msi_dialog *dialog, MSIRECORD *rec )
|
||||||
}
|
}
|
||||||
|
|
||||||
if( prop )
|
if( prop )
|
||||||
control->property = dupstrW( prop );
|
control->property = strdupW( prop );
|
||||||
|
|
||||||
/* query the Radio Button table for all control in this group */
|
/* query the Radio Button table for all control in this group */
|
||||||
r = MSI_OpenQuery( package->db, &view, query, prop );
|
r = MSI_OpenQuery( package->db, &view, query, prop );
|
||||||
|
|
|
@ -114,7 +114,7 @@ static LPWSTR deformat_file(MSIPACKAGE* package, LPCWSTR key, DWORD* sz)
|
||||||
index = get_loaded_file(package,key);
|
index = get_loaded_file(package,key);
|
||||||
if (index >=0)
|
if (index >=0)
|
||||||
{
|
{
|
||||||
value = dupstrW(package->files[index].TargetPath);
|
value = strdupW(package->files[index].TargetPath);
|
||||||
*sz = (strlenW(value)) * sizeof(WCHAR);
|
*sz = (strlenW(value)) * sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "msiquery.h"
|
#include "msiquery.h"
|
||||||
#include "objbase.h"
|
#include "objbase.h"
|
||||||
#include "objidl.h"
|
#include "objidl.h"
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
|
||||||
#define MSI_DATASIZEMASK 0x00ff
|
#define MSI_DATASIZEMASK 0x00ff
|
||||||
#define MSITYPE_VALID 0x0100
|
#define MSITYPE_VALID 0x0100
|
||||||
|
@ -386,4 +387,38 @@ extern DWORD gUIFilter;
|
||||||
extern LPVOID gUIContext;
|
extern LPVOID gUIContext;
|
||||||
extern WCHAR gszLogFile[MAX_PATH];
|
extern WCHAR gszLogFile[MAX_PATH];
|
||||||
|
|
||||||
|
inline static char *strdupWtoA( LPCWSTR str )
|
||||||
|
{
|
||||||
|
LPSTR ret = NULL;
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
DWORD len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL
|
||||||
|
);
|
||||||
|
if ((ret = HeapAlloc( GetProcessHeap(), 0, len )))
|
||||||
|
WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL );
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static LPWSTR strdupAtoW( LPCSTR str )
|
||||||
|
{
|
||||||
|
LPWSTR ret = NULL;
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
DWORD len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
|
||||||
|
if ((ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
|
||||||
|
MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len );
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static LPWSTR strdupW( LPCWSTR src )
|
||||||
|
{
|
||||||
|
LPWSTR dest;
|
||||||
|
if (!src) return NULL;
|
||||||
|
dest = HeapAlloc(GetProcessHeap(), 0, (strlenW(src)+1)*sizeof(WCHAR));
|
||||||
|
strcpyW(dest, src);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* __WINE_MSI_PRIVATE__ */
|
#endif /* __WINE_MSI_PRIVATE__ */
|
||||||
|
|
|
@ -834,15 +834,6 @@ err:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static LPWSTR strdupW( LPCWSTR str )
|
|
||||||
{
|
|
||||||
UINT len = lstrlenW( str ) + 1;
|
|
||||||
LPWSTR ret = HeapAlloc( GetProcessHeap(), 0, len*sizeof (WCHAR) );
|
|
||||||
if( ret )
|
|
||||||
lstrcpyW( ret, str );
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* information for default tables */
|
/* information for default tables */
|
||||||
static const WCHAR szTables[] = { '_','T','a','b','l','e','s',0 };
|
static const WCHAR szTables[] = { '_','T','a','b','l','e','s',0 };
|
||||||
static const WCHAR szTable[] = { 'T','a','b','l','e',0 };
|
static const WCHAR szTable[] = { 'T','a','b','l','e',0 };
|
||||||
|
|
Loading…
Reference in New Issue