Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2020
- 82 participants
- 799 discussions
[PATCH 1/2] msi: Use wide character string literals in the remaining files.
by Hans Leidekker 29 Oct '20
by Hans Leidekker 29 Oct '20
29 Oct '20
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
---
dlls/msi/appsearch.c | 101 +++++++----------------
dlls/msi/assembly.c | 100 ++++++----------------
dlls/msi/automation.c | 20 ++---
dlls/msi/cond.y | 75 ++++++++---------
dlls/msi/custom.c | 97 ++++++++--------------
dlls/msi/database.c | 187 +++++++++++++-----------------------------
dlls/msi/delete.c | 2 +-
dlls/msi/distinct.c | 2 +-
dlls/msi/files.c | 51 +++++-------
dlls/msi/font.c | 43 +++-------
dlls/msi/format.c | 7 +-
dlls/msi/install.c | 41 +++++----
dlls/msi/media.c | 23 ++----
dlls/msi/msi.c | 8 +-
dlls/msi/msipriv.h | 105 ------------------------
dlls/msi/msiquery.c | 22 ++---
dlls/msi/patch.c | 107 ++++++++----------------
dlls/msi/record.c | 5 +-
dlls/msi/script.c | 12 +--
dlls/msi/select.c | 8 +-
dlls/msi/source.c | 72 +++++++---------
dlls/msi/sql.y | 3 +-
dlls/msi/storages.c | 6 +-
dlls/msi/streams.c | 8 +-
dlls/msi/string.c | 18 ++--
dlls/msi/suminfo.c | 29 ++++---
dlls/msi/table.c | 111 +++++++++++--------------
dlls/msi/upgrade.c | 19 ++---
dlls/msi/where.c | 2 +-
29 files changed, 420 insertions(+), 864 deletions(-)
diff --git a/dlls/msi/appsearch.c b/dlls/msi/appsearch.c
index dd58ccad702..abd3c9d3fd9 100644
--- a/dlls/msi/appsearch.c
+++ b/dlls/msi/appsearch.c
@@ -82,13 +82,7 @@ void msi_parse_version_string(LPCWSTR verStr, PDWORD ms, PDWORD ls)
*/
static UINT get_signature( MSIPACKAGE *package, MSISIGNATURE *sig, const WCHAR *name )
{
- static const WCHAR query[] = {
- 's','e','l','e','c','t',' ','*',' ',
- 'f','r','o','m',' ',
- 'S','i','g','n','a','t','u','r','e',' ',
- 'w','h','e','r','e',' ','S','i','g','n','a','t','u','r','e',' ','=',' ',
- '\'','%','s','\'',0};
- LPWSTR minVersion, maxVersion, p;
+ WCHAR *minVersion, *maxVersion, *p;
MSIRECORD *row;
DWORD time;
@@ -96,7 +90,7 @@ static UINT get_signature( MSIPACKAGE *package, MSISIGNATURE *sig, const WCHAR *
memset(sig, 0, sizeof(*sig));
sig->Name = name;
- row = MSI_QueryGetRecord( package->db, query, name );
+ row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `Signature` WHERE `Signature` = '%s'", name );
if (!row)
{
TRACE("failed to query signature for %s\n", debugstr_w(name));
@@ -195,7 +189,7 @@ static WCHAR *search_file( MSIPACKAGE *package, WCHAR *path, MSISIGNATURE *sig )
if (!size)
goto done;
- if (!VerQueryValueW(buffer, szBackSlash, (LPVOID)&info, &size) || !info)
+ if (!VerQueryValueW(buffer, L"\\", (LPVOID)&info, &size) || !info)
goto done;
if (sig->MinVersionLS || sig->MinVersionMS)
@@ -227,17 +221,6 @@ done:
static UINT search_components( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ',
- 'F','R','O','M',' ',
- '`','C','o','m','p','L','o','c','a','t','o','r','`',' ',
- 'W','H','E','R','E',' ','`','S','i','g','n','a','t','u','r','e','_','`',' ','=',' ',
- '\'','%','s','\'',0};
- static const WCHAR sigquery[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','S','i','g','n','a','t','u','r','e','`',' ',
- 'W','H','E','R','E',' ','`','S','i','g','n','a','t','u','r','e','`',' ','=',' ',
- '\'','%','s','\'',0};
MSIRECORD *row, *rec;
LPCWSTR signature, guid;
BOOL sigpresent = TRUE;
@@ -252,7 +235,7 @@ static UINT search_components( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATU
*appValue = NULL;
- row = MSI_QueryGetRecord(package->db, query, sig->Name);
+ row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `CompLocator` WHERE `Signature_` = '%s'", sig->Name);
if (!row)
{
TRACE("failed to query CompLocator for %s\n", debugstr_w(sig->Name));
@@ -263,7 +246,7 @@ static UINT search_components( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATU
guid = MSI_RecordGetString(row, 2);
type = MSI_RecordGetInteger(row, 3);
- rec = MSI_QueryGetRecord(package->db, sigquery, signature);
+ rec = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Signature` WHERE `Signature` = '%s'", signature);
if (!rec)
sigpresent = FALSE;
@@ -312,9 +295,6 @@ done:
static void convert_reg_value( DWORD regType, const BYTE *value, DWORD sz, WCHAR **appValue )
{
- static const WCHAR dwordFmt[] = { '#','%','d','\0' };
- static const WCHAR binPre[] = { '#','x','\0' };
- static const WCHAR binFmt[] = { '%','0','2','X','\0' };
LPWSTR ptr;
DWORD i;
@@ -339,7 +319,7 @@ static void convert_reg_value( DWORD regType, const BYTE *value, DWORD sz, WCHAR
* char if needed
*/
*appValue = msi_alloc(10 * sizeof(WCHAR));
- swprintf(*appValue, 10, dwordFmt, *(const DWORD *)value);
+ swprintf(*appValue, 10, L"#%d", *(const DWORD *)value);
break;
case REG_EXPAND_SZ:
sz = ExpandEnvironmentStringsW((LPCWSTR)value, NULL, 0);
@@ -349,10 +329,10 @@ static void convert_reg_value( DWORD regType, const BYTE *value, DWORD sz, WCHAR
case REG_BINARY:
/* #x<nibbles>\0 */
*appValue = msi_alloc((sz * 2 + 3) * sizeof(WCHAR));
- lstrcpyW(*appValue, binPre);
- ptr = *appValue + lstrlenW(binPre);
+ lstrcpyW(*appValue, L"#x");
+ ptr = *appValue + lstrlenW(L"#x");
for (i = 0; i < sz; i++, ptr += 2)
- swprintf(ptr, 3, binFmt, value[i]);
+ swprintf(ptr, 3, L"%02X", value[i]);
break;
default:
WARN("unimplemented for values of type %d\n", regType);
@@ -364,10 +344,6 @@ static UINT search_directory( MSIPACKAGE *, MSISIGNATURE *, const WCHAR *, int,
static UINT search_reg( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- 'R','e','g','L','o','c','a','t','o','r',' ','W','H','E','R','E',' ',
- 'S','i','g','n','a','t','u','r','e','_',' ','=',' ', '\'','%','s','\'',0};
const WCHAR *keyPath, *valueName;
WCHAR *deformatted = NULL, *ptr = NULL, *end;
int root, type;
@@ -382,7 +358,7 @@ static UINT search_reg( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig
*appValue = NULL;
- row = MSI_QueryGetRecord( package->db, query, sig->Name );
+ row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `RegLocator` WHERE `Signature_` = '%s'", sig->Name );
if (!row)
{
TRACE("failed to query RegLocator for %s\n", debugstr_w(sig->Name));
@@ -519,12 +495,6 @@ static LPWSTR get_ini_field(LPWSTR buf, int field)
static UINT search_ini( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig )
{
- static const WCHAR query[] = {
- 's','e','l','e','c','t',' ','*',' ',
- 'f','r','o','m',' ',
- 'I','n','i','L','o','c','a','t','o','r',' ',
- 'w','h','e','r','e',' ',
- 'S','i','g','n','a','t','u','r','e','_',' ','=',' ','\'','%','s','\'',0};
MSIRECORD *row;
LPWSTR fileName, section, key;
int field, type;
@@ -534,7 +504,7 @@ static UINT search_ini( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig
*appValue = NULL;
- row = MSI_QueryGetRecord( package->db, query, sig->Name );
+ row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `IniLocator` WHERE `Signature_` = '%s'", sig->Name );
if (!row)
{
TRACE("failed to query IniLocator for %s\n", debugstr_w(sig->Name));
@@ -657,7 +627,7 @@ static BOOL match_languages( const void *version, const WCHAR *languages )
LANGID *ids;
if (!languages || !languages[0]) return TRUE;
- if (!VerQueryValueW( version, szLangResource, (void **)&lang, &len )) return FALSE;
+ if (!VerQueryValueW( version, L"\\VarFileInfo\\Translation", (void **)&lang, &len )) return FALSE;
if (!(ids = parse_languages( languages, &num_ids ))) return FALSE;
for (i = 0; i < num_ids; i++)
@@ -694,7 +664,7 @@ static UINT file_version_matches( MSIPACKAGE *package, const MSISIGNATURE *sig,
if (!(version = msi_alloc( size ))) return ERROR_OUTOFMEMORY;
if (msi_get_file_version_info( package, filePath, size, version ))
- VerQueryValueW( version, szBackSlash, (void **)&info, &len );
+ VerQueryValueW( version, L"\\", (void **)&info, &len );
if (info)
{
@@ -788,7 +758,6 @@ static UINT file_matches_sig( MSIPACKAGE *package, const MSISIGNATURE *sig, cons
static UINT recurse_search_directory( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig, const WCHAR *dir,
int depth )
{
- static const WCHAR starDotStarW[] = { '*','.','*',0 };
HANDLE hFind;
WIN32_FIND_DATAW findData;
UINT rc = ERROR_SUCCESS;
@@ -807,7 +776,7 @@ static UINT recurse_search_directory( MSIPACKAGE *package, WCHAR **appValue, MSI
* here. Add two because we might need to add a backslash if the dir name
* isn't backslash-terminated.
*/
- len = dirLen + max(fileLen, lstrlenW(starDotStarW)) + 2;
+ len = dirLen + max(fileLen, lstrlenW(L"*.*")) + 2;
buf = msi_alloc(len * sizeof(WCHAR));
if (!buf)
return ERROR_OUTOFMEMORY;
@@ -837,14 +806,14 @@ static UINT recurse_search_directory( MSIPACKAGE *package, WCHAR **appValue, MSI
{
lstrcpyW(buf, dir);
PathAddBackslashW(buf);
- lstrcatW(buf, starDotStarW);
+ lstrcatW(buf, L"*.*");
hFind = msi_find_first_file( package, buf, &findData );
if (hFind != INVALID_HANDLE_VALUE)
{
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY &&
- wcscmp( findData.cFileName, szDot ) &&
- wcscmp( findData.cFileName, szDotDot ))
+ wcscmp( findData.cFileName, L"." ) &&
+ wcscmp( findData.cFileName, L".." ))
{
lstrcpyW(subpath, dir);
PathAppendW(subpath, findData.cFileName);
@@ -853,8 +822,8 @@ static UINT recurse_search_directory( MSIPACKAGE *package, WCHAR **appValue, MSI
while (rc == ERROR_SUCCESS && !*appValue && msi_find_next_file( package, hFind, &findData ))
{
- if (!wcscmp( findData.cFileName, szDot ) ||
- !wcscmp( findData.cFileName, szDotDot ))
+ if (!wcscmp( findData.cFileName, L"." ) ||
+ !wcscmp( findData.cFileName, L".." ))
continue;
lstrcpyW(subpath, dir);
@@ -966,12 +935,6 @@ static UINT search_sig_name( MSIPACKAGE *, const WCHAR *, MSISIGNATURE *, WCHAR
static UINT search_dr( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig )
{
- static const WCHAR query[] = {
- 's','e','l','e','c','t',' ','*',' ',
- 'f','r','o','m',' ',
- 'D','r','L','o','c','a','t','o','r',' ',
- 'w','h','e','r','e',' ',
- 'S','i','g','n','a','t','u','r','e','_',' ','=',' ', '\'','%','s','\'',0};
LPWSTR parent = NULL;
LPCWSTR parentName;
WCHAR path[MAX_PATH];
@@ -985,7 +948,7 @@ static UINT search_dr( MSIPACKAGE *package, WCHAR **appValue, MSISIGNATURE *sig
*appValue = NULL;
- row = MSI_QueryGetRecord( package->db, query, sig->Name );
+ row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `DrLocator` WHERE `Signature_` = '%s'", sig->Name );
if (!row)
{
TRACE("failed to query DrLocator for %s\n", debugstr_w(sig->Name));
@@ -1087,7 +1050,7 @@ static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param)
if (value)
{
r = msi_set_property( package->db, propName, value, -1 );
- if (r == ERROR_SUCCESS && !wcscmp( propName, szSourceDir ))
+ if (r == ERROR_SUCCESS && !wcscmp( propName, L"SourceDir" ))
msi_reset_source_folders( package );
msi_free(value);
@@ -1105,21 +1068,18 @@ static UINT ITERATE_AppSearch(MSIRECORD *row, LPVOID param)
UINT ACTION_AppSearch(MSIPACKAGE *package)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- 'A','p','p','S','e','a','r','c','h',0};
MSIQUERY *view;
UINT r;
- if (msi_action_is_unique(package, szAppSearch))
+ if (msi_action_is_unique(package, L"AppSearch"))
{
TRACE("Skipping AppSearch action: already done in UI sequence\n");
return ERROR_SUCCESS;
}
else
- msi_register_unique_action(package, szAppSearch);
+ msi_register_unique_action(package, L"AppSearch");
- r = MSI_OpenQuery( package->db, &view, query );
+ r = MSI_OpenQuery( package->db, &view, L"SELECT * FROM `AppSearch`" );
if (r != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -1136,8 +1096,6 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
MSISIGNATURE sig;
UINT r = ERROR_SUCCESS;
- static const WCHAR success[] = {'C','C','P','_','S','u','c','c','e','s','s',0};
-
signature = MSI_RecordGetString(row, 1);
TRACE("%s\n", debugstr_w(signature));
@@ -1146,7 +1104,7 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
if (value)
{
TRACE("Found signature %s\n", debugstr_w(signature));
- msi_set_property( package->db, success, szOne, -1 );
+ msi_set_property( package->db, L"CCP_Success", L"1", -1 );
msi_free(value);
r = ERROR_NO_MORE_ITEMS;
}
@@ -1157,21 +1115,18 @@ static UINT ITERATE_CCPSearch(MSIRECORD *row, LPVOID param)
UINT ACTION_CCPSearch(MSIPACKAGE *package)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- 'C','C','P','S','e','a','r','c','h',0};
MSIQUERY *view;
UINT r;
- if (msi_action_is_unique(package, szCCPSearch))
+ if (msi_action_is_unique(package, L"CCPSearch"))
{
TRACE("Skipping AppSearch action: already done in UI sequence\n");
return ERROR_SUCCESS;
}
else
- msi_register_unique_action(package, szCCPSearch);
+ msi_register_unique_action(package, L"CCPSearch");
- r = MSI_OpenQuery(package->db, &view, query);
+ r = MSI_OpenQuery(package->db, &view, L"SELECT * FROM `CCPSearch`");
if (r != ERROR_SUCCESS)
return ERROR_SUCCESS;
diff --git a/dlls/msi/assembly.c b/dlls/msi/assembly.c
index bd694333d2a..1007979827a 100644
--- a/dlls/msi/assembly.c
+++ b/dlls/msi/assembly.c
@@ -32,17 +32,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi);
static BOOL load_fusion_dlls( MSIPACKAGE *package )
{
- static const WCHAR szFusion[] = {'f','u','s','i','o','n','.','d','l','l',0};
- static const WCHAR szMscoree[] = {'\\','m','s','c','o','r','e','e','.','d','l','l',0};
- static const WCHAR szVersion10[] = {'v','1','.','0','.','3','7','0','5',0};
- static const WCHAR szVersion11[] = {'v','1','.','1','.','4','3','2','2',0};
- static const WCHAR szVersion20[] = {'v','2','.','0','.','5','0','7','2','7',0};
- static const WCHAR szVersion40[] = {'v','4','.','0','.','3','0','3','1','9',0};
HRESULT (WINAPI *pLoadLibraryShim)( const WCHAR *, const WCHAR *, void *, HMODULE * );
WCHAR path[MAX_PATH];
DWORD len = GetSystemDirectoryW( path, MAX_PATH );
- lstrcpyW( path + len, szMscoree );
+ lstrcpyW( path + len, L"\\mscoree.dll" );
if (package->hmscoree || !(package->hmscoree = LoadLibraryW( path ))) return TRUE;
if (!(pLoadLibraryShim = (void *)GetProcAddress( package->hmscoree, "LoadLibraryShim" )))
{
@@ -51,10 +45,10 @@ static BOOL load_fusion_dlls( MSIPACKAGE *package )
return TRUE;
}
- pLoadLibraryShim( szFusion, szVersion10, NULL, &package->hfusion10 );
- pLoadLibraryShim( szFusion, szVersion11, NULL, &package->hfusion11 );
- pLoadLibraryShim( szFusion, szVersion20, NULL, &package->hfusion20 );
- pLoadLibraryShim( szFusion, szVersion40, NULL, &package->hfusion40 );
+ pLoadLibraryShim( L"fusion.dll", L"v1.0.3705", NULL, &package->hfusion10 );
+ pLoadLibraryShim( L"fusion.dll", L"v1.1.4322", NULL, &package->hfusion11 );
+ pLoadLibraryShim( L"fusion.dll", L"v2.0.50727", NULL, &package->hfusion20 );
+ pLoadLibraryShim( L"fusion.dll", L"v4.0.30319", NULL, &package->hfusion40 );
return TRUE;
}
@@ -129,16 +123,11 @@ void msi_destroy_assembly_caches( MSIPACKAGE *package )
static MSIRECORD *get_assembly_record( MSIPACKAGE *package, const WCHAR *comp )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','M','s','i','A','s','s','e','m','b','l','y','`',' ',
- 'W','H','E','R','E',' ','`','C','o','m','p','o','n','e','n','t','_','`',
- ' ','=',' ','\'','%','s','\'',0};
MSIQUERY *view;
MSIRECORD *rec;
UINT r;
- r = MSI_OpenQuery( package->db, &view, query, comp );
+ r = MSI_OpenQuery( package->db, &view, L"SELECT * FROM `MsiAssembly` WHERE `Component_` = '%s'", comp );
if (r != ERROR_SUCCESS)
return NULL;
@@ -170,36 +159,28 @@ struct assembly_name
static UINT get_assembly_name_attribute( MSIRECORD *rec, LPVOID param )
{
- static const WCHAR fmtW[] = {'%','s','=','"','%','s','"',0};
- static const WCHAR nameW[] = {'n','a','m','e',0};
struct assembly_name *name = param;
const WCHAR *attr = MSI_RecordGetString( rec, 2 );
const WCHAR *value = MSI_RecordGetString( rec, 3 );
- int len = lstrlenW( fmtW ) + lstrlenW( attr ) + lstrlenW( value );
+ int len = lstrlenW( L"%s=\"%s\"" ) + lstrlenW( attr ) + lstrlenW( value );
if (!(name->attrs[name->index] = msi_alloc( len * sizeof(WCHAR) )))
return ERROR_OUTOFMEMORY;
- if (!wcsicmp( attr, nameW )) lstrcpyW( name->attrs[name->index++], value );
- else swprintf( name->attrs[name->index++], len, fmtW, attr, value );
+ if (!wcsicmp( attr, L"name" )) lstrcpyW( name->attrs[name->index++], value );
+ else swprintf( name->attrs[name->index++], len, L"%s=\"%s\"", attr, value );
return ERROR_SUCCESS;
}
static WCHAR *get_assembly_display_name( MSIDATABASE *db, const WCHAR *comp, MSIASSEMBLY *assembly )
{
- static const WCHAR commaW[] = {',',0};
- static const WCHAR queryW[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','M','s','i','A','s','s','e','m','b','l','y','N','a','m','e','`',' ',
- 'W','H','E','R','E',' ','`','C','o','m','p','o','n','e','n','t','_','`',
- ' ','=',' ','\'','%','s','\'',0};
struct assembly_name name;
WCHAR *display_name = NULL;
MSIQUERY *view;
UINT i, r;
int len;
- r = MSI_OpenQuery( db, &view, queryW, comp );
+ r = MSI_OpenQuery( db, &view, L"SELECT * FROM `MsiAssemblyName` WHERE `Component_` = '%s'", comp );
if (r != ERROR_SUCCESS)
return NULL;
@@ -224,7 +205,7 @@ static WCHAR *get_assembly_display_name( MSIDATABASE *db, const WCHAR *comp, MSI
for (i = 0; i < name.count; i++)
{
lstrcatW( display_name, name.attrs[i] );
- if (i < name.count - 1) lstrcatW( display_name, commaW );
+ if (i < name.count - 1) lstrcatW( display_name, L"," );
}
}
@@ -320,23 +301,17 @@ IAssemblyEnum *msi_create_assembly_enum( MSIPACKAGE *package, const WCHAR *displ
return ret;
}
-static const WCHAR clr_version_v10[] = {'v','1','.','0','.','3','7','0','5',0};
-static const WCHAR clr_version_v11[] = {'v','1','.','1','.','4','3','2','2',0};
-static const WCHAR clr_version_v20[] = {'v','2','.','0','.','5','0','7','2','7',0};
-static const WCHAR clr_version_v40[] = {'v','4','.','0','.','3','0','3','1','9',0};
-static const WCHAR clr_version_unknown[] = {'u','n','k','n','o','w','n',0};
-
static const WCHAR *clr_version[] =
{
- clr_version_v10,
- clr_version_v11,
- clr_version_v20,
- clr_version_v40
+ L"v1.0.3705",
+ L"v1.2.4322",
+ L"v2.0.50727",
+ L"v4.0.30319"
};
static const WCHAR *get_clr_version_str( enum clr_version version )
{
- if (version >= ARRAY_SIZE( clr_version )) return clr_version_unknown;
+ if (version >= ARRAY_SIZE( clr_version )) return L"unknown";
return clr_version[version];
}
@@ -539,30 +514,20 @@ static WCHAR *build_local_assembly_path( const WCHAR *filename )
static LONG open_assemblies_key( UINT context, BOOL win32, HKEY *hkey )
{
- static const WCHAR path_win32[] =
- {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
- 'I','n','s','t','a','l','l','e','r','\\','W','i','n','3','2','A','s','s','e','m','b','l','i','e','s','\\',0};
- static const WCHAR path_dotnet[] =
- {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
- 'I','n','s','t','a','l','l','e','r','\\','A','s','s','e','m','b','l','i','e','s','\\',0};
- static const WCHAR classes_path_win32[] =
- {'I','n','s','t','a','l','l','e','r','\\','W','i','n','3','2','A','s','s','e','m','b','l','i','e','s','\\',0};
- static const WCHAR classes_path_dotnet[] =
- {'I','n','s','t','a','l','l','e','r','\\','A','s','s','e','m','b','l','i','e','s','\\',0};
HKEY root;
const WCHAR *path;
if (context == MSIINSTALLCONTEXT_MACHINE)
{
root = HKEY_CLASSES_ROOT;
- if (win32) path = classes_path_win32;
- else path = classes_path_dotnet;
+ if (win32) path = L"Installer\\Win32Assemblies\\";
+ else path = L"Installer\\Assemblies\\";
}
else
{
root = HKEY_CURRENT_USER;
- if (win32) path = path_win32;
- else path = path_dotnet;
+ if (win32) path = L"Software\\Microsoft\\Installer\\Win32Assemblies\\";
+ else path = L"Software\\Microsoft\\Installer\\Assemblies\\";
}
return RegCreateKeyW( root, path, hkey );
}
@@ -609,33 +574,20 @@ static LONG delete_local_assembly_key( UINT context, BOOL win32, const WCHAR *fi
static LONG open_global_assembly_key( UINT context, BOOL win32, HKEY *hkey )
{
- static const WCHAR path_win32[] =
- {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
- 'I','n','s','t','a','l','l','e','r','\\','W','i','n','3','2','A','s','s','e','m','b','l','i','e','s','\\',
- 'G','l','o','b','a','l',0};
- static const WCHAR path_dotnet[] =
- {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
- 'I','n','s','t','a','l','l','e','r','\\','A','s','s','e','m','b','l','i','e','s','\\',
- 'G','l','o','b','a','l',0};
- static const WCHAR classes_path_win32[] =
- {'I','n','s','t','a','l','l','e','r','\\','W','i','n','3','2','A','s','s','e','m','b','l','i','e','s','\\',
- 'G','l','o','b','a','l',0};
- static const WCHAR classes_path_dotnet[] =
- {'I','n','s','t','a','l','l','e','r','\\','A','s','s','e','m','b','l','i','e','s','\\','G','l','o','b','a','l',0};
HKEY root;
const WCHAR *path;
if (context == MSIINSTALLCONTEXT_MACHINE)
{
root = HKEY_CLASSES_ROOT;
- if (win32) path = classes_path_win32;
- else path = classes_path_dotnet;
+ if (win32) path = L"Installer\\Win32Assemblies\\Global";
+ else path = L"Installer\\Assemblies\\Global";
}
else
{
root = HKEY_CURRENT_USER;
- if (win32) path = path_win32;
- else path = path_dotnet;
+ if (win32) path = L"Software\\Microsoft\\Installer\\Win32Assemblies\\Global";
+ else path = L"Software\\Microsoft\\Installer\\Assemblies\\Global";
}
return RegCreateKeyW( root, path, hkey );
}
@@ -645,7 +597,7 @@ UINT ACTION_MsiPublishAssemblies( MSIPACKAGE *package )
MSICOMPONENT *comp;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szMsiPublishAssemblies);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"MsiPublishAssemblies");
LIST_FOR_EACH_ENTRY(comp, &package->components, MSICOMPONENT, entry)
{
@@ -718,7 +670,7 @@ UINT ACTION_MsiUnpublishAssemblies( MSIPACKAGE *package )
MSICOMPONENT *comp;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szMsiUnpublishAssemblies);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"MsiUnpublishAssemblies");
LIST_FOR_EACH_ENTRY(comp, &package->components, MSICOMPONENT, entry)
{
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index 87c7815094a..dc38436e682 100644
--- a/dlls/msi/automation.c
+++ b/dlls/msi/automation.c
@@ -95,8 +95,7 @@ HRESULT get_typeinfo(tid_t tid, ITypeInfo **typeinfo)
hr = LoadRegTypeLib(&LIBID_WindowsInstaller, 1, 0, LOCALE_NEUTRAL, &lib);
if (FAILED(hr)) {
- static const WCHAR msiserverW[] = {'m','s','i','s','e','r','v','e','r','.','t','l','b',0};
- hr = LoadTypeLib(msiserverW, &lib);
+ hr = LoadTypeLib(L"msiserver.tlb", &lib);
if (FAILED(hr)) {
ERR("Could not load msiserver.tlb\n");
return hr;
@@ -376,8 +375,6 @@ static HRESULT WINAPI AutomationObject_Invoke(
else if (pExcepInfo &&
(hr == DISP_E_PARAMNOTFOUND ||
hr == DISP_E_EXCEPTION)) {
- static const WCHAR szComma[] = { ',',0 };
- static const WCHAR szExceptionSource[] = {'M','s','i',' ','A','P','I',' ','E','r','r','o','r',0};
WCHAR szExceptionDescription[MAX_PATH];
BSTR bstrParamNames[MAX_FUNC_PARAMS];
unsigned namesNo, i;
@@ -395,7 +392,7 @@ static HRESULT WINAPI AutomationObject_Invoke(
{
if (bFirst) bFirst = FALSE;
else {
- lstrcpyW(&szExceptionDescription[lstrlenW(szExceptionDescription)], szComma);
+ lstrcpyW(&szExceptionDescription[lstrlenW(szExceptionDescription)], L",");
}
lstrcpyW(&szExceptionDescription[lstrlenW(szExceptionDescription)], bstrParamNames[i]);
SysFreeString(bstrParamNames[i]);
@@ -403,7 +400,7 @@ static HRESULT WINAPI AutomationObject_Invoke(
memset(pExcepInfo, 0, sizeof(EXCEPINFO));
pExcepInfo->wCode = 1000;
- pExcepInfo->bstrSource = SysAllocString(szExceptionSource);
+ pExcepInfo->bstrSource = SysAllocString(L"Msi API Error");
pExcepInfo->bstrDescription = SysAllocString(szExceptionDescription);
hr = DISP_E_EXCEPTION;
}
@@ -1599,8 +1596,6 @@ static HRESULT session_invoke(
* registry value type. Used by Installer::RegistryValue. */
static void variant_from_registry_value(VARIANT *pVarResult, DWORD dwType, LPBYTE lpData, DWORD dwSize)
{
- static const WCHAR szREG_BINARY[] = { '(','R','E','G','_','B','I','N','A','R','Y',')',0 };
- static const WCHAR szREG_[] = { '(','R','E','G','_','?','?',')',0 };
WCHAR *szString = (WCHAR *)lpData;
LPWSTR szNewString = NULL;
DWORD dwNewSize = 0;
@@ -1642,12 +1637,12 @@ static void variant_from_registry_value(VARIANT *pVarResult, DWORD dwType, LPBYT
case REG_QWORD:
V_VT(pVarResult) = VT_BSTR;
- V_BSTR(pVarResult) = SysAllocString(szREG_); /* Weird string, don't know why native returns it */
+ V_BSTR(pVarResult) = SysAllocString(L"(REG_\?\?)"); /* Weird string, don't know why native returns it */
break;
case REG_BINARY:
V_VT(pVarResult) = VT_BSTR;
- V_BSTR(pVarResult) = SysAllocString(szREG_BINARY);
+ V_BSTR(pVarResult) = SysAllocString(L"(REG_BINARY)");
break;
case REG_NONE:
@@ -1950,9 +1945,6 @@ static HRESULT InstallerImpl_Version(WORD wFlags,
DLLVERSIONINFO verinfo;
WCHAR version[MAX_PATH];
- static const WCHAR format[] = {
- '%','d','.','%','d','.','%','d','.','%','d',0};
-
if (!(wFlags & DISPATCH_PROPERTYGET))
return DISP_E_MEMBERNOTFOUND;
@@ -1961,7 +1953,7 @@ static HRESULT InstallerImpl_Version(WORD wFlags,
if (FAILED(hr))
return hr;
- swprintf(version, ARRAY_SIZE(version), format, verinfo.dwMajorVersion, verinfo.dwMinorVersion,
+ swprintf(version, ARRAY_SIZE(version), L"%d.%d.%d.%d", verinfo.dwMajorVersion, verinfo.dwMinorVersion,
verinfo.dwBuildNumber, verinfo.dwPlatformID);
V_VT(pVarResult) = VT_BSTR;
diff --git a/dlls/msi/cond.y b/dlls/msi/cond.y
index 1a79de31bf8..636999a104f 100644
--- a/dlls/msi/cond.y
+++ b/dlls/msi/cond.y
@@ -144,7 +144,7 @@ static void value_free( struct value val )
%%
condition:
- expression
+ expression
{
COND_input* cond = (COND_input*) info;
cond->result = $1;
@@ -157,7 +157,7 @@ condition:
;
expression:
- boolean_term
+ boolean_term
{
$$ = $1;
}
@@ -318,7 +318,7 @@ value:
{
COND_input* cond = (COND_input*) info;
INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN;
-
+
if(MSI_GetComponentStateW(cond->package, $2, &install, &action ) != ERROR_SUCCESS)
{
$$.type = VALUE_LITERAL;
@@ -335,7 +335,7 @@ value:
{
COND_input* cond = (COND_input*) info;
INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN;
-
+
if(MSI_GetComponentStateW(cond->package, $2, &install, &action ) != ERROR_SUCCESS)
{
$$.type = VALUE_LITERAL;
@@ -352,7 +352,7 @@ value:
{
COND_input* cond = (COND_input*) info;
INSTALLSTATE install, action;
-
+
if (MSI_GetFeatureStateW(cond->package, $2, &install, &action ) != ERROR_SUCCESS)
{
$$.type = VALUE_LITERAL;
@@ -369,7 +369,7 @@ value:
{
COND_input* cond = (COND_input*) info;
INSTALLSTATE install = INSTALLSTATE_UNKNOWN, action = INSTALLSTATE_UNKNOWN;
-
+
if(MSI_GetFeatureStateW(cond->package, $2, &install, &action ) != ERROR_SUCCESS)
{
$$.type = VALUE_LITERAL;
@@ -501,8 +501,8 @@ static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b, BOOL convert )
return compare_substring( a, operator, b );
/* null and empty string are equivalent */
- if (!a) a = szEmpty;
- if (!b) b = szEmpty;
+ if (!a) a = L"";
+ if (!b) b = L"";
if (convert && str_is_number(a) && str_is_number(b))
return compare_int( wcstol(a, NULL, 10), operator, wcstol(b, NULL, 10) );
@@ -581,7 +581,7 @@ static INT compare_int( INT a, INT operator, INT b )
static int COND_IsIdent( WCHAR x )
{
- return( COND_IsAlpha( x ) || COND_IsNumber( x ) || ( x == '_' )
+ return( COND_IsAlpha( x ) || COND_IsNumber( x ) || ( x == '_' )
|| ( x == '#' ) || (x == '.') );
}
@@ -591,24 +591,24 @@ static int COND_GetOperator( COND_input *cond )
const WCHAR str[4];
int id;
} table[] = {
- { {'~','<','=',0}, COND_ILE },
- { {'~','>','<',0}, COND_ISS },
- { {'~','>','>',0}, COND_IRHS },
- { {'~','<','>',0}, COND_INE },
- { {'~','>','=',0}, COND_IGE },
- { {'~','<','<',0}, COND_ILHS },
- { {'~','=',0}, COND_IEQ },
- { {'~','<',0}, COND_ILT },
- { {'~','>',0}, COND_IGT },
- { {'>','=',0}, COND_GE },
- { {'>','<',0}, COND_SS },
- { {'<','<',0}, COND_LHS },
- { {'<','>',0}, COND_NE },
- { {'<','=',0}, COND_LE },
- { {'>','>',0}, COND_RHS },
- { {'>',0}, COND_GT },
- { {'<',0}, COND_LT },
- { {0}, 0 }
+ { L"~<=", COND_ILE },
+ { L"~><", COND_ISS },
+ { L"~>>", COND_IRHS },
+ { L"~<>", COND_INE },
+ { L"~>=", COND_IGE },
+ { L"~<<", COND_ILHS },
+ { L"~=", COND_IEQ },
+ { L"~<", COND_ILT },
+ { L"~>", COND_IGT },
+ { L">=", COND_GE },
+ { L"><", COND_SS },
+ { L"<<", COND_LHS },
+ { L"<>", COND_NE },
+ { L"<=", COND_LE },
+ { L">>", COND_RHS },
+ { L">", COND_GT },
+ { L"<", COND_LT },
+ { L"", 0 }
};
LPCWSTR p = &cond->str[cond->n];
int i = 0, len;
@@ -672,31 +672,24 @@ static int COND_GetOne( struct cond_str *str, COND_input *cond )
}
else if( COND_IsAlpha( ch ) )
{
- static const WCHAR szNot[] = {'N','O','T',0};
- static const WCHAR szAnd[] = {'A','N','D',0};
- static const WCHAR szXor[] = {'X','O','R',0};
- static const WCHAR szEqv[] = {'E','Q','V',0};
- static const WCHAR szImp[] = {'I','M','P',0};
- static const WCHAR szOr[] = {'O','R',0};
-
while( COND_IsIdent( str->data[len] ) )
len++;
rc = COND_IDENT;
if ( len == 3 )
{
- if ( !wcsnicmp( str->data, szNot, len ) )
+ if ( !wcsnicmp( str->data, L"NOT", len ) )
rc = COND_NOT;
- else if( !wcsnicmp( str->data, szAnd, len ) )
+ else if( !wcsnicmp( str->data, L"AND", len ) )
rc = COND_AND;
- else if( !wcsnicmp( str->data, szXor, len ) )
+ else if( !wcsnicmp( str->data, L"XOR", len ) )
rc = COND_XOR;
- else if( !wcsnicmp( str->data, szEqv, len ) )
+ else if( !wcsnicmp( str->data, L"EQV", len ) )
rc = COND_EQV;
- else if( !wcsnicmp( str->data, szImp, len ) )
+ else if( !wcsnicmp( str->data, L"IMP", len ) )
rc = COND_IMP;
}
- else if( (len == 2) && !wcsnicmp( str->data, szOr, len ) )
+ else if( (len == 2) && !wcsnicmp( str->data, L"OR", len ) )
rc = COND_OR;
}
else if( COND_IsNumber( ch ) )
@@ -725,7 +718,7 @@ static int cond_lex( void *COND_lval, COND_input *cond )
do {
rc = COND_GetOne( str, cond );
} while (rc == COND_SPACE);
-
+
return rc;
}
diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c
index e2379424878..508d2edb5cf 100644
--- a/dlls/msi/custom.c
+++ b/dlls/msi/custom.c
@@ -175,37 +175,32 @@ static LPWSTR msi_get_deferred_action(LPCWSTR action, LPCWSTR actiondata,
LPWSTR deferred;
DWORD len;
- static const WCHAR format[] = {
- '[','%','s','<','=','>','%','s','<','=','>','%','s',']','%','s',0
- };
-
if (!actiondata)
return strdupW(action);
len = lstrlenW(action) + lstrlenW(actiondata) +
lstrlenW(usersid) + lstrlenW(prodcode) +
- lstrlenW(format) - 7;
+ lstrlenW(L"[%s<=>%s<=>%s]%s") - 7;
deferred = msi_alloc(len * sizeof(WCHAR));
- swprintf(deferred, len, format, actiondata, usersid, prodcode, action);
+ swprintf(deferred, len, L"[%s<=>%s<=>%s]%s", actiondata, usersid, prodcode, action);
return deferred;
}
static void set_deferred_action_props( MSIPACKAGE *package, const WCHAR *deferred_data )
{
- static const WCHAR sep[] = {'<','=','>',0};
const WCHAR *end, *beg = deferred_data + 1;
- end = wcsstr(beg, sep);
- msi_set_property( package->db, szCustomActionData, beg, end - beg );
+ end = wcsstr(beg, L"<=>");
+ msi_set_property( package->db, L"CustomActionData", beg, end - beg );
beg = end + 3;
- end = wcsstr(beg, sep);
- msi_set_property( package->db, szUserSID, beg, end - beg );
+ end = wcsstr(beg, L"<=>");
+ msi_set_property( package->db, L"UserSID", beg, end - beg );
beg = end + 3;
end = wcschr(beg, ']');
- msi_set_property( package->db, szProductCode, beg, end - beg );
+ msi_set_property( package->db, L"ProductCode", beg, end - beg );
}
WCHAR *msi_create_temp_file( MSIDATABASE *db )
@@ -217,7 +212,7 @@ WCHAR *msi_create_temp_file( MSIDATABASE *db )
WCHAR tmp[MAX_PATH];
UINT len = ARRAY_SIZE( tmp );
- if (msi_get_property( db, szTempFolder, tmp, &len ) ||
+ if (msi_get_property( db, L"TempFolder", tmp, &len ) ||
GetFileAttributesW( tmp ) != FILE_ATTRIBUTE_DIRECTORY)
{
GetTempPathW( MAX_PATH, tmp );
@@ -227,7 +222,7 @@ WCHAR *msi_create_temp_file( MSIDATABASE *db )
if ((ret = msi_alloc( (lstrlenW( db->tempfolder ) + 20) * sizeof(WCHAR) )))
{
- if (!GetTempFileNameW( db->tempfolder, szMsi, 0, ret ))
+ if (!GetTempFileNameW( db->tempfolder, L"msi", 0, ret ))
{
msi_free( ret );
return NULL;
@@ -239,10 +234,6 @@ WCHAR *msi_create_temp_file( MSIDATABASE *db )
static MSIBINARY *create_temp_binary(MSIPACKAGE *package, LPCWSTR source)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','B','i' ,'n','a','r','y','`',' ','W','H','E','R','E',' ',
- '`','N','a','m','e','`',' ','=',' ','\'','%','s','\'',0};
MSIRECORD *row;
MSIBINARY *binary = NULL;
HANDLE file;
@@ -253,7 +244,7 @@ static MSIBINARY *create_temp_binary(MSIPACKAGE *package, LPCWSTR source)
if (!(tmpfile = msi_create_temp_file( package->db ))) return NULL;
- if (!(row = MSI_QueryGetRecord( package->db, query, source ))) goto error;
+ if (!(row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `Binary` WHERE `Name` = '%s'", source ))) goto error;
if (!(binary = msi_alloc_zero( sizeof(MSIBINARY) ))) goto error;
file = CreateFileW( tmpfile, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
@@ -473,9 +464,6 @@ static void handle_msi_break(LPCSTR target)
DebugBreak();
}
-static WCHAR ncalrpcW[] = {'n','c','a','l','r','p','c',0};
-static WCHAR endpoint_fmtW[] = {'m','s','i','%','x',0};
-
#ifdef __i386__
/* wrapper for apps that don't declare the thread function correctly */
extern UINT custom_proc_wrapper( MsiCustomActionEntryPoint entry, MSIHANDLE hinst );
@@ -518,8 +506,8 @@ UINT CDECL __wine_msi_call_dll_function(DWORD client_pid, const GUID *guid)
{
WCHAR endpoint[12];
- swprintf(endpoint, ARRAY_SIZE(endpoint), endpoint_fmtW, client_pid);
- status = RpcStringBindingComposeW(NULL, ncalrpcW, NULL, endpoint, NULL, &binding_str);
+ swprintf(endpoint, ARRAY_SIZE(endpoint), L"msi%x", client_pid);
+ status = RpcStringBindingComposeW(NULL, (WCHAR *)L"ncalrpc", NULL, endpoint, NULL, &binding_str);
if (status != RPC_S_OK)
{
ERR("RpcStringBindingCompose failed: %#x\n", status);
@@ -588,10 +576,6 @@ UINT CDECL __wine_msi_call_dll_function(DWORD client_pid, const GUID *guid)
static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch)
{
- static const WCHAR pipe_name[] = {'\\','\\','.','\\','p','i','p','e','\\','m','s','i','c','a','_','%','x','_','%','d',0};
- static const WCHAR msiexecW[] = {'\\','m','s','i','e','x','e','c','.','e','x','e',0};
- static const WCHAR argsW[] = {'%','s',' ','-','E','m','b','e','d','d','i','n','g',' ','%','d',0};
-
WCHAR path[MAX_PATH], cmdline[MAX_PATH + 23];
PROCESS_INFORMATION pi = {0};
STARTUPINFOW si = {0};
@@ -604,7 +588,7 @@ static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch)
(arch == SCS_64BIT_BINARY && package->custom_server_64_process))
return ERROR_SUCCESS;
- swprintf(buffer, ARRAY_SIZE(buffer), pipe_name,
+ swprintf(buffer, ARRAY_SIZE(buffer), L"\\\\.\\pipe\\msica_%x_%d",
GetCurrentProcessId(), arch == SCS_32BIT_BINARY ? 32 : 64);
pipe = CreateNamedPipeW(buffer, PIPE_ACCESS_DUPLEX, 0, 1, sizeof(DWORD64),
sizeof(GUID), 0, NULL);
@@ -615,11 +599,11 @@ static DWORD custom_start_server(MSIPACKAGE *package, DWORD arch)
wow64 = FALSE;
if ((sizeof(void *) == 8 || wow64) && arch == SCS_32BIT_BINARY)
- GetSystemWow64DirectoryW(path, MAX_PATH - ARRAY_SIZE(msiexecW));
+ GetSystemWow64DirectoryW(path, MAX_PATH - ARRAY_SIZE(L"\\msiexec.exe"));
else
- GetSystemDirectoryW(path, MAX_PATH - ARRAY_SIZE(msiexecW));
- lstrcatW(path, msiexecW);
- swprintf(cmdline, ARRAY_SIZE(cmdline), argsW, path, GetCurrentProcessId());
+ GetSystemDirectoryW(path, MAX_PATH - ARRAY_SIZE(L"\\msiexec.exe"));
+ lstrcatW(path, L"\\msiexec.exe");
+ swprintf(cmdline, ARRAY_SIZE(cmdline), L"%s -Embedding %d", path, GetCurrentProcessId());
if (wow64 && arch == SCS_64BIT_BINARY)
{
@@ -744,8 +728,8 @@ static msi_custom_action_info *do_msidbCustomActionTypeDll(
{
WCHAR endpoint[12];
- swprintf(endpoint, ARRAY_SIZE(endpoint), endpoint_fmtW, GetCurrentProcessId());
- status = RpcServerUseProtseqEpW(ncalrpcW, RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
+ swprintf(endpoint, ARRAY_SIZE(endpoint), L"msi%x", GetCurrentProcessId());
+ status = RpcServerUseProtseqEpW((WCHAR *)L"ncalrpc", RPC_C_PROTSEQ_MAX_REQS_DEFAULT,
endpoint, NULL);
if (status != RPC_S_OK)
{
@@ -797,7 +781,6 @@ static UINT HANDLE_CustomType1( MSIPACKAGE *package, const WCHAR *source, const
static HANDLE execute_command( const WCHAR *app, WCHAR *arg, const WCHAR *dir )
{
- static const WCHAR dotexeW[] = {'.','e','x','e',0};
STARTUPINFOW si;
PROCESS_INFORMATION info;
WCHAR *exe = NULL, *cmd = NULL, *p;
@@ -809,12 +792,12 @@ static HANDLE execute_command( const WCHAR *app, WCHAR *arg, const WCHAR *dir )
DWORD len_exe;
if (!(exe = msi_alloc( MAX_PATH * sizeof(WCHAR) ))) return INVALID_HANDLE_VALUE;
- len_exe = SearchPathW( NULL, app, dotexeW, MAX_PATH, exe, NULL );
+ len_exe = SearchPathW( NULL, app, L".exe", MAX_PATH, exe, NULL );
if (len_exe >= MAX_PATH)
{
msi_free( exe );
if (!(exe = msi_alloc( len_exe * sizeof(WCHAR) ))) return INVALID_HANDLE_VALUE;
- len_exe = SearchPathW( NULL, app, dotexeW, len_exe, exe, NULL );
+ len_exe = SearchPathW( NULL, app, L".exe", len_exe, exe, NULL );
}
if (!len_exe)
{
@@ -876,7 +859,7 @@ static UINT HANDLE_CustomType2( MSIPACKAGE *package, const WCHAR *source, const
deformat_string( package, target, &arg );
TRACE("exe %s arg %s\n", debugstr_w(binary->tmpfile), debugstr_w(arg));
- handle = execute_command( binary->tmpfile, arg, szCRoot );
+ handle = execute_command( binary->tmpfile, arg, L"C:\\" );
msi_free( arg );
if (handle == INVALID_HANDLE_VALUE) return ERROR_SUCCESS;
return wait_process_handle( package, type, handle, action );
@@ -913,7 +896,7 @@ static UINT HANDLE_CustomType18( MSIPACKAGE *package, const WCHAR *source, const
deformat_string( package, target, &arg );
TRACE("exe %s arg %s\n", debugstr_w(file->TargetPath), debugstr_w(arg));
- handle = execute_command( file->TargetPath, arg, szCRoot );
+ handle = execute_command( file->TargetPath, arg, L"C:\\" );
msi_free( arg );
if (handle == INVALID_HANDLE_VALUE) return ERROR_SUCCESS;
return wait_process_handle( package, type, handle, action );
@@ -922,19 +905,13 @@ static UINT HANDLE_CustomType18( MSIPACKAGE *package, const WCHAR *source, const
static UINT HANDLE_CustomType19( MSIPACKAGE *package, const WCHAR *source, const WCHAR *target,
INT type, const WCHAR *action )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','`','M','e','s','s','a','g','e','`',' ',
- 'F','R','O','M',' ','`','E','r','r','o','r','`',' ',
- 'W','H','E','R','E',' ','`','E','r','r','o','r','`',' ','=',' ',
- '%','s',0
- };
MSIRECORD *row = 0;
LPWSTR deformated = NULL;
deformat_string( package, target, &deformated );
/* first try treat the error as a number */
- row = MSI_QueryGetRecord( package->db, query, deformated );
+ row = MSI_QueryGetRecord( package->db, L"SELECT `Message` FROM `Error` WHERE `Error` = '%s'", deformated );
if( row )
{
LPCWSTR error = MSI_RecordGetString( row, 1 );
@@ -974,7 +951,7 @@ static UINT HANDLE_CustomType23( MSIPACKAGE *package, const WCHAR *source, const
UINT len_dir, len_source = lstrlenW( source );
HANDLE handle;
- if (!(dir = msi_dup_property( package->db, szOriginalDatabase ))) return ERROR_OUTOFMEMORY;
+ if (!(dir = msi_dup_property( package->db, L"OriginalDatabase" ))) return ERROR_OUTOFMEMORY;
if (!(p = wcsrchr( dir, '\\' )) && !(p = wcsrchr( dir, '/' )))
{
msi_free( dir );
@@ -1091,7 +1068,7 @@ static UINT HANDLE_CustomType50( MSIPACKAGE *package, const WCHAR *source, const
deformat_string( package, target, &arg );
TRACE("exe %s arg %s\n", debugstr_w(exe), debugstr_w(arg));
- handle = execute_command( exe, arg, szCRoot );
+ handle = execute_command( exe, arg, L"C:\\" );
msi_free( exe );
msi_free( arg );
if (handle == INVALID_HANDLE_VALUE) return ERROR_SUCCESS;
@@ -1209,10 +1186,6 @@ static UINT HANDLE_CustomType37_38( MSIPACKAGE *package, const WCHAR *source, co
static UINT HANDLE_CustomType5_6( MSIPACKAGE *package, const WCHAR *source, const WCHAR *target,
INT type, const WCHAR *action )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','B','i' ,'n','a','r','y','`',' ','W','H','E','R','E',' ',
- '`','N','a','m','e','`',' ','=',' ','\'','%','s','\'',0};
MSIRECORD *row = NULL;
msi_custom_action_info *info;
CHAR *buffer = NULL;
@@ -1222,7 +1195,7 @@ static UINT HANDLE_CustomType5_6( MSIPACKAGE *package, const WCHAR *source, cons
TRACE("%s %s\n", debugstr_w(source), debugstr_w(target));
- row = MSI_QueryGetRecord(package->db, query, source);
+ row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Binary` WHERE `Name` = '%s'", source);
if (!row)
return ERROR_FUNCTION_FAILED;
@@ -1354,8 +1327,8 @@ static BOOL action_type_matches_script( UINT type, UINT script )
static UINT defer_custom_action( MSIPACKAGE *package, const WCHAR *action, UINT type )
{
WCHAR *actiondata = msi_dup_property( package->db, action );
- WCHAR *usersid = msi_dup_property( package->db, szUserSID );
- WCHAR *prodcode = msi_dup_property( package->db, szProductCode );
+ WCHAR *usersid = msi_dup_property( package->db, L"UserSID" );
+ WCHAR *prodcode = msi_dup_property( package->db, L"ProductCode" );
WCHAR *deferred = msi_get_deferred_action( action, actiondata, usersid, prodcode );
if (!deferred)
@@ -1390,10 +1363,6 @@ static UINT defer_custom_action( MSIPACKAGE *package, const WCHAR *action, UINT
UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','C','u','s','t','o','m','A','c','t','i','o','n','`',' ','W','H','E','R','E',' ',
- '`','A','c','t','i' ,'o','n','`',' ','=',' ','\'','%','s','\'',0};
UINT rc = ERROR_SUCCESS;
MSIRECORD *row;
UINT type;
@@ -1408,7 +1377,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
action = ptr + 1;
}
- row = MSI_QueryGetRecord( package->db, query, action );
+ row = MSI_QueryGetRecord( package->db, L"SELECT * FROM `CustomAction` WHERE `Action` = '%s'", action );
if (!row)
return ERROR_FUNCTION_NOT_CALLED;
@@ -1449,9 +1418,9 @@ UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
if (deferred_data)
set_deferred_action_props(package, deferred_data);
else if (actiondata)
- msi_set_property( package->db, szCustomActionData, actiondata, -1 );
+ msi_set_property( package->db, L"CustomActionData", actiondata, -1 );
else
- msi_set_property( package->db, szCustomActionData, szEmpty, -1 );
+ msi_set_property( package->db, L"CustomActionData", L"", -1 );
msi_free(actiondata);
}
@@ -1516,7 +1485,7 @@ UINT ACTION_CustomAction(MSIPACKAGE *package, const WCHAR *action)
if (!source) break;
len = deformat_string( package, target, &deformated );
rc = msi_set_property( package->db, source, deformated, len );
- if (rc == ERROR_SUCCESS && !wcscmp( source, szSourceDir )) msi_reset_source_folders( package );
+ if (rc == ERROR_SUCCESS && !wcscmp( source, L"SourceDir" )) msi_reset_source_folders( package );
msi_free( deformated );
break;
case 53: /* JScript/VBScript text specified by a property value */
diff --git a/dlls/msi/database.c b/dlls/msi/database.c
index f7c70aeead7..c84fd1f6440 100644
--- a/dlls/msi/database.c
+++ b/dlls/msi/database.c
@@ -103,7 +103,6 @@ static VOID MSI_CloseDatabase( MSIOBJECTHDR *arg )
static HRESULT db_initialize( IStorage *stg, const GUID *clsid )
{
- static const WCHAR szTables[] = { '_','T','a','b','l','e','s',0 };
HRESULT hr;
hr = IStorage_SetClass( stg, clsid );
@@ -114,7 +113,7 @@ static HRESULT db_initialize( IStorage *stg, const GUID *clsid )
}
/* create the _Tables stream */
- hr = write_stream_data( stg, szTables, NULL, 0, TRUE );
+ hr = write_stream_data( stg, L"_Tables", NULL, 0, TRUE );
if (FAILED( hr ))
{
WARN("failed to create _Tables stream 0x%08x\n", hr);
@@ -257,7 +256,7 @@ UINT MSI_OpenDatabaseW(LPCWSTR szDBPath, LPCWSTR szPersist, MSIDATABASE **pdb)
if (!wcschr( save_path, '\\' ))
{
GetCurrentDirectoryW( MAX_PATH, path );
- lstrcatW( path, szBackSlash );
+ lstrcatW( path, L"\\" );
lstrcatW( path, save_path );
}
else
@@ -452,14 +451,12 @@ static LPWSTR msi_build_createsql_prelude(LPWSTR table)
LPWSTR prelude;
DWORD size;
- static const WCHAR create_fmt[] = {'C','R','E','A','T','E',' ','T','A','B','L','E',' ','`','%','s','`',' ','(',' ',0};
-
- size = ARRAY_SIZE(create_fmt) + lstrlenW(table) - 2;
+ size = ARRAY_SIZE(L"CREATE TABLE `%s` ( ") + lstrlenW(table) - 2;
prelude = msi_alloc(size * sizeof(WCHAR));
if (!prelude)
return NULL;
- swprintf(prelude, size, create_fmt, table);
+ swprintf(prelude, size, L"CREATE TABLE `%s` ( ", table);
return prelude;
}
@@ -471,15 +468,6 @@ static LPWSTR msi_build_createsql_columns(LPWSTR *columns_data, LPWSTR *types, D
WCHAR expanded[128], *ptr;
WCHAR size[10], comma[2], extra[30];
- static const WCHAR column_fmt[] = {'`','%','s','`',' ','%','s','%','s','%','s','%','s',' ',0};
- static const WCHAR size_fmt[] = {'(','%','s',')',0};
- static const WCHAR type_char[] = {'C','H','A','R',0};
- static const WCHAR type_int[] = {'I','N','T',0};
- static const WCHAR type_long[] = {'L','O','N','G',0};
- static const WCHAR type_object[] = {'O','B','J','E','C','T',0};
- static const WCHAR type_notnull[] = {' ','N','O','T',' ','N','U','L','L',0};
- static const WCHAR localizable[] = {' ','L','O','C','A','L','I','Z','A','B','L','E',0};
-
columns = msi_alloc_zero(sql_size * sizeof(WCHAR));
if (!columns)
return NULL;
@@ -501,28 +489,28 @@ static LPWSTR msi_build_createsql_columns(LPWSTR *columns_data, LPWSTR *types, D
switch (types[i][0])
{
case 'l':
- lstrcpyW(extra, type_notnull);
+ lstrcpyW(extra, L" NOT NULL");
/* fall through */
case 'L':
- lstrcatW(extra, localizable);
- type = type_char;
- swprintf(size, ARRAY_SIZE(size), size_fmt, ptr);
+ lstrcatW(extra, L" LOCALIZABLE");
+ type = L"CHAR";
+ swprintf(size, ARRAY_SIZE(size), L"(%s)", ptr);
break;
case 's':
- lstrcpyW(extra, type_notnull);
+ lstrcpyW(extra, L" NOT NULL");
/* fall through */
case 'S':
- type = type_char;
- swprintf(size, ARRAY_SIZE(size), size_fmt, ptr);
+ type = L"CHAR";
+ swprintf(size, ARRAY_SIZE(size), L"(%s)", ptr);
break;
case 'i':
- lstrcpyW(extra, type_notnull);
+ lstrcpyW(extra, L" NOT NULL");
/* fall through */
case 'I':
if (len <= 2)
- type = type_int;
+ type = L"INT";
else if (len == 4)
- type = type_long;
+ type = L"LONG";
else
{
WARN("invalid int width %u\n", len);
@@ -531,10 +519,10 @@ static LPWSTR msi_build_createsql_columns(LPWSTR *columns_data, LPWSTR *types, D
}
break;
case 'v':
- lstrcpyW(extra, type_notnull);
+ lstrcpyW(extra, L" NOT NULL");
/* fall through */
case 'V':
- type = type_object;
+ type = L"OBJECT";
break;
default:
ERR("Unknown type: %c\n", types[i][0]);
@@ -542,7 +530,7 @@ static LPWSTR msi_build_createsql_columns(LPWSTR *columns_data, LPWSTR *types, D
return NULL;
}
- swprintf(expanded, ARRAY_SIZE(expanded), column_fmt, columns_data[i], type, size, extra, comma);
+ swprintf(expanded, ARRAY_SIZE(expanded), L"`%s` %s%s%s%s ", columns_data[i], type, size, extra, comma);
sql_size += lstrlenW(expanded);
p = msi_realloc(columns, sql_size * sizeof(WCHAR));
@@ -564,11 +552,8 @@ static LPWSTR msi_build_createsql_postlude(LPWSTR *primary_keys, DWORD num_keys)
LPWSTR postlude, keys, ptr;
DWORD size, i;
- static const WCHAR key_fmt[] = {'`','%','s','`',',',' ',0};
- static const WCHAR postlude_fmt[] = {'P','R','I','M','A','R','Y',' ','K','E','Y',' ','%','s',')',0};
-
for (i = 0, size = 1; i < num_keys; i++)
- size += lstrlenW(key_fmt) + lstrlenW(primary_keys[i]) - 2;
+ size += lstrlenW(L"`%s`, ") + lstrlenW(primary_keys[i]) - 2;
keys = msi_alloc(size * sizeof(WCHAR));
if (!keys)
@@ -576,18 +561,18 @@ static LPWSTR msi_build_createsql_postlude(LPWSTR *primary_keys, DWORD num_keys)
for (i = 0, ptr = keys; i < num_keys; i++)
{
- ptr += swprintf(ptr, size - (ptr - keys), key_fmt, primary_keys[i]);
+ ptr += swprintf(ptr, size - (ptr - keys), L"`%s`, ", primary_keys[i]);
}
/* remove final ', ' */
*(ptr - 2) = '\0';
- size = lstrlenW(postlude_fmt) + size - 1;
+ size = lstrlenW(L"PRIMARY KEY %s)") + size - 1;
postlude = msi_alloc(size * sizeof(WCHAR));
if (!postlude)
goto done;
- swprintf(postlude, size, postlude_fmt, keys);
+ swprintf(postlude, size, L"PRIMARY KEY %s)", keys);
done:
msi_free(keys);
@@ -712,12 +697,7 @@ static UINT msi_add_records_to_table(MSIDATABASE *db, LPWSTR *columns, LPWSTR *t
MSIQUERY *view;
MSIRECORD *rec;
- static const WCHAR select[] = {
- 'S','E','L','E','C','T',' ','*',' ',
- 'F','R','O','M',' ','`','%','s','`',0
- };
-
- r = MSI_OpenQuery(db, &view, select, labels[0]);
+ r = MSI_OpenQuery(db, &view, L"SELECT * FROM `%s`", labels[0]);
if (r != ERROR_SUCCESS)
return r;
@@ -753,31 +733,21 @@ done:
static UINT MSI_DatabaseImport(MSIDATABASE *db, LPCWSTR folder, LPCWSTR file)
{
UINT r;
- DWORD len, i;
- DWORD num_labels, num_types;
- DWORD num_columns, num_records = 0;
- LPWSTR *columns, *types, *labels;
- LPWSTR path, ptr, data;
- LPWSTR **records = NULL;
- LPWSTR **temp_records;
-
- static const WCHAR suminfo[] =
- {'_','S','u','m','m','a','r','y','I','n','f','o','r','m','a','t','i','o','n',0};
- static const WCHAR forcecodepage[] =
- {'_','F','o','r','c','e','C','o','d','e','p','a','g','e',0};
+ DWORD len, i, num_labels, num_types, num_columns, num_records = 0;
+ WCHAR **columns, **types, **labels, *path, *ptr, *data, ***records = NULL, ***temp_records;
TRACE("%p %s %s\n", db, debugstr_w(folder), debugstr_w(file) );
- if( folder == NULL || file == NULL )
+ if (!folder || !file)
return ERROR_INVALID_PARAMETER;
- len = lstrlenW(folder) + lstrlenW(szBackSlash) + lstrlenW(file) + 1;
+ len = lstrlenW(folder) + lstrlenW(L"\\") + lstrlenW(file) + 1;
path = msi_alloc( len * sizeof(WCHAR) );
if (!path)
return ERROR_OUTOFMEMORY;
lstrcpyW( path, folder );
- lstrcatW( path, szBackSlash );
+ lstrcatW( path, L"\\" );
lstrcatW( path, file );
data = msi_read_text_archive( path, &len );
@@ -793,7 +763,7 @@ static UINT MSI_DatabaseImport(MSIDATABASE *db, LPCWSTR folder, LPCWSTR file)
msi_parse_line( &ptr, &labels, &num_labels, &len );
if (num_columns == 1 && !columns[0][0] && num_labels == 1 && !labels[0][0] &&
- num_types == 2 && !wcscmp( types[1], forcecodepage ))
+ num_types == 2 && !wcscmp( types[1], L"_ForceCodepage" ))
{
r = msi_set_string_table_codepage( db->strings, wcstol( types[0], NULL, 10 ) );
goto done;
@@ -805,7 +775,7 @@ static UINT MSI_DatabaseImport(MSIDATABASE *db, LPCWSTR folder, LPCWSTR file)
goto done;
}
- records = msi_alloc(sizeof(LPWSTR *));
+ records = msi_alloc(sizeof(WCHAR **));
if (!records)
{
r = ERROR_OUTOFMEMORY;
@@ -818,7 +788,7 @@ static UINT MSI_DatabaseImport(MSIDATABASE *db, LPCWSTR folder, LPCWSTR file)
msi_parse_line( &ptr, &records[num_records], NULL, &len );
num_records++;
- temp_records = msi_realloc(records, (num_records + 1) * sizeof(LPWSTR *));
+ temp_records = msi_realloc(records, (num_records + 1) * sizeof(WCHAR **));
if (!temp_records)
{
r = ERROR_OUTOFMEMORY;
@@ -827,7 +797,7 @@ static UINT MSI_DatabaseImport(MSIDATABASE *db, LPCWSTR folder, LPCWSTR file)
records = temp_records;
}
- if (!wcscmp(labels[0], suminfo))
+ if (!wcscmp(labels[0], L"_SummaryInformation"))
{
r = msi_add_suminfo( db, records, num_records, num_columns );
if (r != ERROR_SUCCESS)
@@ -862,7 +832,6 @@ done:
msi_free(records[i]);
msi_free(records);
-
return r;
}
@@ -957,7 +926,6 @@ static UINT msi_export_field( HANDLE handle, MSIRECORD *row, UINT field )
static UINT msi_export_stream( const WCHAR *folder, const WCHAR *table, MSIRECORD *row, UINT field, UINT start )
{
- static const WCHAR fmt[] = {'%','s','\\','%','s',0};
WCHAR stream[MAX_STREAM_NAME_LEN + 1], *path;
DWORD sz, read_size, write_size;
char buffer[1024];
@@ -969,11 +937,11 @@ static UINT msi_export_stream( const WCHAR *folder, const WCHAR *table, MSIRECOR
if (r != ERROR_SUCCESS)
return r;
- len = sz + lstrlenW( folder ) + lstrlenW( table ) + ARRAY_SIZE( fmt ) + 1;
+ len = sz + lstrlenW( folder ) + lstrlenW( table ) + ARRAY_SIZE( L"%s\\%s" ) + 1;
if (!(path = msi_alloc( len * sizeof(WCHAR) )))
return ERROR_OUTOFMEMORY;
- len = swprintf( path, len, fmt, folder, table );
+ len = swprintf( path, len, L"%s\\%s", folder, table );
if (!CreateDirectoryW( path, NULL ) && GetLastError() != ERROR_ALREADY_EXISTS)
{
msi_free( path );
@@ -1078,22 +1046,16 @@ static UINT msi_export_summaryinformation( MSIDATABASE *db, HANDLE handle )
static UINT MSI_DatabaseExport( MSIDATABASE *db, LPCWSTR table, LPCWSTR folder, LPCWSTR file )
{
- static const WCHAR query[] = {
- 's','e','l','e','c','t',' ','*',' ','f','r','o','m',' ','%','s',0 };
- static const WCHAR forcecodepage[] = {
- '_','F','o','r','c','e','C','o','d','e','p','a','g','e',0 };
- static const WCHAR summaryinformation[] = {
- '_','S','u','m','m','a','r','y','I','n','f','o','r','m','a','t','i','o','n',0 };
MSIRECORD *rec = NULL;
MSIQUERY *view = NULL;
- LPWSTR filename;
+ WCHAR *filename;
HANDLE handle;
UINT len, r;
TRACE("%p %s %s %s\n", db, debugstr_w(table),
debugstr_w(folder), debugstr_w(file) );
- if( folder == NULL || file == NULL )
+ if (!folder || !file)
return ERROR_INVALID_PARAMETER;
len = lstrlenW(folder) + lstrlenW(file) + 2;
@@ -1102,7 +1064,7 @@ static UINT MSI_DatabaseExport( MSIDATABASE *db, LPCWSTR table, LPCWSTR folder,
return ERROR_OUTOFMEMORY;
lstrcpyW( filename, folder );
- lstrcatW( filename, szBackSlash );
+ lstrcatW( filename, L"\\" );
lstrcatW( filename, file );
handle = CreateFileW( filename, GENERIC_READ | GENERIC_WRITE, 0,
@@ -1111,20 +1073,20 @@ static UINT MSI_DatabaseExport( MSIDATABASE *db, LPCWSTR table, LPCWSTR folder,
if (handle == INVALID_HANDLE_VALUE)
return ERROR_FUNCTION_FAILED;
- if (!wcscmp( table, forcecodepage ))
+ if (!wcscmp( table, L"_ForceCodepage" ))
{
UINT codepage = msi_get_string_table_codepage( db->strings );
r = msi_export_forcecodepage( handle, codepage );
goto done;
}
- if (!wcscmp( table, summaryinformation ))
+ if (!wcscmp( table, L"_SummaryInformation" ))
{
r = msi_export_summaryinformation( db, handle );
goto done;
}
- r = MSI_OpenQuery( db, &view, query, table );
+ r = MSI_OpenQuery( db, &view, L"SELECT * FROM %s", table );
if (r == ERROR_SUCCESS)
{
struct row_export_info row_export_info = { handle, folder, table };
@@ -1424,20 +1386,19 @@ static LPWSTR get_key_value(MSIQUERY *view, LPCWSTR key, MSIRECORD *rec)
if (MSI_RecordGetString(rec, i)) /* check record field is a string */
{
/* quote string record fields */
- static const WCHAR szQuote[] = {'\'', 0};
sz += 2;
- val = msi_alloc(sz*sizeof(WCHAR));
+ val = msi_alloc(sz * sizeof(WCHAR));
if (!val)
return NULL;
- lstrcpyW(val, szQuote);
- r = MSI_RecordGetStringW(rec, i, val+1, &sz);
- lstrcpyW(val+1+sz, szQuote);
+ lstrcpyW(val, L"'");
+ r = MSI_RecordGetStringW(rec, i, val + 1, &sz);
+ lstrcpyW(val + 1 + sz, L"'");
}
else
{
/* do not quote integer record fields */
- val = msi_alloc(sz*sizeof(WCHAR));
+ val = msi_alloc(sz * sizeof(WCHAR));
if (!val)
return NULL;
@@ -1463,14 +1424,6 @@ static LPWSTR create_diff_row_query(MSIDATABASE *merge, MSIQUERY *view,
MSIRECORD *keys;
UINT r, i, count;
- static const WCHAR keyset[] = {
- '`','%','s','`',' ','=',' ','%','s',' ','A','N','D',' ',0};
- static const WCHAR lastkeyset[] = {
- '`','%','s','`',' ','=',' ','%','s',' ',0};
- static const WCHAR fmt[] = {'S','E','L','E','C','T',' ','*',' ',
- 'F','R','O','M',' ','`','%','s','`',' ',
- 'W','H','E','R','E',' ','%','s',0};
-
r = MSI_DatabaseGetPrimaryKeys(merge, table, &keys);
if (r != ERROR_SUCCESS)
return NULL;
@@ -1487,9 +1440,9 @@ static LPWSTR create_diff_row_query(MSIDATABASE *merge, MSIQUERY *view,
val = get_key_value(view, key, rec);
if (i == count)
- setptr = lastkeyset;
+ setptr = L"`%s` = %s ";
else
- setptr = keyset;
+ setptr = L"`%s` = %s AND ";
oldsize = size;
size += lstrlenW(setptr) + lstrlenW(key) + lstrlenW(val) - 4;
@@ -1504,12 +1457,12 @@ static LPWSTR create_diff_row_query(MSIDATABASE *merge, MSIQUERY *view,
msi_free(val);
}
- size = lstrlenW(fmt) + lstrlenW(table) + lstrlenW(clause) + 1;
+ size = lstrlenW(L"SELECT * FROM `%s` WHERE %s") + lstrlenW(table) + lstrlenW(clause) + 1;
query = msi_alloc(size * sizeof(WCHAR));
if (!query)
goto done;
- swprintf(query, size, fmt, table, clause);
+ swprintf(query, size, L"SELECT * FROM `%s` WHERE %s", table, clause);
done:
msi_free(clause);
@@ -1717,9 +1670,6 @@ static UINT msi_get_merge_table (MSIDATABASE *db, LPCWSTR name, MERGETABLE **pta
MERGETABLE *table;
MSIQUERY *mergeview = NULL;
- static const WCHAR query[] = {'S','E','L','E','C','T',' ','*',' ',
- 'F','R','O','M',' ','`','%','s','`',0};
-
table = msi_alloc_zero(sizeof(MERGETABLE));
if (!table)
{
@@ -1731,7 +1681,7 @@ static UINT msi_get_merge_table (MSIDATABASE *db, LPCWSTR name, MERGETABLE **pta
if (r != ERROR_SUCCESS)
goto err;
- r = MSI_OpenQuery(db, &mergeview, query, name);
+ r = MSI_OpenQuery(db, &mergeview, L"SELECT * FROM `%s`", name);
if (r != ERROR_SUCCESS)
goto err;
@@ -1768,18 +1718,15 @@ static UINT merge_diff_tables(MSIRECORD *rec, LPVOID param)
LPCWSTR name;
UINT r;
- static const WCHAR query[] = {'S','E','L','E','C','T',' ','*',' ',
- 'F','R','O','M',' ','`','%','s','`',0};
-
name = MSI_RecordGetString(rec, 1);
- r = MSI_OpenQuery(data->merge, &mergeview, query, name);
+ r = MSI_OpenQuery(data->merge, &mergeview, L"SELECT * FROM `%s`", name);
if (r != ERROR_SUCCESS)
goto done;
if (TABLE_Exists(data->db, name))
{
- r = MSI_OpenQuery(data->db, &dbview, query, name);
+ r = MSI_OpenQuery(data->db, &dbview, L"SELECT * FROM `%s`", name);
if (r != ERROR_SUCCESS)
goto done;
@@ -1816,14 +1763,11 @@ done:
static UINT gather_merge_data(MSIDATABASE *db, MSIDATABASE *merge,
struct list *tabledata)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','_','T','a','b','l','e','s','`',0};
MSIQUERY *view;
MERGEDATA data;
UINT r;
- r = MSI_DatabaseOpenViewW(merge, query, &view);
+ r = MSI_DatabaseOpenViewW(merge, L"SELECT * FROM `_Tables`", &view);
if (r != ERROR_SUCCESS)
return r;
@@ -1871,24 +1815,10 @@ static UINT update_merge_errors(MSIDATABASE *db, LPCWSTR error,
UINT r;
MSIQUERY *view;
- static const WCHAR create[] = {
- 'C','R','E','A','T','E',' ','T','A','B','L','E',' ',
- '`','%','s','`',' ','(','`','T','a','b','l','e','`',' ',
- 'C','H','A','R','(','2','5','5',')',' ','N','O','T',' ',
- 'N','U','L','L',',',' ','`','N','u','m','R','o','w','M','e','r','g','e',
- 'C','o','n','f','l','i','c','t','s','`',' ','S','H','O','R','T',' ',
- 'N','O','T',' ','N','U','L','L',' ','P','R','I','M','A','R','Y',' ',
- 'K','E','Y',' ','`','T','a','b','l','e','`',')',0};
- static const WCHAR insert[] = {
- 'I','N','S','E','R','T',' ','I','N','T','O',' ',
- '`','%','s','`',' ','(','`','T','a','b','l','e','`',',',' ',
- '`','N','u','m','R','o','w','M','e','r','g','e',
- 'C','o','n','f','l','i','c','t','s','`',')',' ','V','A','L','U','E','S',
- ' ','(','\'','%','s','\'',',',' ','%','d',')',0};
-
if (!TABLE_Exists(db, error))
{
- r = MSI_OpenQuery(db, &view, create, error);
+ r = MSI_OpenQuery(db, &view, L"CREATE TABLE `%s` (`Table` CHAR(255) NOT NULL, `NumRowMergeConflicts` SHORT "
+ "NOT NULL PRIMARY KEY `Table`)" , error);
if (r != ERROR_SUCCESS)
return r;
@@ -1898,7 +1828,8 @@ static UINT update_merge_errors(MSIDATABASE *db, LPCWSTR error,
return r;
}
- r = MSI_OpenQuery(db, &view, insert, error, table, numconflicts);
+ r = MSI_OpenQuery(db, &view, L"INSERT INTO `%s` (`Table`, `NumRowMergeConflicts`) VALUES ('%s', %d)", error,
+ table, numconflicts);
if (r != ERROR_SUCCESS)
return r;
@@ -1907,8 +1838,7 @@ static UINT update_merge_errors(MSIDATABASE *db, LPCWSTR error,
return r;
}
-UINT WINAPI MsiDatabaseMergeW(MSIHANDLE hDatabase, MSIHANDLE hDatabaseMerge,
- LPCWSTR szTableName)
+UINT WINAPI MsiDatabaseMergeW(MSIHANDLE hDatabase, MSIHANDLE hDatabaseMerge, LPCWSTR szTableName)
{
struct list tabledata = LIST_INIT(tabledata);
struct list *item, *cursor;
@@ -1917,8 +1847,7 @@ UINT WINAPI MsiDatabaseMergeW(MSIHANDLE hDatabase, MSIHANDLE hDatabaseMerge,
BOOL conflicts;
UINT r;
- TRACE("(%d, %d, %s)\n", hDatabase, hDatabaseMerge,
- debugstr_w(szTableName));
+ TRACE("(%d, %d, %s)\n", hDatabase, hDatabaseMerge, debugstr_w(szTableName));
if (szTableName && !*szTableName)
return ERROR_INVALID_TABLE;
diff --git a/dlls/msi/delete.c b/dlls/msi/delete.c
index 81bd9d7db2f..c101b56c231 100644
--- a/dlls/msi/delete.c
+++ b/dlls/msi/delete.c
@@ -196,7 +196,7 @@ UINT DELETE_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table )
dv = msi_alloc_zero( sizeof *dv );
if( !dv )
return ERROR_FUNCTION_FAILED;
-
+
/* fill the structure */
dv->view.ops = &delete_ops;
dv->db = db;
diff --git a/dlls/msi/distinct.c b/dlls/msi/distinct.c
index e102adb3de2..b97b8c90efc 100644
--- a/dlls/msi/distinct.c
+++ b/dlls/msi/distinct.c
@@ -287,7 +287,7 @@ UINT DISTINCT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table )
dv = msi_alloc_zero( sizeof *dv );
if( !dv )
return ERROR_FUNCTION_FAILED;
-
+
/* fill the structure */
dv->view.ops = &distinct_ops;
msiobj_addref( &db->hdr );
diff --git a/dlls/msi/files.c b/dlls/msi/files.c
index aba714b317d..61694ee19ae 100644
--- a/dlls/msi/files.c
+++ b/dlls/msi/files.c
@@ -160,7 +160,6 @@ DWORD msi_get_file_version_info( MSIPACKAGE *package, const WCHAR *path, DWORD b
VS_FIXEDFILEINFO *msi_get_disk_file_version( MSIPACKAGE *package, const WCHAR *filename )
{
- static const WCHAR name[] = {'\\',0};
VS_FIXEDFILEINFO *ptr, *ret;
DWORD version_size, size;
void *version;
@@ -170,7 +169,7 @@ VS_FIXEDFILEINFO *msi_get_disk_file_version( MSIPACKAGE *package, const WCHAR *f
msi_get_file_version_info( package, filename, version_size, version );
- if (!VerQueryValueW( version, name, (void **)&ptr, &size ))
+ if (!VerQueryValueW( version, L"\\", (void **)&ptr, &size ))
{
msi_free( version );
return NULL;
@@ -267,7 +266,7 @@ static BOOL is_obsoleted_by_patch( MSIPACKAGE *package, MSIFILE *file )
{
if (!list_empty( &package->patches ) && file->disk_id < MSI_INITIAL_MEDIA_TRANSFORM_DISKID)
{
- if (!msi_get_property_int( package->db, szInstalled, 0 )) return FALSE;
+ if (!msi_get_property_int( package->db, L"Installed", 0 )) return FALSE;
return TRUE;
}
if (is_registered_patch_media( package, file->disk_id )) return TRUE;
@@ -442,7 +441,7 @@ static UINT copy_install_file(MSIPACKAGE *package, MSIFILE *file, LPWSTR source)
msi_free( pathW );
return ERROR_OUTOFMEMORY;
}
- if (!GetTempFileNameW( pathW, szMsi, 0, tmpfileW )) tmpfileW[0] = 0;
+ if (!GetTempFileNameW( pathW, L"msi", 0, tmpfileW )) tmpfileW[0] = 0;
msi_free( pathW );
if (msi_copy_file( package, source, tmpfileW, FALSE ) &&
@@ -548,7 +547,7 @@ WCHAR *msi_resolve_file_source( MSIPACKAGE *package, MSIFILE *file )
/*
* ACTION_InstallFiles()
- *
+ *
* For efficiency, this is done in two passes:
* 1) Correct all the TargetPaths and determine what files are to be installed.
* 2) Extract Cabinets and copy files.
@@ -562,7 +561,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
msi_set_sourcedir_props(package, FALSE);
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szInstallFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"InstallFiles");
schedule_install_files(package);
mi = msi_alloc_zero( sizeof(MSIMEDIAINFO) );
@@ -571,7 +570,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
{
BOOL is_global_assembly = msi_is_global_assembly( file->Component );
- msi_file_update_ui( package, file, szInstallFiles );
+ msi_file_update_ui( package, file, L"InstallFiles" );
rc = msi_load_media_info( package, file->Sequence, mi );
if (rc != ERROR_SUCCESS)
@@ -583,7 +582,7 @@ UINT ACTION_InstallFiles(MSIPACKAGE *package)
if (file->state != msifs_hashmatch &&
file->state != msifs_skipped &&
- (file->state != msifs_present || !msi_get_property_int( package->db, szInstalled, 0 )) &&
+ (file->state != msifs_present || !msi_get_property_int( package->db, L"Installed", 0 )) &&
(rc = ready_media( package, file->IsCompressed, mi )))
{
ERR("Failed to ready media for %s\n", debugstr_w(file->File));
@@ -790,7 +789,7 @@ UINT ACTION_PatchFiles( MSIPACKAGE *package )
TRACE("%p\n", package);
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szPatchFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"PatchFiles");
mi = msi_alloc_zero( sizeof(MSIMEDIAINFO) );
@@ -1129,7 +1128,7 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param )
lstrcpyW(source, sourcedir);
if (source[lstrlenW(source) - 1] != '\\')
- lstrcatW(source, szBackSlash);
+ lstrcatW(source, L"\\");
lstrcatW(source, sourcename);
}
@@ -1167,7 +1166,7 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param )
lstrcpyW(dest, destdir);
if (dest[lstrlenW(dest) - 1] != '\\')
- lstrcatW(dest, szBackSlash);
+ lstrcatW(dest, L"\\");
if (destname)
lstrcatW(dest, destname);
@@ -1205,16 +1204,13 @@ done:
UINT ACTION_MoveFiles( MSIPACKAGE *package )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','M','o','v','e','F','i','l','e','`',0};
MSIQUERY *view;
UINT rc;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szMoveFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"MoveFiles");
- rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+ rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `MoveFile`", &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -1338,16 +1334,13 @@ static UINT ITERATE_DuplicateFiles(MSIRECORD *row, LPVOID param)
UINT ACTION_DuplicateFiles(MSIPACKAGE *package)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','D','u','p','l','i','c','a','t','e','F','i','l','e','`',0};
MSIQUERY *view;
UINT rc;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szDuplicateFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"DuplicateFiles");
- rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+ rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `DuplicateFile`", &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -1416,16 +1409,13 @@ static UINT ITERATE_RemoveDuplicateFiles( MSIRECORD *row, LPVOID param )
UINT ACTION_RemoveDuplicateFiles( MSIPACKAGE *package )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','D','u','p','l','i','c','a','t','e','F','i','l','e','`',0};
MSIQUERY *view;
UINT rc;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveDuplicateFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveDuplicateFiles");
- rc = MSI_DatabaseOpenViewW( package->db, query, &view );
+ rc = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `DuplicateFile`", &view );
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -1557,18 +1547,15 @@ static void remove_folder( MSIFOLDER *folder )
UINT ACTION_RemoveFiles( MSIPACKAGE *package )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','R','e','m','o','v','e','F','i','l','e','`',0};
MSIQUERY *view;
MSICOMPONENT *comp;
MSIFILE *file;
UINT r;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szRemoveFiles);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"RemoveFiles");
- r = MSI_DatabaseOpenViewW(package->db, query, &view);
+ r = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `RemoveFile`", &view);
if (r == ERROR_SUCCESS)
{
r = MSI_IterateRecords(view, NULL, ITERATE_RemoveFiles, package);
@@ -1583,7 +1570,7 @@ UINT ACTION_RemoveFiles( MSIPACKAGE *package )
VS_FIXEDFILEINFO *ver;
comp = file->Component;
- msi_file_update_ui( package, file, szRemoveFiles );
+ msi_file_update_ui( package, file, L"RemoveFiles" );
comp->Action = msi_get_component_action( package, comp );
if (comp->Action != INSTALLSTATE_ABSENT || comp->Installed == INSTALLSTATE_SOURCE)
diff --git a/dlls/msi/font.c b/dlls/msi/font.c
index f26d3fd99c3..78d384b1654 100644
--- a/dlls/msi/font.c
+++ b/dlls/msi/font.c
@@ -66,19 +66,6 @@ typedef struct _tagTT_NAME_RECORD {
#define SWAPWORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x))
#define SWAPLONG(x) MAKELONG(SWAPWORD(HIWORD(x)), SWAPWORD(LOWORD(x)))
-static const WCHAR regfont1[] =
- {'S','o','f','t','w','a','r','e','\\',
- 'M','i','c','r','o','s','o','f','t','\\',
- 'W','i','n','d','o','w','s',' ','N','T','\\',
- 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
- 'F','o','n','t','s',0};
-static const WCHAR regfont2[] =
- {'S','o','f','t','w','a','r','e','\\',
- 'M','i','c','r','o','s','o','f','t','\\',
- 'W','i','n','d','o','w','s','\\',
- 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
- 'F','o','n','t','s',0};
-
/*
* Code based off of code located here
* http://www.codeproject.com/gdi/fontnamefromfile.asp
@@ -178,7 +165,6 @@ end:
static WCHAR *font_name_from_file( MSIPACKAGE *package, const WCHAR *filename )
{
- static const WCHAR truetypeW[] = {' ','(','T','r','u','e','T','y','p','e',')',0};
WCHAR *name, *ret = NULL;
if ((name = load_ttf_name_id( package, filename, NAME_ID_FULL_FONT_NAME )))
@@ -189,9 +175,9 @@ static WCHAR *font_name_from_file( MSIPACKAGE *package, const WCHAR *filename )
msi_free( name );
return NULL;
}
- ret = msi_alloc( (lstrlenW( name ) + lstrlenW( truetypeW ) + 1 ) * sizeof(WCHAR) );
+ ret = msi_alloc( (lstrlenW( name ) + lstrlenW( L" (TrueType)" ) + 1 ) * sizeof(WCHAR) );
lstrcpyW( ret, name );
- lstrcatW( ret, truetypeW );
+ lstrcatW( ret, L" (TrueType)" );
msi_free( name );
}
return ret;
@@ -199,7 +185,6 @@ static WCHAR *font_name_from_file( MSIPACKAGE *package, const WCHAR *filename )
WCHAR *msi_get_font_file_version( MSIPACKAGE *package, const WCHAR *filename )
{
- static const WCHAR fmtW[] = {'%','u','.','%','u','.','0','.','0',0};
WCHAR *version, *p, *q, *ret = NULL;
if ((version = load_ttf_name_id( package, filename, NAME_ID_VERSION )))
@@ -216,9 +201,9 @@ WCHAR *msi_get_font_file_version( MSIPACKAGE *package, const WCHAR *filename )
if (!*q || *q == ' ') minor = wcstol( p, NULL, 10 );
else major = 0;
}
- len = lstrlenW( fmtW ) + 20;
+ len = lstrlenW( L"%u.%u.0.0" ) + 20;
ret = msi_alloc( len * sizeof(WCHAR) );
- swprintf( ret, len, fmtW, major, minor );
+ swprintf( ret, len, L"%u.%u.0.0", major, minor );
msi_free( version );
}
return ret;
@@ -255,8 +240,8 @@ static UINT ITERATE_RegisterFonts(MSIRECORD *row, LPVOID param)
return ERROR_SUCCESS;
}
- RegCreateKeyW(HKEY_LOCAL_MACHINE,regfont1,&hkey1);
- RegCreateKeyW(HKEY_LOCAL_MACHINE,regfont2,&hkey2);
+ RegCreateKeyW( HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts" ,&hkey1 );
+ RegCreateKeyW( HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Fonts", &hkey2 );
if (MSI_RecordIsNull(row,2))
name = font_name_from_file( package, file->TargetPath );
@@ -290,15 +275,13 @@ static UINT ITERATE_RegisterFonts(MSIRECORD *row, LPVOID param)
UINT ACTION_RegisterFonts(MSIPACKAGE *package)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','F','o','n','t','`',0};
MSIQUERY *view;
UINT rc;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szRegisterFonts);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"RegisterFonts");
- rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+ rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Font`", &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -338,8 +321,8 @@ static UINT ITERATE_UnregisterFonts( MSIRECORD *row, LPVOID param )
return ERROR_SUCCESS;
}
- RegCreateKeyW( HKEY_LOCAL_MACHINE, regfont1, &hkey1 );
- RegCreateKeyW( HKEY_LOCAL_MACHINE, regfont2, &hkey2 );
+ RegCreateKeyW( HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", &hkey1 );
+ RegCreateKeyW( HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows\\CurrentVersion\\Fonts", &hkey2 );
if (MSI_RecordIsNull( row, 2 ))
name = font_name_from_file( package, file->TargetPath );
@@ -373,15 +356,13 @@ static UINT ITERATE_UnregisterFonts( MSIRECORD *row, LPVOID param )
UINT ACTION_UnregisterFonts( MSIPACKAGE *package )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','F','o','n','t','`',0};
MSIQUERY *view;
UINT r;
if (package->script == SCRIPT_NONE)
- return msi_schedule_action(package, SCRIPT_INSTALL, szUnregisterFonts);
+ return msi_schedule_action(package, SCRIPT_INSTALL, L"UnregisterFonts");
- r = MSI_DatabaseOpenViewW( package->db, query, &view );
+ r = MSI_DatabaseOpenViewW( package->db, L"SELECT * FROM `Font`", &view );
if (r != ERROR_SUCCESS)
return ERROR_SUCCESS;
diff --git a/dlls/msi/format.c b/dlls/msi/format.c
index 77e6dd153c4..9e97c23aaad 100644
--- a/dlls/msi/format.c
+++ b/dlls/msi/format.c
@@ -341,7 +341,6 @@ static WCHAR *deformat_literal( FORMAT *format, FORMSTR *str, BOOL *propfound,
static WCHAR *build_default_format( const MSIRECORD *record )
{
- static const WCHAR fmt[] = {'%','i',':',' ','[','%','i',']',' ',0};
int i, count = MSI_RecordGetFieldCount( record );
WCHAR *ret, *tmp, buf[26];
DWORD size = 1;
@@ -351,7 +350,7 @@ static WCHAR *build_default_format( const MSIRECORD *record )
for (i = 1; i <= count; i++)
{
- size += swprintf( buf, ARRAY_SIZE(buf), fmt, i, i );
+ size += swprintf( buf, ARRAY_SIZE(buf), L"%d: [%d] ", i, i );
if (!(tmp = msi_realloc( ret, size * sizeof(*ret) )))
{
msi_free( ret );
@@ -754,7 +753,7 @@ static BOOL verify_format(LPWSTR data)
return TRUE;
}
-static DWORD deformat_string_internal(MSIPACKAGE *package, LPCWSTR ptr,
+static DWORD deformat_string_internal(MSIPACKAGE *package, LPCWSTR ptr,
WCHAR** data, DWORD *len,
MSIRECORD* record)
{
@@ -898,7 +897,7 @@ end:
return rc;
}
-UINT WINAPI MsiFormatRecordW( MSIHANDLE hInstall, MSIHANDLE hRecord,
+UINT WINAPI MsiFormatRecordW( MSIHANDLE hInstall, MSIHANDLE hRecord,
LPWSTR szResult, LPDWORD sz )
{
UINT r = ERROR_INVALID_HANDLE;
diff --git a/dlls/msi/install.c b/dlls/msi/install.c
index 4277b51804f..a3bfb53cfff 100644
--- a/dlls/msi/install.c
+++ b/dlls/msi/install.c
@@ -52,7 +52,7 @@ UINT WINAPI MsiDoActionA( MSIHANDLE hInstall, LPCSTR szAction )
szwAction = strdupAtoW(szAction);
if (szAction && !szwAction)
- return ERROR_FUNCTION_FAILED;
+ return ERROR_FUNCTION_FAILED;
ret = MsiDoActionW( hInstall, szwAction );
msi_free( szwAction );
@@ -92,7 +92,7 @@ UINT WINAPI MsiDoActionW( MSIHANDLE hInstall, LPCWSTR szAction )
return ret;
}
-
+
ret = ACTION_PerformAction(package, szAction);
msiobj_release( &package->hdr );
@@ -111,7 +111,7 @@ UINT WINAPI MsiSequenceA( MSIHANDLE hInstall, LPCSTR szTable, INT iSequenceMode
szwTable = strdupAtoW(szTable);
if (szTable && !szwTable)
- return ERROR_FUNCTION_FAILED;
+ return ERROR_FUNCTION_FAILED;
ret = MsiSequenceW( hInstall, szwTable, iSequenceMode );
msi_free( szwTable );
@@ -166,7 +166,7 @@ UINT msi_strcpy_to_awstring( const WCHAR *str, int len, awstring *awbuf, DWORD *
return ERROR_SUCCESS;
if (len < 0) len = lstrlenW( str );
-
+
if (awbuf->unicode && awbuf->str.w)
{
memcpy( awbuf->str.w, str, min(len + 1, *sz) * sizeof(WCHAR) );
@@ -359,7 +359,7 @@ UINT WINAPI MsiGetTargetPathW(MSIHANDLE hinst, const WCHAR *folder, WCHAR *buf,
static WCHAR *get_source_root( MSIPACKAGE *package )
{
msi_set_sourcedir_props( package, FALSE );
- return msi_dup_property( package->db, szSourceDir );
+ return msi_dup_property( package->db, L"SourceDir" );
}
WCHAR *msi_resolve_source_folder( MSIPACKAGE *package, const WCHAR *name, MSIFOLDER **folder )
@@ -369,11 +369,11 @@ WCHAR *msi_resolve_source_folder( MSIPACKAGE *package, const WCHAR *name, MSIFOL
TRACE("working to resolve %s\n", debugstr_w(name));
- if (!wcscmp( name, szSourceDir )) name = szTargetDir;
+ if (!wcscmp( name, L"SourceDir" )) name = L"TARGETDIR";
if (!(f = msi_get_loaded_folder( package, name ))) return NULL;
/* special resolving for root dir */
- if (!wcscmp( name, szTargetDir ) && !f->ResolvedSource)
+ if (!wcscmp( name, L"TARGETDIR" ) && !f->ResolvedSource)
{
f->ResolvedSource = get_source_root( package );
}
@@ -598,7 +598,7 @@ UINT MSI_SetTargetPathW( MSIPACKAGE *package, LPCWSTR szFolder, LPCWSTR szFolder
/***********************************************************************
* MsiSetTargetPathW (MSI.@)
*/
-UINT WINAPI MsiSetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder,
+UINT WINAPI MsiSetTargetPathW(MSIHANDLE hInstall, LPCWSTR szFolder,
LPCWSTR szFolderPath)
{
MSIPACKAGE *package;
@@ -730,11 +730,11 @@ BOOL WINAPI MsiGetMode(MSIHANDLE hInstall, MSIRUNMODE iRunMode)
break;
case MSIRUNMODE_MAINTENANCE:
- r = msi_get_property_int( package->db, szInstalled, 0 ) != 0;
+ r = msi_get_property_int( package->db, L"Installed", 0 ) != 0;
break;
case MSIRUNMODE_ROLLBACKENABLED:
- r = msi_get_property_int( package->db, szRollbackDisabled, 0 ) == 0;
+ r = msi_get_property_int( package->db, L"RollbackDisabled", 0 ) == 0;
break;
case MSIRUNMODE_REBOOTATEND:
@@ -823,7 +823,7 @@ UINT WINAPI MsiSetFeatureStateA(MSIHANDLE hInstall, LPCSTR szFeature,
szwFeature = strdupAtoW(szFeature);
- rc = MsiSetFeatureStateW(hInstall,szwFeature, iState);
+ rc = MsiSetFeatureStateW(hInstall,szwFeature, iState);
msi_free(szwFeature);
@@ -924,7 +924,7 @@ UINT MSI_SetFeatureStateW( MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE
if (!feature)
return ERROR_UNKNOWN_FEATURE;
- if (iState == INSTALLSTATE_ADVERTISED &&
+ if (iState == INSTALLSTATE_ADVERTISED &&
feature->Attributes & msidbFeatureAttributesDisallowAdvertise)
return ERROR_FUNCTION_FAILED;
@@ -938,7 +938,7 @@ UINT MSI_SetFeatureStateW( MSIPACKAGE *package, LPCWSTR szFeature, INSTALLSTATE
if (child->Feature_Parent && !wcscmp( szFeature, child->Feature_Parent ))
MSI_SetFeatureStateW(package, child->Feature, iState);
}
-
+
return rc;
}
@@ -1029,8 +1029,8 @@ UINT WINAPI MsiSetFeatureAttributesW( MSIHANDLE handle, LPCWSTR name, DWORD attr
if (!(package = msihandle2msiinfo( handle, MSIHANDLETYPE_PACKAGE )))
return ERROR_INVALID_HANDLE;
- costing = msi_dup_property( package->db, szCostingComplete );
- if (!costing || !wcscmp( costing, szOne ))
+ costing = msi_dup_property( package->db, L"CostingComplete" );
+ if (!costing || !wcscmp( costing, L"1" ))
{
msi_free( costing );
msiobj_release( &package->hdr );
@@ -1055,7 +1055,7 @@ UINT WINAPI MsiGetFeatureStateA(MSIHANDLE hInstall, LPCSTR szFeature,
{
LPWSTR szwFeature = NULL;
UINT rc;
-
+
if (szFeature && !(szwFeature = strdupAtoW(szFeature))) return ERROR_OUTOFMEMORY;
rc = MsiGetFeatureStateW(hInstall, szwFeature, piInstalled, piAction);
@@ -1400,7 +1400,7 @@ UINT WINAPI MsiGetComponentStateA(MSIHANDLE hInstall, LPCSTR szComponent,
{
LPWSTR szwComponent= NULL;
UINT rc;
-
+
szwComponent= strdupAtoW(szComponent);
rc = MsiGetComponentStateW(hInstall,szwComponent,piInstalled, piAction);
@@ -1567,14 +1567,13 @@ LANGID WINAPI MsiGetLanguage(MSIHANDLE hInstall)
return langid;
}
- langid = msi_get_property_int( package->db, szProductLanguage, 0 );
+ langid = msi_get_property_int( package->db, L"ProductLanguage", 0 );
msiobj_release( &package->hdr );
return langid;
}
UINT MSI_SetInstallLevel( MSIPACKAGE *package, int iInstallLevel )
{
- static const WCHAR fmt[] = { '%','d',0 };
WCHAR level[6];
int len;
UINT r;
@@ -1587,8 +1586,8 @@ UINT MSI_SetInstallLevel( MSIPACKAGE *package, int iInstallLevel )
if (iInstallLevel < 1)
return MSI_SetFeatureStates( package );
- len = swprintf( level, ARRAY_SIZE(level), fmt, iInstallLevel );
- r = msi_set_property( package->db, szInstallLevel, level, len );
+ len = swprintf( level, ARRAY_SIZE(level), L"%d", iInstallLevel );
+ r = msi_set_property( package->db, L"INSTALLLEVEL", level, len );
if ( r == ERROR_SUCCESS )
r = MSI_SetFeatureStates( package );
diff --git a/dlls/msi/media.c b/dlls/msi/media.c
index 05a751092a3..41c82af1b59 100644
--- a/dlls/msi/media.c
+++ b/dlls/msi/media.c
@@ -82,7 +82,7 @@ static UINT msi_change_media(MSIPACKAGE *package, MSIMEDIAINFO *mi)
LPWSTR source_dir;
UINT r = IDRETRY;
- source_dir = msi_dup_property(package->db, szSourceDir);
+ source_dir = msi_dup_property(package->db, L"SourceDir");
record = MSI_CreateRecord(2);
while (r == IDRETRY && !source_matches_volume(mi, source_dir))
@@ -275,12 +275,7 @@ static UINT CDECL msi_media_get_disk_info(MSIPACKAGE *package, MSIMEDIAINFO *mi)
{
MSIRECORD *row;
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ', 'F','R','O','M',' ',
- '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ',
- '`','D','i','s','k','I','d','`',' ','=',' ','%','i',0};
-
- row = MSI_QueryGetRecord(package->db, query, mi->disk_id);
+ row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Media` WHERE `DiskId` = %d", mi->disk_id);
if (!row)
{
TRACE("Unable to query row\n");
@@ -473,7 +468,7 @@ static INT_PTR cabinet_copy_file(FDINOTIFICATIONTYPE fdint,
msi_free( tmppathW );
return ERROR_OUTOFMEMORY;
}
- if (!GetTempFileNameW(tmppathW, szMsi, 0, tmpfileW)) tmpfileW[0] = 0;
+ if (!GetTempFileNameW(tmppathW, L"msi", 0, tmpfileW)) tmpfileW[0] = 0;
msi_free( tmppathW );
handle = CreateFileW(tmpfileW, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, attrs, NULL);
@@ -679,7 +674,7 @@ static UINT get_drive_type(const WCHAR *path)
static WCHAR *get_base_url( MSIDATABASE *db )
{
- WCHAR *p, *ret = NULL, *orig_db = msi_dup_property( db, szOriginalDatabase );
+ WCHAR *p, *ret = NULL, *orig_db = msi_dup_property( db, L"OriginalDatabase" );
if (UrlIsW( orig_db, URLIS_URL ) && (ret = strdupW( orig_db )) && (p = wcsrchr( ret, '/'))) p[1] = 0;
msi_free( orig_db );
return ret;
@@ -687,10 +682,6 @@ static WCHAR *get_base_url( MSIDATABASE *db )
UINT msi_load_media_info(MSIPACKAGE *package, UINT Sequence, MSIMEDIAINFO *mi)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','M','e','d','i','a','`',' ',
- 'W','H','E','R','E',' ','`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ',
- '>','=',' ','%','i',' ','O','R','D','E','R',' ','B','Y',' ','`','D','i','s','k','I','d','`',0};
MSIRECORD *row;
WCHAR *source_dir, *source, *base_url = NULL;
DWORD options;
@@ -698,7 +689,7 @@ UINT msi_load_media_info(MSIPACKAGE *package, UINT Sequence, MSIMEDIAINFO *mi)
if (Sequence <= mi->last_sequence) /* already loaded */
return ERROR_SUCCESS;
- row = MSI_QueryGetRecord(package->db, query, Sequence);
+ row = MSI_QueryGetRecord(package->db, L"SELECT * FROM `Media` WHERE `LastSequence` >= %d ORDER BY `DiskId`", Sequence);
if (!row)
{
TRACE("Unable to query row\n");
@@ -717,7 +708,7 @@ UINT msi_load_media_info(MSIPACKAGE *package, UINT Sequence, MSIMEDIAINFO *mi)
msiobj_release(&row->hdr);
msi_set_sourcedir_props(package, FALSE);
- source_dir = msi_dup_property(package->db, szSourceDir);
+ source_dir = msi_dup_property(package->db, L"SourceDir");
lstrcpyW(mi->sourcedir, source_dir);
PathAddBackslashW(mi->sourcedir);
mi->type = get_drive_type(source_dir);
@@ -902,7 +893,7 @@ UINT ready_media( MSIPACKAGE *package, BOOL compressed, MSIMEDIAINFO *mi )
/* assume first volume is in the drive */
if (mi->last_volume && wcsicmp( mi->last_volume, mi->volume_label ))
{
- WCHAR *source = msi_dup_property( package->db, szSourceDir );
+ WCHAR *source = msi_dup_property( package->db, L"SourceDir" );
BOOL match = source_matches_volume( mi, source );
msi_free( source );
diff --git a/dlls/msi/msi.c b/dlls/msi/msi.c
index 71de13a8ffc..0963c814211 100644
--- a/dlls/msi/msi.c
+++ b/dlls/msi/msi.c
@@ -2469,7 +2469,7 @@ UINT WINAPI MsiMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uTyp
{
FIXME("%p %s %s %u %08x %08x\n", hWnd, debugstr_a(lpText), debugstr_a(lpCaption),
uType, wLanguageId, f);
- return MessageBoxExA(hWnd,lpText,lpCaption,uType,wLanguageId);
+ return MessageBoxExA(hWnd,lpText,lpCaption,uType,wLanguageId);
}
UINT WINAPI MsiMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType,
@@ -2477,7 +2477,7 @@ UINT WINAPI MsiMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uT
{
FIXME("%p %s %s %u %08x %08x\n", hWnd, debugstr_w(lpText), debugstr_w(lpCaption),
uType, wLanguageId, f);
- return MessageBoxExW(hWnd,lpText,lpCaption,uType,wLanguageId);
+ return MessageBoxExW(hWnd,lpText,lpCaption,uType,wLanguageId);
}
UINT WINAPI MsiMessageBoxExA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType,
@@ -3522,7 +3522,7 @@ UINT WINAPI MsiProvideQualifiedComponentW( LPCWSTR szComponent,
LPCWSTR szQualifier, DWORD dwInstallMode, LPWSTR lpPathBuf,
LPDWORD pcchPathBuf)
{
- return MsiProvideQualifiedComponentExW(szComponent, szQualifier,
+ return MsiProvideQualifiedComponentExW(szComponent, szQualifier,
dwInstallMode, NULL, 0, 0, lpPathBuf, pcchPathBuf);
}
@@ -3989,7 +3989,7 @@ UINT WINAPI MsiReinstallFeatureW( LPCWSTR szProduct, LPCWSTR szFeature, DWORD dw
if (dwReinstallMode & REINSTALLMODE_PACKAGE)
*ptr++ = 'v';
*ptr = 0;
-
+
sz = sizeof(sourcepath);
MsiSourceListGetInfoW( szProduct, NULL, context, MSICODE_PRODUCT,
INSTALLPROPERTY_LASTUSEDSOURCEW, sourcepath, &sz );
diff --git a/dlls/msi/msipriv.h b/dlls/msi/msipriv.h
index a1b7f033c37..950a18d0e74 100644
--- a/dlls/msi/msipriv.h
+++ b/dlls/msi/msipriv.h
@@ -1137,111 +1137,6 @@ extern DWORD call_script(MSIHANDLE hPackage, INT type, LPCWSTR script, LPCWSTR f
/* User interface messages from the actions */
extern void msi_ui_progress(MSIPACKAGE *, int, int, int, int) DECLSPEC_HIDDEN;
-/* common strings */
-static const WCHAR szSourceDir[] = {'S','o','u','r','c','e','D','i','r',0};
-static const WCHAR szSOURCEDIR[] = {'S','O','U','R','C','E','D','I','R',0};
-static const WCHAR szRootDrive[] = {'R','O','O','T','D','R','I','V','E',0};
-static const WCHAR szTargetDir[] = {'T','A','R','G','E','T','D','I','R',0};
-static const WCHAR szLocalSid[] = {'S','-','1','-','5','-','1','8',0};
-static const WCHAR szAllSid[] = {'S','-','1','-','1','-','0',0};
-static const WCHAR szEmpty[] = {0};
-static const WCHAR szAll[] = {'A','L','L',0};
-static const WCHAR szOne[] = {'1',0};
-static const WCHAR szZero[] = {'0',0};
-static const WCHAR szSpace[] = {' ',0};
-static const WCHAR szBackSlash[] = {'\\',0};
-static const WCHAR szForwardSlash[] = {'/',0};
-static const WCHAR szDot[] = {'.',0};
-static const WCHAR szDotDot[] = {'.','.',0};
-static const WCHAR szSemiColon[] = {';',0};
-static const WCHAR szPreselected[] = {'P','r','e','s','e','l','e','c','t','e','d',0};
-static const WCHAR szPatches[] = {'P','a','t','c','h','e','s',0};
-static const WCHAR szState[] = {'S','t','a','t','e',0};
-static const WCHAR szMsi[] = {'m','s','i',0};
-static const WCHAR szPatch[] = {'P','A','T','C','H',0};
-static const WCHAR szSourceList[] = {'S','o','u','r','c','e','L','i','s','t',0};
-static const WCHAR szInstalled[] = {'I','n','s','t','a','l','l','e','d',0};
-static const WCHAR szReinstall[] = {'R','E','I','N','S','T','A','L','L',0};
-static const WCHAR szReinstallMode[] = {'R','E','I','N','S','T','A','L','L','M','O','D','E',0};
-static const WCHAR szRemove[] = {'R','E','M','O','V','E',0};
-static const WCHAR szUserSID[] = {'U','s','e','r','S','I','D',0};
-static const WCHAR szProductCode[] = {'P','r','o','d','u','c','t','C','o','d','e',0};
-static const WCHAR szRegisterClassInfo[] = {'R','e','g','i','s','t','e','r','C','l','a','s','s','I','n','f','o',0};
-static const WCHAR szRegisterProgIdInfo[] = {'R','e','g','i','s','t','e','r','P','r','o','g','I','d','I','n','f','o',0};
-static const WCHAR szRegisterExtensionInfo[] = {'R','e','g','i','s','t','e','r','E','x','t','e','n','s','i','o','n','I','n','f','o',0};
-static const WCHAR szRegisterMIMEInfo[] = {'R','e','g','i','s','t','e','r','M','I','M','E','I','n','f','o',0};
-static const WCHAR szDuplicateFiles[] = {'D','u','p','l','i','c','a','t','e','F','i','l','e','s',0};
-static const WCHAR szRemoveDuplicateFiles[] = {'R','e','m','o','v','e','D','u','p','l','i','c','a','t','e','F','i','l','e','s',0};
-static const WCHAR szInstallFiles[] = {'I','n','s','t','a','l','l','F','i','l','e','s',0};
-static const WCHAR szPatchFiles[] = {'P','a','t','c','h','F','i','l','e','s',0};
-static const WCHAR szRemoveFiles[] = {'R','e','m','o','v','e','F','i','l','e','s',0};
-static const WCHAR szFindRelatedProducts[] = {'F','i','n','d','R','e','l','a','t','e','d','P','r','o','d','u','c','t','s',0};
-static const WCHAR szAllUsers[] = {'A','L','L','U','S','E','R','S',0};
-static const WCHAR szCustomActionData[] = {'C','u','s','t','o','m','A','c','t','i','o','n','D','a','t','a',0};
-static const WCHAR szUILevel[] = {'U','I','L','e','v','e','l',0};
-static const WCHAR szProductID[] = {'P','r','o','d','u','c','t','I','D',0};
-static const WCHAR szPIDTemplate[] = {'P','I','D','T','e','m','p','l','a','t','e',0};
-static const WCHAR szPIDKEY[] = {'P','I','D','K','E','Y',0};
-static const WCHAR szTYPELIB[] = {'T','Y','P','E','L','I','B',0};
-static const WCHAR szSumInfo[] = {5 ,'S','u','m','m','a','r','y','I','n','f','o','r','m','a','t','i','o','n',0};
-static const WCHAR szHCR[] = {'H','K','E','Y','_','C','L','A','S','S','E','S','_','R','O','O','T','\\',0};
-static const WCHAR szHCU[] = {'H','K','E','Y','_','C','U','R','R','E','N','T','_','U','S','E','R','\\',0};
-static const WCHAR szHLM[] = {'H','K','E','Y','_','L','O','C','A','L','_','M','A','C','H','I','N','E','\\',0};
-static const WCHAR szHU[] = {'H','K','E','Y','_','U','S','E','R','S','\\',0};
-static const WCHAR szWindowsFolder[] = {'W','i','n','d','o','w','s','F','o','l','d','e','r',0};
-static const WCHAR szAppSearch[] = {'A','p','p','S','e','a','r','c','h',0};
-static const WCHAR szMoveFiles[] = {'M','o','v','e','F','i','l','e','s',0};
-static const WCHAR szCCPSearch[] = {'C','C','P','S','e','a','r','c','h',0};
-static const WCHAR szUnregisterClassInfo[] = {'U','n','r','e','g','i','s','t','e','r','C','l','a','s','s','I','n','f','o',0};
-static const WCHAR szUnregisterExtensionInfo[] = {'U','n','r','e','g','i','s','t','e','r','E','x','t','e','n','s','i','o','n','I','n','f','o',0};
-static const WCHAR szUnregisterMIMEInfo[] = {'U','n','r','e','g','i','s','t','e','r','M','I','M','E','I','n','f','o',0};
-static const WCHAR szUnregisterProgIdInfo[] = {'U','n','r','e','g','i','s','t','e','r','P','r','o','g','I','d','I','n','f','o',0};
-static const WCHAR szRegisterFonts[] = {'R','e','g','i','s','t','e','r','F','o','n','t','s',0};
-static const WCHAR szUnregisterFonts[] = {'U','n','r','e','g','i','s','t','e','r','F','o','n','t','s',0};
-static const WCHAR szCLSID[] = {'C','L','S','I','D',0};
-static const WCHAR szProgID[] = {'P','r','o','g','I','D',0};
-static const WCHAR szVIProgID[] = {'V','e','r','s','i','o','n','I','n','d','e','p','e','n','d','e','n','t','P','r','o','g','I','D',0};
-static const WCHAR szAppID[] = {'A','p','p','I','D',0};
-static const WCHAR szDefaultIcon[] = {'D','e','f','a','u','l','t','I','c','o','n',0};
-static const WCHAR szInprocHandler[] = {'I','n','p','r','o','c','H','a','n','d','l','e','r',0};
-static const WCHAR szInprocHandler32[] = {'I','n','p','r','o','c','H','a','n','d','l','e','r','3','2',0};
-static const WCHAR szMIMEDatabase[] = {'M','I','M','E','\\','D','a','t','a','b','a','s','e','\\','C','o','n','t','e','n','t',' ','T','y','p','e','\\',0};
-static const WCHAR szLocalPackage[] = {'L','o','c','a','l','P','a','c','k','a','g','e',0};
-static const WCHAR szOriginalDatabase[] = {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
-static const WCHAR szUpgradeCode[] = {'U','p','g','r','a','d','e','C','o','d','e',0};
-static const WCHAR szAdminUser[] = {'A','d','m','i','n','U','s','e','r',0};
-static const WCHAR szIntel[] = {'I','n','t','e','l',0};
-static const WCHAR szIntel64[] = {'I','n','t','e','l','6','4',0};
-static const WCHAR szX64[] = {'x','6','4',0};
-static const WCHAR szAMD64[] = {'A','M','D','6','4',0};
-static const WCHAR szARM[] = {'A','r','m',0};
-static const WCHAR szARM64[] = {'A','r','m','6','4',0};
-static const WCHAR szStreams[] = {'_','S','t','r','e','a','m','s',0};
-static const WCHAR szStorages[] = {'_','S','t','o','r','a','g','e','s',0};
-static const WCHAR szMsiPublishAssemblies[] = {'M','s','i','P','u','b','l','i','s','h','A','s','s','e','m','b','l','i','e','s',0};
-static const WCHAR szMsiUnpublishAssemblies[] = {'M','s','i','U','n','p','u','b','l','i','s','h','A','s','s','e','m','b','l','i','e','s',0};
-static const WCHAR szCostingComplete[] = {'C','o','s','t','i','n','g','C','o','m','p','l','e','t','e',0};
-static const WCHAR szTempFolder[] = {'T','e','m','p','F','o','l','d','e','r',0};
-static const WCHAR szDatabase[] = {'D','A','T','A','B','A','S','E',0};
-static const WCHAR szCRoot[] = {'C',':','\\',0};
-static const WCHAR szProductLanguage[] = {'P','r','o','d','u','c','t','L','a','n','g','u','a','g','e',0};
-static const WCHAR szProductVersion[] = {'P','r','o','d','u','c','t','V','e','r','s','i','o','n',0};
-static const WCHAR szWindowsInstaller[] = {'W','i','n','d','o','w','s','I','n','s','t','a','l','l','e','r',0};
-static const WCHAR szStringData[] = {'_','S','t','r','i','n','g','D','a','t','a',0};
-static const WCHAR szStringPool[] = {'_','S','t','r','i','n','g','P','o','o','l',0};
-static const WCHAR szInstallLevel[] = {'I','N','S','T','A','L','L','L','E','V','E','L',0};
-static const WCHAR szCostInitialize[] = {'C','o','s','t','I','n','i','t','i','a','l','i','z','e',0};
-static const WCHAR szAppDataFolder[] = {'A','p','p','D','a','t','a','F','o','l','d','e','r',0};
-static const WCHAR szRollbackDisabled[] = {'R','o','l','l','b','a','c','k','D','i','s','a','b','l','e','d',0};
-static const WCHAR szName[] = {'N','a','m','e',0};
-static const WCHAR szData[] = {'D','a','t','a',0};
-static const WCHAR szLangResource[] = {'\\','V','a','r','F','i','l','e','I','n','f','o','\\','T','r','a','n','s','l','a','t','i','o','n',0};
-static const WCHAR szInstallLocation[] = {'I','n','s','t','a','l','l','L','o','c','a','t','i','o','n',0};
-static const WCHAR szProperty[] = {'P','r','o','p','e','r','t','y',0};
-static const WCHAR szUninstallable[] = {'U','n','i','n','s','t','a','l','l','a','b','l','e',0};
-static const WCHAR szEXECUTEACTION[] = {'E','X','E','C','U','T','E','A','C','T','I','O','N',0};
-static const WCHAR szProductToBeRegistered[] = {'P','r','o','d','u','c','t','T','o','B','e','R','e','g','i','s','t','e','r','e','d',0};
-
/* memory allocation macro functions */
static void *msi_alloc( size_t len ) __WINE_ALLOC_SIZE(1);
static inline void *msi_alloc( size_t len )
diff --git a/dlls/msi/msiquery.c b/dlls/msi/msiquery.c
index 7791ee9b91a..4ee9a973917 100644
--- a/dlls/msi/msiquery.c
+++ b/dlls/msi/msiquery.c
@@ -517,7 +517,7 @@ UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
MSIQUERY *query;
MSIRECORD *rec = NULL;
UINT ret;
-
+
TRACE("%d %d\n", hView, hRec);
if( hRec )
@@ -564,7 +564,6 @@ UINT WINAPI MsiViewExecute(MSIHANDLE hView, MSIHANDLE hRec)
static UINT msi_set_record_type_string( MSIRECORD *rec, UINT field,
UINT type, BOOL temporary )
{
- static const WCHAR fmt[] = { '%','d',0 };
WCHAR szType[0x10];
if (MSITYPE_IS_BINARY(type))
@@ -591,7 +590,7 @@ static UINT msi_set_record_type_string( MSIRECORD *rec, UINT field,
if (type & MSITYPE_NULLABLE)
szType[0] &= ~0x20;
- swprintf( &szType[1], ARRAY_SIZE(szType) - 1, fmt, (type&0xff) );
+ swprintf( &szType[1], ARRAY_SIZE(szType) - 1, L"%d", (type&0xff) );
TRACE("type %04x -> %s\n", type, debugstr_w(szType) );
@@ -798,7 +797,7 @@ MSIDBERROR WINAPI MsiViewGetErrorW( MSIHANDLE handle, LPWSTR buffer, LPDWORD buf
}
__ENDTRY;
- if (msi_strncpyW(remote_column ? remote_column : szEmpty, -1, buffer, buflen) == ERROR_MORE_DATA)
+ if (msi_strncpyW(remote_column ? remote_column : L"", -1, buffer, buflen) == ERROR_MORE_DATA)
r = MSIDBERROR_MOREDATA;
if (remote_column)
@@ -808,7 +807,7 @@ MSIDBERROR WINAPI MsiViewGetErrorW( MSIHANDLE handle, LPWSTR buffer, LPDWORD buf
}
if ((r = query->view->error)) column = query->view->error_column;
- else column = szEmpty;
+ else column = L"";
if (msi_strncpyW(column, -1, buffer, buflen) == ERROR_MORE_DATA)
r = MSIDBERROR_MOREDATA;
@@ -849,7 +848,7 @@ MSIDBERROR WINAPI MsiViewGetErrorA( MSIHANDLE handle, LPSTR buffer, LPDWORD bufl
}
__ENDTRY;
- if (msi_strncpyWtoA(remote_column ? remote_column : szEmpty, -1, buffer, buflen, FALSE) == ERROR_MORE_DATA)
+ if (msi_strncpyWtoA(remote_column ? remote_column : L"", -1, buffer, buflen, FALSE) == ERROR_MORE_DATA)
r = MSIDBERROR_MOREDATA;
if (remote_column)
@@ -859,7 +858,7 @@ MSIDBERROR WINAPI MsiViewGetErrorA( MSIHANDLE handle, LPSTR buffer, LPDWORD bufl
}
if ((r = query->view->error)) column = query->view->error_column;
- else column = szEmpty;
+ else column = L"";
if (msi_strncpyWtoA(column, -1, buffer, buflen, FALSE) == ERROR_MORE_DATA)
r = MSIDBERROR_MOREDATA;
@@ -1045,11 +1044,6 @@ static UINT msi_primary_key_iterator( MSIRECORD *rec, LPVOID param )
UINT MSI_DatabaseGetPrimaryKeys( MSIDATABASE *db,
LPCWSTR table, MSIRECORD **prec )
{
- static const WCHAR sql[] = {
- 's','e','l','e','c','t',' ','*',' ',
- 'f','r','o','m',' ','`','_','C','o','l','u','m','n','s','`',' ',
- 'w','h','e','r','e',' ',
- '`','T','a','b','l','e','`',' ','=',' ','\'','%','s','\'',0 };
struct msi_primary_key_record_info info;
MSIQUERY *query = NULL;
UINT r;
@@ -1057,7 +1051,7 @@ UINT MSI_DatabaseGetPrimaryKeys( MSIDATABASE *db,
if (!TABLE_Exists( db, table ))
return ERROR_INVALID_TABLE;
- r = MSI_OpenQuery( db, &query, sql, table );
+ r = MSI_OpenQuery( db, &query, L"SELECT * FROM `_Columns` WHERE `Table` = '%s'", table );
if( r != ERROR_SUCCESS )
return r;
@@ -1133,7 +1127,7 @@ UINT WINAPI MsiDatabaseGetPrimaryKeysW( MSIHANDLE hdb,
return r;
}
-UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE hdb,
+UINT WINAPI MsiDatabaseGetPrimaryKeysA(MSIHANDLE hdb,
LPCSTR table, MSIHANDLE* phRec)
{
LPWSTR szwTable = NULL;
diff --git a/dlls/msi/patch.c b/dlls/msi/patch.c
index 67da5778415..35b2784ba85 100644
--- a/dlls/msi/patch.c
+++ b/dlls/msi/patch.c
@@ -179,7 +179,7 @@ static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform
}
if (wanted_flags & MSITRANSFORM_VALIDATE_PRODUCT)
{
- WCHAR *product_code_installed = msi_dup_property( package->db, szProductCode );
+ WCHAR *product_code_installed = msi_dup_property( package->db, L"ProductCode" );
if (!product_code_installed)
{
@@ -197,7 +197,7 @@ static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform
msi_free( template );
if (wanted_flags & MSITRANSFORM_VALIDATE_MAJORVERSION)
{
- WCHAR *product_version_installed = msi_dup_property( package->db, szProductVersion );
+ WCHAR *product_version_installed = msi_dup_property( package->db, L"ProductVersion" );
DWORD major_installed, minor_installed, major, minor;
if (!product_version_installed)
@@ -218,7 +218,7 @@ static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform
}
else if (wanted_flags & MSITRANSFORM_VALIDATE_MINORVERSION)
{
- WCHAR *product_version_installed = msi_dup_property( package->db, szProductVersion );
+ WCHAR *product_version_installed = msi_dup_property( package->db, L"ProductVersion" );
DWORD major_installed, minor_installed, major, minor;
if (!product_version_installed)
@@ -236,7 +236,7 @@ static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform
}
if (wanted_flags & MSITRANSFORM_VALIDATE_UPGRADECODE)
{
- WCHAR *upgrade_code_installed = msi_dup_property( package->db, szUpgradeCode );
+ WCHAR *upgrade_code_installed = msi_dup_property( package->db, L"UpgradeCode" );
if (!upgrade_code_installed)
{
@@ -296,7 +296,7 @@ UINT msi_check_patch_applicable( MSIPACKAGE *package, MSISUMMARYINFO *si )
LPWSTR guid_list, *guids, product_code;
UINT i, ret = ERROR_FUNCTION_FAILED;
- product_code = msi_dup_property( package->db, szProductCode );
+ product_code = msi_dup_property( package->db, L"ProductCode" );
if (!product_code)
{
/* FIXME: the property ProductCode should be written into the DB somewhere */
@@ -368,17 +368,13 @@ static UINT msi_parse_patch_summary( MSISUMMARYINFO *si, MSIPATCHINFO **patch )
static UINT patch_set_media_source_prop( MSIPACKAGE *package )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','`','S','o','u','r','c','e','`',' ','F','R','O','M',' ',
- '`','M','e','d','i','a','`',' ','W','H','E','R','E',' ','`','S','o','u','r','c','e','`',' ',
- 'I','S',' ','N','O','T',' ','N','U','L','L',0};
MSIQUERY *view;
MSIRECORD *rec;
const WCHAR *property;
WCHAR *patch;
UINT r;
- r = MSI_DatabaseOpenViewW( package->db, query, &view );
+ r = MSI_DatabaseOpenViewW( package->db, L"SELECT `Source` FROM `Media` WHERE `Source` IS NOT NULL", &view );
if (r != ERROR_SUCCESS)
return r;
@@ -389,7 +385,7 @@ static UINT patch_set_media_source_prop( MSIPACKAGE *package )
if (MSI_ViewFetch( view, &rec ) == ERROR_SUCCESS)
{
property = MSI_RecordGetString( rec, 1 );
- patch = msi_dup_property( package->db, szPatch );
+ patch = msi_dup_property( package->db, L"PATCH" );
msi_set_property( package->db, property, patch, -1 );
msi_free( patch );
msiobj_release( &rec->hdr );
@@ -444,15 +440,11 @@ static void patch_offset_list_free( struct patch_offset_list *pos )
static void patch_offset_get_filepatches( MSIDATABASE *db, UINT last_sequence, struct patch_offset_list *pos )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','P','a','t','c','h',' ',
- 'W','H','E','R','E',' ','S','e','q','u','e','n','c','e',' ','<','=',' ','?',' ',
- 'O','R','D','E','R',' ','B','Y',' ','S','e','q','u','e','n','c','e',0};
MSIQUERY *view;
MSIRECORD *rec;
UINT r;
- r = MSI_DatabaseOpenViewW( db, query, &view );
+ r = MSI_DatabaseOpenViewW( db, L"SELECT * FROM `Patch` WHERE `Sequence` <= ? ORDER BY `Sequence`", &view );
if (r != ERROR_SUCCESS)
return;
@@ -482,15 +474,11 @@ static void patch_offset_get_filepatches( MSIDATABASE *db, UINT last_sequence, s
static void patch_offset_get_files( MSIDATABASE *db, UINT last_sequence, struct patch_offset_list *pos )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','F','i','l','e',' ',
- 'W','H','E','R','E',' ','S','e','q','u','e','n','c','e',' ','<','=',' ','?',' ',
- 'O','R','D','E','R',' ','B','Y',' ','S','e','q','u','e','n','c','e',0};
MSIQUERY *view;
MSIRECORD *rec;
UINT r;
- r = MSI_DatabaseOpenViewW( db, query, &view );
+ r = MSI_DatabaseOpenViewW( db, L"SELECT * FROM `File` WHERE `Sequence` <= ? ORDER BY `Sequence`", &view );
if (r != ERROR_SUCCESS)
return;
@@ -545,16 +533,6 @@ static UINT patch_update_file_sequence( MSIDATABASE *db, const struct patch_offs
static UINT patch_update_filepatch_sequence( MSIDATABASE *db, const struct patch_offset_list *pos,
MSIQUERY *view, MSIRECORD *rec )
{
- static const WCHAR delete_query[] = {
- 'D','E','L','E','T','E',' ','F','R','O','M',' ','`','P','a','t','c','h','`',' ',
- 'W','H','E','R','E',' ','`','F','i','l','e','_','`',' ','=',' ','?',' ',
- 'A','N','D',' ','`','S','e','q','u','e','n','c','e','`',' ','=',' ','?',0};
- static const WCHAR insert_query[] = {
- 'I','N','S','E','R','T',' ','I','N','T','O',' ','`','P','a','t','c','h','`',' ',
- '(','`','F','i','l','e','_','`',',','`','S','e','q','u','e','n','c','e','`',',',
- '`','P','a','t','c','h','S','i','z','e','`',',','`','A','t','t','r','i','b','u','t','e','s','`',',',
- '`','H','e','a','d','e','r','`',',','`','S','t','r','e','a','m','R','e','f','_','`',')',' ',
- 'V','A','L','U','E','S',' ','(','?',',','?',',','?',',','?',',','?',',','?',')',0};
struct patch_offset *po;
const WCHAR *file = MSI_RecordGetString( rec, 1 );
UINT r = ERROR_SUCCESS, seq = MSI_RecordGetInteger( rec, 2 );
@@ -566,7 +544,7 @@ static UINT patch_update_filepatch_sequence( MSIDATABASE *db, const struct patch
MSIQUERY *delete_view, *insert_view;
MSIRECORD *rec2;
- r = MSI_DatabaseOpenViewW( db, delete_query, &delete_view );
+ r = MSI_DatabaseOpenViewW( db, L"DELETE FROM `Patch` WHERE `File_` = ? AND `Sequence` = ?", &delete_view );
if (r != ERROR_SUCCESS) return r;
rec2 = MSI_CreateRecord( 2 );
@@ -577,7 +555,8 @@ static UINT patch_update_filepatch_sequence( MSIDATABASE *db, const struct patch
msiobj_release( &rec2->hdr );
if (r != ERROR_SUCCESS) return r;
- r = MSI_DatabaseOpenViewW( db, insert_query, &insert_view );
+ r = MSI_DatabaseOpenViewW( db, L"INSERT INTO `Patch` (`File_`,`Sequence`,`PatchSize`,`Attributes`,"
+ L"`Header`,`StreamRef_`) VALUES (?,?,?,?,?,?)", &insert_view );
if (r != ERROR_SUCCESS) return r;
MSI_RecordSetInteger( rec, 2, po->sequence + pos->offset_to_apply );
@@ -594,21 +573,13 @@ static UINT patch_update_filepatch_sequence( MSIDATABASE *db, const struct patch
static UINT patch_offset_modify_db( MSIDATABASE *db, struct patch_offset_list *pos )
{
- static const WCHAR file_query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','F','i','l','e','`',' ',
- 'W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',' ','>','=',' ','?',' ',
- 'A','N','D',' ','`','S','e','q','u','e','n','c','e','`',' ','<','=',' ','?',' ',
- 'O','R','D','E','R',' ','B','Y',' ','`','S','e','q','u','e','n','c','e','`',0};
- static const WCHAR patch_query[] = {
- 'S','E','L','E','C','T',' ','*','F','R','O','M',' ','`','P','a','t','c','h','`',' ',
- 'W','H','E','R','E',' ','`','S','e','q','u','e','n','c','e','`',' ','>','=',' ','?',' ',
- 'A','N','D',' ','`','S','e','q','u','e','n','c','e','`',' ','<','=',' ','?',' ',
- 'O','R','D','E','R',' ','B','Y',' ','`','S','e','q','u','e','n','c','e','`',0};
MSIRECORD *rec;
MSIQUERY *view;
UINT r, min = pos->min, max = pos->max, r_fetch;
- r = MSI_DatabaseOpenViewW( db, file_query, &view );
+ r = MSI_DatabaseOpenViewW( db,
+ L"SELECT * FROM `File` WHERE `Sequence` >= ? AND `Sequence` <= ? ORDER BY `Sequence`",
+ &view );
if (r != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -629,7 +600,9 @@ static UINT patch_offset_modify_db( MSIDATABASE *db, struct patch_offset_list *p
}
msiobj_release( &view->hdr );
- r = MSI_DatabaseOpenViewW( db, patch_query, &view );
+ r = MSI_DatabaseOpenViewW( db,
+ L"SELECT *FROM `Patch` WHERE `Sequence` >= ? AND `Sequence` <= ? ORDER BY `Sequence`",
+ &view );
if (r != ERROR_SUCCESS)
return ERROR_SUCCESS;
@@ -654,11 +627,8 @@ done:
return r;
}
-static const WCHAR patch_media_query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','`','M','e','d','i','a','`',' ',
- 'W','H','E','R','E',' ','`','S','o','u','r','c','e','`',' ','I','S',' ','N','O','T',' ','N','U','L','L',' ',
- 'A','N','D',' ','`','C','a','b','i','n','e','t','`',' ','I','S',' ','N','O','T',' ','N','U','L','L',' ',
- 'O','R','D','E','R',' ','B','Y',' ','`','D','i','s','k','I','d','`',0};
+static const WCHAR patch_media_query[] =
+ L"SELECT * FROM `Media` WHERE `Source` IS NOT NULL AND `Cabinet` IS NOT NULL ORDER BY `DiskId`";
struct patch_media
{
@@ -673,15 +643,6 @@ struct patch_media
static UINT patch_add_media( MSIPACKAGE *package, IStorage *storage, MSIPATCHINFO *patch )
{
- static const WCHAR delete_query[] = {
- 'D','E','L','E','T','E',' ','F','R','O','M',' ','`','M','e','d','i','a','`',' ',
- 'W','H','E','R','E',' ','`','D','i','s','k','I','d','`','=','?',0};
- static const WCHAR insert_query[] = {
- 'I','N','S','E','R','T',' ','I','N','T','O',' ','`','M','e','d','i','a','`',' ',
- '(','`','D','i','s','k','I','d','`',',','`','L','a','s','t','S','e','q','u','e','n','c','e','`',',',
- '`','D','i','s','k','P','r','o','m','p','t','`',',','`','C','a','b','i','n','e','t','`',',',
- '`','V','o','l','u','m','e','L','a','b','e','l','`',',','`','S','o','u','r','c','e','`',')',' ',
- 'V','A','L','U','E','S',' ','(','?',',','?',',','?',',','?',',','?',',','?',')',0};
MSIQUERY *view;
MSIRECORD *rec;
UINT r, disk_id;
@@ -708,10 +669,11 @@ static UINT patch_add_media( MSIPACKAGE *package, IStorage *storage, MSIPATCHINF
msiobj_release( &rec->hdr );
continue;
}
- if (!(media = msi_alloc( sizeof( *media )))) {
+ if (!(media = msi_alloc( sizeof( *media ))))
+ {
msiobj_release( &rec->hdr );
goto done;
- }
+ }
media->disk_id = disk_id;
media->last_sequence = MSI_RecordGetInteger( rec, 2 );
media->prompt = msi_dup_record_field( rec, 3 );
@@ -726,7 +688,7 @@ static UINT patch_add_media( MSIPACKAGE *package, IStorage *storage, MSIPATCHINF
{
MSIQUERY *delete_view, *insert_view;
- r = MSI_DatabaseOpenViewW( package->db, delete_query, &delete_view );
+ r = MSI_DatabaseOpenViewW( package->db, L"DELETE FROM `Media` WHERE `DiskId`=?", &delete_view );
if (r != ERROR_SUCCESS) goto done;
rec = MSI_CreateRecord( 1 );
@@ -737,7 +699,9 @@ static UINT patch_add_media( MSIPACKAGE *package, IStorage *storage, MSIPATCHINF
msiobj_release( &rec->hdr );
if (r != ERROR_SUCCESS) goto done;
- r = MSI_DatabaseOpenViewW( package->db, insert_query, &insert_view );
+ r = MSI_DatabaseOpenViewW( package->db, L"INSERT INTO `Media` (`DiskId`,`LastSequence`,`DiskPrompt`,"
+ L"`Cabinet`,`VolumeLabel`,`Source`) VALUES (?,?,?,?,?,?)",
+ &insert_view );
if (r != ERROR_SUCCESS) goto done;
disk_id = package->db->media_transform_disk_id;
@@ -842,17 +806,12 @@ done:
static DWORD is_uninstallable( MSIDATABASE *db )
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','`','V','a','l','u','e','`',' ','F','R','O','M',' ',
- '`','M','s','i','P','a','t','c','h','M','e','t','a','d','a','t','a','`',' ',
- 'W','H','E','R','E',' ','`','C','o','m','p','a','n','y','`',' ','I','S',' ',
- 'N','U','L','L',' ','A','N','D',' ','`','P','r','o','p','e','r','t','y','`','=',
- '\'','A','l','l','o','w','R','e','m','o','v','a','l','\'',0};
MSIQUERY *view;
MSIRECORD *rec;
DWORD ret = 0;
- if (MSI_DatabaseOpenViewW( db, query, &view ) != ERROR_SUCCESS) return 0;
+ if (MSI_DatabaseOpenViewW( db, L"SELECT `Value` FROM `MsiPatchMetadata` WHERE `Company` IS NULL "
+ L"AND `Property`='AllowRemoval'", &view ) != ERROR_SUCCESS) return 0;
if (MSI_ViewExecute( view, 0 ) != ERROR_SUCCESS)
{
msiobj_release( &view->hdr );
@@ -915,7 +874,6 @@ void msi_free_patchinfo( MSIPATCHINFO *patch )
static UINT msi_apply_patch_package( MSIPACKAGE *package, const WCHAR *file )
{
- static const WCHAR dotmsp[] = {'.','m','s','p',0};
MSIDATABASE *patch_db = NULL;
WCHAR localfile[MAX_PATH];
MSISUMMARYINFO *si;
@@ -947,7 +905,7 @@ static UINT msi_apply_patch_package( MSIPACKAGE *package, const WCHAR *file )
if ( r != ERROR_SUCCESS )
goto done;
- r = msi_create_empty_local_file( localfile, dotmsp );
+ r = msi_create_empty_local_file( localfile, L".msp" );
if ( r != ERROR_SUCCESS )
goto done;
@@ -976,7 +934,7 @@ UINT msi_apply_patches( MSIPACKAGE *package )
LPWSTR patch_list, *patches;
UINT i, r = ERROR_SUCCESS;
- patch_list = msi_dup_property( package->db, szPatch );
+ patch_list = msi_dup_property( package->db, L"PATCH" );
TRACE("patches to be applied: %s\n", debugstr_w(patch_list));
@@ -991,11 +949,10 @@ UINT msi_apply_patches( MSIPACKAGE *package )
UINT msi_apply_transforms( MSIPACKAGE *package )
{
- static const WCHAR szTransforms[] = {'T','R','A','N','S','F','O','R','M','S',0};
LPWSTR xform_list, *xforms;
UINT i, r = ERROR_SUCCESS;
- xform_list = msi_dup_property( package->db, szTransforms );
+ xform_list = msi_dup_property( package->db, L"TRANSFORMS" );
xforms = msi_split_string( xform_list, ';' );
for (i = 0; xforms && xforms[i] && r == ERROR_SUCCESS; i++)
diff --git a/dlls/msi/record.c b/dlls/msi/record.c
index 0a352adcd87..46c2d71f6f1 100644
--- a/dlls/msi/record.c
+++ b/dlls/msi/record.c
@@ -147,7 +147,7 @@ static BOOL string2intW( LPCWSTR str, int *out )
if( str[0] == '-' ) /* check if it's negative */
x = -x;
- *out = x;
+ *out = x;
return TRUE;
}
@@ -439,7 +439,6 @@ const WCHAR *MSI_RecordGetString( const MSIRECORD *rec, UINT iField )
UINT MSI_RecordGetStringW(MSIRECORD *rec, UINT iField,
LPWSTR szValue, LPDWORD pcchValue)
{
- static const WCHAR szFormat[] = {'%','d',0};
UINT len = 0, ret = ERROR_SUCCESS;
WCHAR buffer[16];
@@ -457,7 +456,7 @@ UINT MSI_RecordGetStringW(MSIRECORD *rec, UINT iField,
switch( rec->fields[iField].type )
{
case MSIFIELD_INT:
- wsprintfW(buffer, szFormat, rec->fields[iField].u.iVal);
+ wsprintfW(buffer, L"%d", rec->fields[iField].u.iVal);
len = lstrlenW( buffer );
if (szValue)
lstrcpynW(szValue, buffer, *pcchValue);
diff --git a/dlls/msi/script.c b/dlls/msi/script.c
index 67ad8b51c52..4585c2b5922 100644
--- a/dlls/msi/script.c
+++ b/dlls/msi/script.c
@@ -49,10 +49,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi);
#endif
-static const WCHAR szJScript[] = { 'J','S','c','r','i','p','t',0};
-static const WCHAR szVBScript[] = { 'V','B','S','c','r','i','p','t',0};
-static const WCHAR szSession[] = {'S','e','s','s','i','o','n',0};
-
/*
* MsiActiveScriptSite - Our IActiveScriptSite implementation.
*/
@@ -135,7 +131,7 @@ static HRESULT WINAPI MsiActiveScriptSite_GetItemInfo(IActiveScriptSite* iface,
}
/* Are we looking for the session object? */
- if (!wcscmp(szSession, pstrName)) {
+ if (!wcscmp(L"Session", pstrName)) {
if (dwReturnMask & SCRIPTINFO_ITYPEINFO) {
HRESULT hr = get_typeinfo(Session_tid, ppti);
if (SUCCEEDED(hr))
@@ -319,9 +315,9 @@ DWORD call_script(MSIHANDLE hPackage, INT type, LPCWSTR script, LPCWSTR function
/* Create the scripting engine */
type &= msidbCustomActionTypeJScript|msidbCustomActionTypeVBScript;
if (type == msidbCustomActionTypeJScript)
- hr = CLSIDFromProgID(szJScript, &clsid);
+ hr = CLSIDFromProgID(L"JScript", &clsid);
else if (type == msidbCustomActionTypeVBScript)
- hr = CLSIDFromProgID(szVBScript, &clsid);
+ hr = CLSIDFromProgID(L"VBScript", &clsid);
else {
ERR("Unknown script type %d\n", type);
goto done;
@@ -345,7 +341,7 @@ DWORD call_script(MSIHANDLE hPackage, INT type, LPCWSTR script, LPCWSTR function
hr = IActiveScriptParse_InitNew(pActiveScriptParse);
if (FAILED(hr)) goto done;
- hr = IActiveScript_AddNamedItem(pActiveScript, szSession, SCRIPTITEM_GLOBALMEMBERS|SCRIPTITEM_ISVISIBLE);
+ hr = IActiveScript_AddNamedItem(pActiveScript, L"Session", SCRIPTITEM_GLOBALMEMBERS|SCRIPTITEM_ISVISIBLE);
if (FAILED(hr)) goto done;
hr = IActiveScriptParse_ParseScriptText(pActiveScriptParse, script, NULL, NULL, NULL, 0, 0, 0L, NULL, NULL);
diff --git a/dlls/msi/select.c b/dlls/msi/select.c
index 3c643f37239..d5a8e1fde23 100644
--- a/dlls/msi/select.c
+++ b/dlls/msi/select.c
@@ -236,10 +236,10 @@ static UINT SELECT_get_column_info( struct tagMSIVIEW *view, UINT n, LPCWSTR *na
n = sv->cols[ n - 1 ];
if( !n )
{
- if (name) *name = szEmpty;
+ if (name) *name = L"";
if (type) *type = MSITYPE_UNKNOWN | MSITYPE_VALID;
if (temporary) *temporary = FALSE;
- if (table_name) *table_name = szEmpty;
+ if (table_name) *table_name = L"";
return ERROR_SUCCESS;
}
return sv->table->ops->get_column_info( sv->table, n, name,
@@ -404,7 +404,7 @@ static UINT SELECT_AddColumn( MSISELECTVIEW *sv, LPCWSTR name,
}
sv->cols[sv->num_cols] = n;
- TRACE("Translating column %s from %d -> %d\n",
+ TRACE("Translating column %s from %d -> %d\n",
debugstr_w( name ), sv->num_cols, n);
sv->num_cols++;
@@ -433,7 +433,7 @@ UINT SELECT_CreateView( MSIDATABASE *db, MSIVIEW **view, MSIVIEW *table,
sv = msi_alloc_zero( FIELD_OFFSET( MSISELECTVIEW, cols[count] ));
if( !sv )
return ERROR_FUNCTION_FAILED;
-
+
/* fill the structure */
sv->view.ops = &select_ops;
sv->db = db;
diff --git a/dlls/msi/source.c b/dlls/msi/source.c
index 89c04d9f7dd..b4b3b54fe35 100644
--- a/dlls/msi/source.c
+++ b/dlls/msi/source.c
@@ -53,7 +53,7 @@ typedef struct tagMediaInfo
static UINT OpenSourceKey(LPCWSTR szProduct, HKEY* key, DWORD dwOptions,
MSIINSTALLCONTEXT context, BOOL create)
{
- HKEY rootkey = 0;
+ HKEY rootkey = 0;
UINT rc = ERROR_FUNCTION_FAILED;
if (context == MSIINSTALLCONTEXT_USERUNMANAGED)
@@ -90,10 +90,10 @@ static UINT OpenSourceKey(LPCWSTR szProduct, HKEY* key, DWORD dwOptions,
}
if (create)
- rc = RegCreateKeyW(rootkey, szSourceList, key);
+ rc = RegCreateKeyW(rootkey, L"SourceList", key);
else
{
- rc = RegOpenKeyW(rootkey,szSourceList, key);
+ rc = RegOpenKeyW(rootkey, L"SourceList", key);
if (rc != ERROR_SUCCESS)
rc = ERROR_BAD_CONFIGURATION;
}
@@ -105,12 +105,11 @@ static UINT OpenSourceKey(LPCWSTR szProduct, HKEY* key, DWORD dwOptions,
static UINT OpenMediaSubkey(HKEY rootkey, HKEY *key, BOOL create)
{
UINT rc;
- static const WCHAR media[] = {'M','e','d','i','a',0};
if (create)
- rc = RegCreateKeyW(rootkey, media, key);
+ rc = RegCreateKeyW(rootkey, L"Media", key);
else
- rc = RegOpenKeyW(rootkey,media, key);
+ rc = RegOpenKeyW(rootkey, L"Media", key);
return rc;
}
@@ -118,12 +117,11 @@ static UINT OpenMediaSubkey(HKEY rootkey, HKEY *key, BOOL create)
static UINT OpenNetworkSubkey(HKEY rootkey, HKEY *key, BOOL create)
{
UINT rc;
- static const WCHAR net[] = {'N','e','t',0};
if (create)
- rc = RegCreateKeyW(rootkey, net, key);
+ rc = RegCreateKeyW(rootkey, L"Net", key);
else
- rc = RegOpenKeyW(rootkey, net, key);
+ rc = RegOpenKeyW(rootkey, L"Net", key);
return rc;
}
@@ -131,12 +129,11 @@ static UINT OpenNetworkSubkey(HKEY rootkey, HKEY *key, BOOL create)
static UINT OpenURLSubkey(HKEY rootkey, HKEY *key, BOOL create)
{
UINT rc;
- static const WCHAR URL[] = {'U','R','L',0};
if (create)
- rc = RegCreateKeyW(rootkey, URL, key);
+ rc = RegCreateKeyW(rootkey, L"URL", key);
else
- rc = RegOpenKeyW(rootkey, URL, key);
+ rc = RegOpenKeyW(rootkey, L"URL", key);
return rc;
}
@@ -208,7 +205,6 @@ UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR szProductCodeOrPatchCode,
LPWSTR szVolumeLabel, LPDWORD pcchVolumeLabel,
LPWSTR szDiskPrompt, LPDWORD pcchDiskPrompt)
{
- static const WCHAR fmt[] = {'#','%','d',0};
WCHAR squashed_pc[SQUASHED_GUID_SIZE], convert[11];
WCHAR *value = NULL, *data = NULL, *ptr, *ptr2;
HKEY source, media;
@@ -285,7 +281,7 @@ UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR szProductCodeOrPatchCode,
{
if (type == REG_DWORD)
{
- swprintf(convert, ARRAY_SIZE(convert), fmt, *data);
+ swprintf(convert, ARRAY_SIZE(convert), L"#%d", *data);
size = lstrlenW(convert);
ptr2 = convert;
}
@@ -307,7 +303,7 @@ UINT WINAPI MsiSourceListEnumMediaDisksW(LPCWSTR szProductCodeOrPatchCode,
if (type == REG_DWORD)
{
- swprintf(convert, ARRAY_SIZE(convert), fmt, *ptr);
+ swprintf(convert, ARRAY_SIZE(convert), L"#%d", *ptr);
size = lstrlenW(convert);
ptr = convert;
}
@@ -412,7 +408,6 @@ UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR szProductCodeOrPatch, LPCWSTR szUs
DWORD dwOptions, DWORD dwIndex,
LPWSTR szSource, LPDWORD pcchSource)
{
- static const WCHAR format[] = {'%','d',0};
WCHAR squashed_pc[SQUASHED_GUID_SIZE], name[32];
HKEY source = NULL, subkey = NULL;
LONG res;
@@ -458,7 +453,7 @@ UINT WINAPI MsiSourceListEnumSourcesW(LPCWSTR szProductCodeOrPatch, LPCWSTR szUs
goto done;
}
- swprintf(name, ARRAY_SIZE(name), format, dwIndex + 1);
+ swprintf(name, ARRAY_SIZE(name), L"%d", dwIndex + 1);
res = RegQueryValueExW(subkey, name, 0, 0, (LPBYTE)szSource, pcchSource);
if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA)
@@ -536,10 +531,9 @@ done:
*/
UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
MSIINSTALLCONTEXT dwContext, DWORD dwOptions,
- LPCWSTR szProperty, LPWSTR szValue,
- LPDWORD pcchValue)
+ LPCWSTR szProperty, LPWSTR szValue,
+ LPDWORD pcchValue)
{
- static const WCHAR mediapack[] = {'M','e','d','i','a','P','a','c','k','a','g','e',0};
WCHAR *source, *ptr, squashed_pc[SQUASHED_GUID_SIZE];
HKEY sourcekey, media;
DWORD size;
@@ -579,7 +573,7 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
}
if (!wcscmp( szProperty, INSTALLPROPERTY_MEDIAPACKAGEPATHW ))
- szProperty = mediapack;
+ szProperty = L"MediaPackage";
RegQueryValueExW(media, szProperty, 0, 0, (LPBYTE)szValue, pcchValue);
RegCloseKey(media);
@@ -591,7 +585,7 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
0, 0, NULL, &size);
if (rc != ERROR_SUCCESS)
{
- static WCHAR szEmpty[1] = { '\0' };
+ static WCHAR szEmpty[] = {0};
rc = ERROR_SUCCESS;
source = NULL;
ptr = szEmpty;
@@ -709,8 +703,6 @@ UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid,
UINT r;
int index = 1;
- static const WCHAR format[] = {'%','c',';','%','i',';','%','s',0};
-
if (options & MSISOURCETYPE_NETWORK)
typechar = 'n';
else if (options & MSISOURCETYPE_URL)
@@ -736,7 +728,7 @@ UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid,
return r;
}
- size = lstrlenW(format) + lstrlenW(value) + 7;
+ size = lstrlenW(L"%c;%d;%s") + lstrlenW(value) + 7;
buffer = msi_alloc(size * sizeof(WCHAR));
if (!buffer)
return ERROR_OUTOFMEMORY;
@@ -748,7 +740,7 @@ UINT msi_set_last_used_source(LPCWSTR product, LPCWSTR usersid,
return r;
}
- swprintf(buffer, size, format, typechar, index, value);
+ swprintf(buffer, size, L"%c;%d;%s", typechar, index, value);
size = (lstrlenW(buffer) + 1) * sizeof(WCHAR);
r = RegSetValueExW(source, INSTALLPROPERTY_LASTUSEDSOURCEW, 0,
@@ -766,7 +758,6 @@ UINT WINAPI MsiSourceListSetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
MSIINSTALLCONTEXT dwContext, DWORD dwOptions,
LPCWSTR szProperty, LPCWSTR szValue)
{
- static const WCHAR media_package[] = {'M','e','d','i','a','P','a','c','k','a','g','e',0};
WCHAR squashed_pc[SQUASHED_GUID_SIZE];
HKEY sourcekey, media;
LPCWSTR property;
@@ -795,7 +786,7 @@ UINT WINAPI MsiSourceListSetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
property = szProperty;
if (!wcscmp( szProperty, INSTALLPROPERTY_MEDIAPACKAGEPATHW ))
- property = media_package;
+ property = L"MediaPackage";
rc = OpenSourceKey(szProduct, &sourcekey, MSICODE_PRODUCT, dwContext, FALSE);
if (rc != ERROR_SUCCESS)
@@ -896,7 +887,7 @@ UINT WINAPI MsiSourceListAddSourceW( LPCWSTR szProduct, LPCWSTR szUserName,
RegCloseKey(hkey);
}
- ret = MsiSourceListAddSourceExW(szProduct, sidstr,
+ ret = MsiSourceListAddSourceExW(szProduct, sidstr,
context, MSISOURCETYPE_NETWORK, szSource, 0);
if (sidstr)
@@ -968,7 +959,6 @@ static void add_source_to_list(struct list *sourcelist, media_info *info,
{
media_info *iter;
BOOL found = FALSE;
- static const WCHAR fmt[] = {'%','i',0};
if (index) *index = 0;
@@ -988,7 +978,7 @@ static void add_source_to_list(struct list *sourcelist, media_info *info,
/* update the rest of the list */
if (found)
- swprintf(iter->szIndex, ARRAY_SIZE(iter->szIndex), fmt, ++iter->index);
+ swprintf(iter->szIndex, ARRAY_SIZE(iter->szIndex), L"%d", ++iter->index);
else if (index)
(*index)++;
}
@@ -1052,10 +1042,9 @@ error:
* MsiSourceListAddSourceExW (MSI.@)
*/
UINT WINAPI MsiSourceListAddSourceExW( LPCWSTR szProduct, LPCWSTR szUserSid,
- MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szSource,
+ MSIINSTALLCONTEXT dwContext, DWORD dwOptions, LPCWSTR szSource,
DWORD dwIndex)
{
- static const WCHAR fmt[] = {'%','i',0};
HKEY sourcekey, typekey;
UINT rc;
struct list sourcelist;
@@ -1108,7 +1097,7 @@ UINT WINAPI MsiSourceListAddSourceExW( LPCWSTR szProduct, LPCWSTR szUserSid,
return rc;
}
- postfix = (dwOptions & MSISOURCETYPE_NETWORK) ? szBackSlash : szForwardSlash;
+ postfix = (dwOptions & MSISOURCETYPE_NETWORK) ? L"\\" : L"/";
if (szSource[lstrlenW(szSource) - 1] == *postfix)
source = strdupW(szSource);
else
@@ -1128,18 +1117,18 @@ UINT WINAPI MsiSourceListAddSourceExW( LPCWSTR szProduct, LPCWSTR szUserSid,
if (count == 0)
{
- rc = RegSetValueExW(typekey, szOne, 0, REG_EXPAND_SZ, (LPBYTE)source, size);
+ rc = RegSetValueExW(typekey, L"1", 0, REG_EXPAND_SZ, (LPBYTE)source, size);
goto done;
}
else if (dwIndex > count || dwIndex == 0)
{
- swprintf(name, ARRAY_SIZE(name), fmt, count + 1);
+ swprintf(name, ARRAY_SIZE(name), L"%d", count + 1);
rc = RegSetValueExW(typekey, name, 0, REG_EXPAND_SZ, (LPBYTE)source, size);
goto done;
}
else
{
- swprintf(name, ARRAY_SIZE(name), fmt, dwIndex);
+ swprintf(name, ARRAY_SIZE(name), L"%d", dwIndex);
info = msi_alloc(sizeof(media_info));
if (!info)
{
@@ -1205,11 +1194,10 @@ UINT WINAPI MsiSourceListAddMediaDiskA(LPCSTR szProduct, LPCSTR szUserSid,
/******************************************************************
* MsiSourceListAddMediaDiskW (MSI.@)
*/
-UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
- MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId,
+UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
+ MSIINSTALLCONTEXT dwContext, DWORD dwOptions, DWORD dwDiskId,
LPCWSTR szVolumeLabel, LPCWSTR szDiskPrompt)
{
- static const WCHAR fmt[] = {'%','i',0};
HKEY sourcekey, mediakey;
UINT rc;
WCHAR *buffer, squashed_pc[SQUASHED_GUID_SIZE], szIndex[10];
@@ -1243,7 +1231,7 @@ UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
OpenMediaSubkey(sourcekey, &mediakey, TRUE);
- swprintf(szIndex, ARRAY_SIZE(szIndex), fmt, dwDiskId);
+ swprintf(szIndex, ARRAY_SIZE(szIndex), L"%d", dwDiskId);
size = 2;
if (szVolumeLabel) size += lstrlenW(szVolumeLabel);
@@ -1254,7 +1242,7 @@ UINT WINAPI MsiSourceListAddMediaDiskW(LPCWSTR szProduct, LPCWSTR szUserSid,
*buffer = '\0';
if (szVolumeLabel) lstrcpyW(buffer, szVolumeLabel);
- lstrcatW(buffer, szSemiColon);
+ lstrcatW(buffer, L";");
if (szDiskPrompt) lstrcatW(buffer, szDiskPrompt);
RegSetValueExW(mediakey, szIndex, 0, REG_SZ, (LPBYTE)buffer, size);
diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y
index 7bdace72981..5b5c8bd7f8e 100644
--- a/dlls/msi/sql.y
+++ b/dlls/msi/sql.y
@@ -740,7 +740,6 @@ number:
static LPWSTR parser_add_table( void *info, LPCWSTR list, LPCWSTR table )
{
- static const WCHAR space[] = {' ',0};
DWORD len = lstrlenW( list ) + lstrlenW( table ) + 2;
LPWSTR ret;
@@ -748,7 +747,7 @@ static LPWSTR parser_add_table( void *info, LPCWSTR list, LPCWSTR table )
if( ret )
{
lstrcpyW( ret, list );
- lstrcatW( ret, space );
+ lstrcatW( ret, L" " );
lstrcatW( ret, table );
}
return ret;
diff --git a/dlls/msi/storages.c b/dlls/msi/storages.c
index 521b6e89e83..336b40a3ae1 100644
--- a/dlls/msi/storages.c
+++ b/dlls/msi/storages.c
@@ -316,16 +316,16 @@ static UINT STORAGES_get_column_info( struct tagMSIVIEW *view, UINT n, LPCWSTR *
switch (n)
{
case 1:
- if (name) *name = szName;
+ if (name) *name = L"Name";
if (type) *type = MSITYPE_STRING | MSITYPE_VALID | MAX_STORAGES_NAME_LEN;
break;
case 2:
- if (name) *name = szData;
+ if (name) *name = L"Data";
if (type) *type = MSITYPE_STRING | MSITYPE_VALID | MSITYPE_NULLABLE;
break;
}
- if (table_name) *table_name = szStorages;
+ if (table_name) *table_name = L"_Storages";
if (temporary) *temporary = FALSE;
return ERROR_SUCCESS;
}
diff --git a/dlls/msi/streams.c b/dlls/msi/streams.c
index 6f8a436b5e4..1ef99c2ab05 100644
--- a/dlls/msi/streams.c
+++ b/dlls/msi/streams.c
@@ -278,16 +278,16 @@ static UINT STREAMS_get_column_info( struct tagMSIVIEW *view, UINT n, LPCWSTR *n
switch (n)
{
case 1:
- if (name) *name = szName;
+ if (name) *name = L"Name";
if (type) *type = MSITYPE_STRING | MSITYPE_VALID | MAX_STREAM_NAME_LEN;
break;
case 2:
- if (name) *name = szData;
+ if (name) *name = L"Data";
if (type) *type = MSITYPE_STRING | MSITYPE_VALID | MSITYPE_NULLABLE;
break;
}
- if (table_name) *table_name = szStreams;
+ if (table_name) *table_name = L"_Streams";
if (temporary) *temporary = FALSE;
return ERROR_SUCCESS;
}
@@ -614,7 +614,7 @@ UINT msi_commit_streams( MSIDATABASE *db )
for (i = 0; i < db->num_streams; i++)
{
name = msi_string_lookup( db->strings, db->streams[i].str_index, NULL );
- if (!wcscmp( name, szSumInfo )) continue;
+ if (!wcscmp( name, L"\5SummaryInformation" )) continue;
if (!(encname = encode_streamname( FALSE, name ))) return ERROR_OUTOFMEMORY;
TRACE("saving stream %s as %s\n", debugstr_w(name), debugstr_w(encname));
diff --git a/dlls/msi/string.c b/dlls/msi/string.c
index 5c6432ba1ed..0e250ff4527 100644
--- a/dlls/msi/string.c
+++ b/dlls/msi/string.c
@@ -77,7 +77,7 @@ static string_table *init_stringtable( int entries, UINT codepage )
st = msi_alloc( sizeof (string_table) );
if( !st )
- return NULL;
+ return NULL;
if( entries < 1 )
entries = 1;
@@ -85,7 +85,7 @@ static string_table *init_stringtable( int entries, UINT codepage )
if( !st->strings )
{
msi_free( st );
- return NULL;
+ return NULL;
}
st->sorted = msi_alloc( sizeof (UINT) * entries );
@@ -347,7 +347,7 @@ const WCHAR *msi_string_lookup( const string_table *st, UINT id, int *len )
if( id == 0 )
{
if (len) *len = 0;
- return szEmpty;
+ return L"";
}
if( id >= st->maxcount )
return NULL;
@@ -465,12 +465,12 @@ HRESULT msi_init_string_table( IStorage *stg )
UINT ret;
/* create the StringPool stream... add the zero string to it*/
- ret = write_stream_data(stg, szStringPool, zero, sizeof zero, TRUE);
+ ret = write_stream_data(stg, L"_StringPool", zero, sizeof zero, TRUE);
if (ret != ERROR_SUCCESS)
return E_FAIL;
/* create the StringData stream... make it zero length */
- ret = write_stream_data(stg, szStringData, NULL, 0, TRUE);
+ ret = write_stream_data(stg, L"_StringData", NULL, 0, TRUE);
if (ret != ERROR_SUCCESS)
return E_FAIL;
@@ -485,10 +485,10 @@ string_table *msi_load_string_table( IStorage *stg, UINT *bytes_per_strref )
UINT r, datasize = 0, poolsize = 0, codepage;
DWORD i, count, offset, len, n, refs;
- r = read_stream_data( stg, szStringPool, TRUE, (BYTE **)&pool, &poolsize );
+ r = read_stream_data( stg, L"_StringPool", TRUE, (BYTE **)&pool, &poolsize );
if( r != ERROR_SUCCESS)
goto end;
- r = read_stream_data( stg, szStringData, TRUE, (BYTE **)&data, &datasize );
+ r = read_stream_data( stg, L"_StringData", TRUE, (BYTE **)&data, &datasize );
if( r != ERROR_SUCCESS)
goto end;
@@ -652,11 +652,11 @@ UINT msi_save_string_table( const string_table *st, IStorage *storage, UINT *byt
}
/* write the streams */
- r = write_stream_data( storage, szStringData, data, datasize, TRUE );
+ r = write_stream_data( storage, L"_StringData", data, datasize, TRUE );
TRACE("Wrote StringData r=%08x\n", r);
if( r )
goto err;
- r = write_stream_data( storage, szStringPool, pool, poolsize, TRUE );
+ r = write_stream_data( storage, L"_StringPool", pool, poolsize, TRUE );
TRACE("Wrote StringPool r=%08x\n", r);
if( r )
goto err;
diff --git a/dlls/msi/suminfo.c b/dlls/msi/suminfo.c
index 94983cb86d9..19317713a3c 100644
--- a/dlls/msi/suminfo.c
+++ b/dlls/msi/suminfo.c
@@ -44,7 +44,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi);
#include "pshpack1.h"
-typedef struct {
+typedef struct {
WORD wByteOrder;
WORD wFormat;
DWORD dwOSVer;
@@ -52,20 +52,20 @@ typedef struct {
DWORD reserved;
} PROPERTYSETHEADER;
-typedef struct {
+typedef struct {
FMTID fmtid;
DWORD dwOffset;
} FORMATIDOFFSET;
-typedef struct {
+typedef struct {
DWORD cbSection;
DWORD cProperties;
-} PROPERTYSECTIONHEADER;
-
-typedef struct {
+} PROPERTYSECTIONHEADER;
+
+typedef struct {
DWORD propid;
DWORD dwOffset;
-} PROPERTYIDOFFSET;
+} PROPERTYIDOFFSET;
typedef struct {
DWORD type;
@@ -79,7 +79,7 @@ typedef struct {
} str;
} u;
} PROPERTY_DATA;
-
+
#include "poppack.h"
static HRESULT (WINAPI *pPropVariantChangeType)
@@ -452,7 +452,7 @@ UINT msi_get_suminfo( IStorage *stg, UINT uiUpdateCount, MSISUMMARYINFO **ret )
if (!(si = create_suminfo( stg, uiUpdateCount ))) return ERROR_OUTOFMEMORY;
- hr = IStorage_OpenStream( si->storage, szSumInfo, 0, STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &stm );
+ hr = IStorage_OpenStream( si->storage, L"\5SummaryInformation", 0, STGM_READ|STGM_SHARE_EXCLUSIVE, 0, &stm );
if (FAILED( hr ))
{
msiobj_release( &si->hdr );
@@ -479,7 +479,7 @@ UINT msi_get_db_suminfo( MSIDATABASE *db, UINT uiUpdateCount, MSISUMMARYINFO **r
if (!(si = create_suminfo( db->storage, uiUpdateCount ))) return ERROR_OUTOFMEMORY;
- r = msi_get_stream( db, szSumInfo, &stm );
+ r = msi_get_stream( db, L"\5SummaryInformation", &stm );
if (r != ERROR_SUCCESS)
{
msiobj_release( &si->hdr );
@@ -498,7 +498,7 @@ UINT msi_get_db_suminfo( MSIDATABASE *db, UINT uiUpdateCount, MSISUMMARYINFO **r
return ERROR_SUCCESS;
}
-UINT WINAPI MsiGetSummaryInformationW( MSIHANDLE hDatabase,
+UINT WINAPI MsiGetSummaryInformationW( MSIHANDLE hDatabase,
LPCWSTR szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle )
{
MSISUMMARYINFO *si;
@@ -569,7 +569,7 @@ UINT WINAPI MsiGetSummaryInformationW( MSIHANDLE hDatabase,
return ret;
}
-UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase,
+UINT WINAPI MsiGetSummaryInformationA(MSIHANDLE hDatabase,
LPCSTR szDatabase, UINT uiUpdateCount, MSIHANDLE *pHandle)
{
LPWSTR szwDatabase = NULL;
@@ -965,7 +965,7 @@ static UINT suminfo_persist( MSISUMMARYINFO *si )
HRESULT r;
grfMode = STGM_CREATE | STGM_READWRITE | STGM_SHARE_EXCLUSIVE;
- r = IStorage_CreateStream( si->storage, szSumInfo, grfMode, 0, 0, &stm );
+ r = IStorage_CreateStream( si->storage, L"\5SummaryInformation", grfMode, 0, 0, &stm );
if( SUCCEEDED(r) )
{
ret = save_summary_info( si, stm );
@@ -1244,7 +1244,6 @@ UINT WINAPI MsiCreateTransformSummaryInfoW( MSIHANDLE db, MSIHANDLE db_ref, LPCW
UINT msi_load_suminfo_properties( MSIPACKAGE *package )
{
- static const WCHAR packagecodeW[] = {'P','a','c','k','a','g','e','C','o','d','e',0};
MSISUMMARYINFO *si;
WCHAR *package_code;
UINT r, len;
@@ -1285,7 +1284,7 @@ UINT msi_load_suminfo_properties( MSIPACKAGE *package )
return r;
}
- r = msi_set_property( package->db, packagecodeW, package_code, len );
+ r = msi_set_property( package->db, L"PackageCode", package_code, len );
msi_free( package_code );
count = 0;
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index e9d6e8804e7..bfddd6125e9 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -71,21 +71,15 @@ struct tagMSITABLE
};
/* information for default tables */
-static const WCHAR szTables[] = {'_','T','a','b','l','e','s',0};
-static const WCHAR szTable[] = {'T','a','b','l','e',0};
-static const WCHAR szColumns[] = {'_','C','o','l','u','m','n','s',0};
-static const WCHAR szNumber[] = {'N','u','m','b','e','r',0};
-static const WCHAR szType[] = {'T','y','p','e',0};
-
static const MSICOLUMNINFO _Columns_cols[4] = {
- { szColumns, 1, szTable, MSITYPE_VALID | MSITYPE_STRING | MSITYPE_KEY | 64, 0, NULL },
- { szColumns, 2, szNumber, MSITYPE_VALID | MSITYPE_KEY | 2, 2, NULL },
- { szColumns, 3, szName, MSITYPE_VALID | MSITYPE_STRING | 64, 4, NULL },
- { szColumns, 4, szType, MSITYPE_VALID | 2, 6, NULL },
+ { L"_Columns", 1, L"Table", MSITYPE_VALID | MSITYPE_STRING | MSITYPE_KEY | 64, 0, NULL },
+ { L"_Columns", 2, L"Number", MSITYPE_VALID | MSITYPE_KEY | 2, 2, NULL },
+ { L"_Columns", 3, L"Name", MSITYPE_VALID | MSITYPE_STRING | 64, 4, NULL },
+ { L"_Columns", 4, L"Type", MSITYPE_VALID | 2, 6, NULL },
};
static const MSICOLUMNINFO _Tables_cols[1] = {
- { szTables, 1, szName, MSITYPE_VALID | MSITYPE_STRING | MSITYPE_KEY | 64, 0, NULL },
+ { L"_Tables", 1, L"Name", MSITYPE_VALID | MSITYPE_STRING | MSITYPE_KEY | 64, 0, NULL },
};
#define MAX_STREAM_NAME 0x1f
@@ -138,7 +132,7 @@ LPWSTR encode_streamname(BOOL bTable, LPCWSTR in)
*p++ = 0x4840;
count --;
}
- while( count -- )
+ while( count -- )
{
ch = *in++;
if( !ch )
@@ -251,7 +245,7 @@ UINT read_stream_data( IStorage *stg, LPCWSTR stname, BOOL table,
TRACE("%s -> %s\n",debugstr_w(stname),debugstr_w(encname));
- r = IStorage_OpenStream(stg, encname, NULL,
+ r = IStorage_OpenStream(stg, encname, NULL,
STGM_READ | STGM_SHARE_EXCLUSIVE, 0, &stm);
msi_free( encname );
if( FAILED( r ) )
@@ -272,7 +266,7 @@ UINT read_stream_data( IStorage *stg, LPCWSTR stname, BOOL table,
WARN("Too big!\n");
goto end;
}
-
+
sz = stat.cbSize.QuadPart;
data = msi_alloc( sz );
if( !data )
@@ -281,7 +275,7 @@ UINT read_stream_data( IStorage *stg, LPCWSTR stname, BOOL table,
ret = ERROR_NOT_ENOUGH_MEMORY;
goto end;
}
-
+
r = IStream_Read(stm, data, sz, &count );
if( FAILED( r ) || ( count != sz ) )
{
@@ -312,7 +306,7 @@ UINT write_stream_data( IStorage *stg, LPCWSTR stname,
LPWSTR encname;
encname = encode_streamname(bTable, stname );
- r = IStorage_OpenStream( stg, encname, NULL,
+ r = IStorage_OpenStream( stg, encname, NULL,
STGM_WRITE | STGM_SHARE_EXCLUSIVE, 0, &stm);
if( FAILED(r) )
{
@@ -520,12 +514,12 @@ static UINT get_defaulttablecolumns( MSIDATABASE *db, LPCWSTR name, MSICOLUMNINF
TRACE("%s\n", debugstr_w(name));
- if (!wcscmp( name, szTables ))
+ if (!wcscmp( name, L"_Tables" ))
{
p = _Tables_cols;
n = 1;
}
- else if (!wcscmp( name, szColumns ))
+ else if (!wcscmp( name, L"_Columns" ))
{
p = _Columns_cols;
n = 4;
@@ -603,7 +597,7 @@ static UINT get_table( MSIDATABASE *db, LPCWSTR name, MSITABLE **table_ret )
table->persistent = MSICONDITION_TRUE;
lstrcpyW( table->name, name );
- if (!wcscmp( name, szTables ) || !wcscmp( name, szColumns ))
+ if (!wcscmp( name, L"_Tables" ) || !wcscmp( name, L"_Columns" ))
table->persistent = MSICONDITION_NONE;
r = table_get_column_info( db, name, &table->colinfo, &table->col_count );
@@ -645,7 +639,7 @@ static UINT get_tablecolumns( MSIDATABASE *db, LPCWSTR szTableName, MSICOLUMNINF
if (r == ERROR_SUCCESS && *sz)
return r;
- r = get_table( db, szColumns, &table );
+ r = get_table( db, L"_Columns", &table );
if (r != ERROR_SUCCESS)
{
ERR("couldn't load _Columns table\n");
@@ -766,7 +760,7 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
}
table_calc_column_offsets( db, table->colinfo, table->col_count);
- r = TABLE_CreateView( db, szTables, &tv );
+ r = TABLE_CreateView( db, L"_Tables", &tv );
TRACE("CreateView returned %x\n", r);
if( r )
{
@@ -801,7 +795,7 @@ UINT msi_create_table( MSIDATABASE *db, LPCWSTR name, column_info *col_info,
if( persistent != MSICONDITION_FALSE )
{
/* add each column to the _Columns table */
- r = TABLE_CreateView( db, szColumns, &tv );
+ r = TABLE_CreateView( db, L"_Columns", &tv );
if( r )
goto err;
@@ -969,8 +963,8 @@ BOOL TABLE_Exists( MSIDATABASE *db, LPCWSTR name )
UINT r, table_id, i;
MSITABLE *table;
- if( !wcscmp( name, szTables ) || !wcscmp( name, szColumns ) ||
- !wcscmp( name, szStreams ) || !wcscmp( name, szStorages ) )
+ if( !wcscmp( name, L"_Tables" ) || !wcscmp( name, L"_Columns" ) ||
+ !wcscmp( name, L"_Streams" ) || !wcscmp( name, L"_Storages" ) )
return TRUE;
r = msi_string2id( db->strings, name, -1, &table_id );
@@ -980,10 +974,10 @@ BOOL TABLE_Exists( MSIDATABASE *db, LPCWSTR name )
return FALSE;
}
- r = get_table( db, szTables, &table );
+ r = get_table( db, L"_Tables", &table );
if( r != ERROR_SUCCESS )
{
- ERR("table %s not available\n", debugstr_w(szTables));
+ ERR("table _Tables not available\n");
return FALSE;
}
@@ -1088,16 +1082,15 @@ static UINT get_stream_name( const MSITABLEVIEW *tv, UINT row, WCHAR **pstname )
}
else
{
- static const WCHAR fmt[] = { '%','d',0 };
UINT n = bytes_per_column( tv->db, &tv->columns[i], LONG_STR_BYTES );
switch( n )
{
case 2:
- swprintf( number, ARRAY_SIZE(number), fmt, ival-0x8000 );
+ swprintf( number, ARRAY_SIZE(number), L"%d", ival-0x8000 );
break;
case 4:
- swprintf( number, ARRAY_SIZE(number), fmt, ival^0x80000000 );
+ swprintf( number, ARRAY_SIZE(number), L"%d", ival^0x80000000 );
break;
default:
ERR( "oops - unknown column width %d\n", n );
@@ -1107,7 +1100,7 @@ static UINT get_stream_name( const MSITABLEVIEW *tv, UINT row, WCHAR **pstname )
sval = number;
}
- len += lstrlenW( szDot ) + lstrlenW( sval );
+ len += lstrlenW( L"." ) + lstrlenW( sval );
p = msi_realloc ( stname, len*sizeof(WCHAR) );
if ( !p )
{
@@ -1116,7 +1109,7 @@ static UINT get_stream_name( const MSITABLEVIEW *tv, UINT row, WCHAR **pstname )
}
stname = p;
- lstrcatW( stname, szDot );
+ lstrcatW( stname, L"." );
lstrcatW( stname, sval );
}
else
@@ -1295,15 +1288,6 @@ static UINT TABLE_get_row( struct tagMSIVIEW *view, UINT row, MSIRECORD **rec )
static UINT add_stream( MSIDATABASE *db, const WCHAR *name, IStream *data )
{
- static const WCHAR insert[] = {
- 'I','N','S','E','R','T',' ','I','N','T','O',' ',
- '`','_','S','t','r','e','a','m','s','`',' ',
- '(','`','N','a','m','e','`',',','`','D','a','t','a','`',')',' ',
- 'V','A','L','U','E','S',' ','(','?',',','?',')',0};
- static const WCHAR update[] = {
- 'U','P','D','A','T','E',' ','`','_','S','t','r','e','a','m','s','`',' ',
- 'S','E','T',' ','`','D','a','t','a','`',' ','=',' ','?',' ',
- 'W','H','E','R','E',' ','`','N','a','m','e','`',' ','=',' ','?',0};
MSIQUERY *query;
MSIRECORD *rec;
UINT r;
@@ -1321,7 +1305,7 @@ static UINT add_stream( MSIDATABASE *db, const WCHAR *name, IStream *data )
if (r != ERROR_SUCCESS)
goto done;
- r = MSI_DatabaseOpenViewW( db, insert, &query );
+ r = MSI_DatabaseOpenViewW( db, L"INSERT INTO `_Streams` (`Name`,`Data`) VALUES (?,?)", &query );
if (r != ERROR_SUCCESS)
goto done;
@@ -1342,7 +1326,7 @@ static UINT add_stream( MSIDATABASE *db, const WCHAR *name, IStream *data )
if (r != ERROR_SUCCESS)
goto done;
- r = MSI_DatabaseOpenViewW( db, update, &query );
+ r = MSI_DatabaseOpenViewW( db, L"UPDATE `_Streams` SET `Data` = ? WHERE `Name` = ?", &query );
if (r != ERROR_SUCCESS)
goto done;
@@ -1560,7 +1544,7 @@ static UINT TABLE_execute( struct tagMSIVIEW *view, MSIRECORD *record )
static UINT TABLE_close( struct tagMSIVIEW *view )
{
TRACE("%p\n", view );
-
+
return ERROR_SUCCESS;
}
@@ -1977,7 +1961,7 @@ static UINT TABLE_remove_column(struct tagMSIVIEW *view, UINT number)
MSI_RecordSetStringW(rec, 1, tv->name);
MSI_RecordSetInteger(rec, 2, number);
- r = TABLE_CreateView(tv->db, szColumns, &columns);
+ r = TABLE_CreateView(tv->db, L"_Columns", &columns);
if (r != ERROR_SUCCESS)
{
msiobj_release(&rec->hdr);
@@ -2110,7 +2094,7 @@ static UINT TABLE_add_column(struct tagMSIVIEW *view, LPCWSTR column,
MSI_RecordSetStringW(rec, 3, column);
MSI_RecordSetInteger(rec, 4, type);
- r = TABLE_CreateView(tv->db, szColumns, &columns);
+ r = TABLE_CreateView(tv->db, L"_Columns", &columns);
if (r != ERROR_SUCCESS)
{
tv->table->col_count--;
@@ -2155,7 +2139,7 @@ static UINT TABLE_drop(struct tagMSIVIEW *view)
MSI_RecordSetStringW(rec, 1, tv->name);
- r = TABLE_CreateView(tv->db, szTables, &tables);
+ r = TABLE_CreateView(tv->db, L"_Tables", &tables);
if (r != ERROR_SUCCESS)
{
msiobj_release(&rec->hdr);
@@ -2210,9 +2194,9 @@ UINT TABLE_CreateView( MSIDATABASE *db, LPCWSTR name, MSIVIEW **view )
TRACE("%p %s %p\n", db, debugstr_w(name), view );
- if ( !wcscmp( name, szStreams ) )
+ if ( !wcscmp( name, L"_Streams" ) )
return STREAMS_CreateView( db, view );
- else if ( !wcscmp( name, szStorages ) )
+ else if ( !wcscmp( name, L"_Storages" ) )
return STORAGES_CreateView( db, view );
sz = FIELD_OFFSET( MSITABLEVIEW, name[lstrlenW( name ) + 1] );
@@ -2345,13 +2329,13 @@ static UINT TransformView_set_row( MSIVIEW *view, UINT row, MSIRECORD *rec, UINT
WCHAR *key;
UINT i, p, r, len, qlen;
- if (!wcscmp( tv->name, szColumns ))
+ if (!wcscmp( tv->name, L"_Columns" ))
{
ERR( "trying to modify existing column\n" );
return ERROR_INSTALL_TRANSFORM_FAILURE;
}
- if (!wcscmp( tv->name, szTables ))
+ if (!wcscmp( tv->name, L"_Tables" ))
{
ERR( "trying to modify existing table\n" );
return ERROR_INSTALL_TRANSFORM_FAILURE;
@@ -2578,10 +2562,10 @@ static UINT TransformView_insert_row( MSIVIEW *view, MSIRECORD *rec, UINT row, B
int len;
UINT r;
- if (!wcscmp(tv->name, szTables))
+ if (!wcscmp(tv->name, L"_Tables"))
return TransformView_create_table( tv, rec );
- if (!wcscmp(tv->name, szColumns))
+ if (!wcscmp(tv->name, L"_Columns"))
return TransformView_add_column( tv, rec );
key = create_key_string( tv, rec );
@@ -2671,13 +2655,13 @@ static UINT TransformView_delete_row( MSIVIEW *view, UINT row )
MSIRECORD *rec;
MSIQUERY *q;
- if (!wcscmp( tv->name, szColumns ))
+ if (!wcscmp( tv->name, L"_Columns" ))
{
ERR("trying to remove column\n");
return ERROR_INSTALL_TRANSFORM_FAILURE;
}
- if (!wcscmp( tv->name, szTables ))
+ if (!wcscmp( tv->name, L"_Tables" ))
return TransformView_drop_table( tv, row );
r = msi_view_get_row( tv->db, view, row, &rec );
@@ -3296,7 +3280,7 @@ static UINT msi_table_load_transform( MSIDATABASE *db, IStorage *stg,
UINT number = MSI_NULL_INTEGER;
UINT row = 0;
- if (!wcscmp( name, szColumns ))
+ if (!wcscmp( name, L"_Columns" ))
{
MSI_RecordGetStringW( rec, 1, table, &sz );
number = MSI_RecordGetInteger( rec, 2 );
@@ -3358,7 +3342,7 @@ static UINT msi_table_load_transform( MSIDATABASE *db, IStorage *stg,
}
if (!(err_cond & MSITRANSFORM_ERROR_VIEWTRANSFORM) &&
- !wcscmp( name, szColumns ))
+ !wcscmp( name, L"_Columns" ))
msi_update_table_columns( db, table );
msiobj_release( &rec->hdr );
@@ -3422,8 +3406,8 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg, int err_cond )
if ( name[0] != 0x4840 )
continue;
- if ( !wcscmp( name+1, szStringPool ) ||
- !wcscmp( name+1, szStringData ) )
+ if ( !wcscmp( name+1, L"_StringPool" ) ||
+ !wcscmp( name+1, L"_StringData" ) )
continue;
transform = msi_alloc_zero( sizeof(TRANSFORMDATA) );
@@ -3434,11 +3418,11 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg, int err_cond )
transform->name = strdupW( name + 1 );
- if ( !wcscmp( transform->name, szTables ) )
+ if ( !wcscmp( transform->name, L"_Tables" ) )
tables = transform;
- else if (!wcscmp( transform->name, szColumns ) )
+ else if (!wcscmp( transform->name, L"_Columns" ) )
columns = transform;
- else if (!wcscmp( transform->name, szProperty ))
+ else if (!wcscmp( transform->name, L"Property" ))
property_update = TRUE;
TRACE("transform contains stream %s\n", debugstr_w(name));
@@ -3462,6 +3446,7 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg, int err_cond )
L"`Table` CHAR(0) NOT NULL TEMPORARY, `Column` CHAR(0) NOT NULL TEMPORARY, "
L"`Row` CHAR(0) TEMPORARY, `Data` CHAR(0) TEMPORARY, `Current` CHAR(0) TEMPORARY "
L"PRIMARY KEY `Table`, `Column`, `Row` ) HOLD";
+
MSIQUERY *query;
UINT r;
@@ -3506,8 +3491,8 @@ UINT msi_table_apply_transform( MSIDATABASE *db, IStorage *stg, int err_cond )
{
transform = LIST_ENTRY( list_head( &transforms ), TRANSFORMDATA, entry );
- if ( wcscmp( transform->name, szColumns ) &&
- wcscmp( transform->name, szTables ) &&
+ if ( wcscmp( transform->name, L"_Columns" ) &&
+ wcscmp( transform->name, L"_Tables" ) &&
ret == ERROR_SUCCESS )
{
ret = msi_table_load_transform( db, stg, strings, transform, bytes_per_strref, err_cond );
diff --git a/dlls/msi/upgrade.c b/dlls/msi/upgrade.c
index 60b5c74f40b..18649fced3d 100644
--- a/dlls/msi/upgrade.c
+++ b/dlls/msi/upgrade.c
@@ -97,13 +97,13 @@ static void append_productcode( MSIPACKAGE *package, const WCHAR *action_prop, c
if (prop)
{
lstrcpyW( newprop, prop );
- lstrcatW( newprop, szSemiColon );
+ lstrcatW( newprop, L";" );
}
else newprop[0] = 0;
lstrcatW( newprop, product );
r = msi_set_property( package->db, action_prop, newprop, -1 );
- if (r == ERROR_SUCCESS && !wcscmp( action_prop, szSourceDir ))
+ if (r == ERROR_SUCCESS && !wcscmp( action_prop, L"SourceDir" ))
msi_reset_source_folders( package );
TRACE( "related product property %s now %s\n", debugstr_w(action_prop), debugstr_w(newprop) );
@@ -210,35 +210,32 @@ static UINT ITERATE_FindRelatedProducts(MSIRECORD *rec, LPVOID param)
}
RegCloseKey(hkey);
msiobj_release( &uirow->hdr);
-
+
return ERROR_SUCCESS;
}
UINT ACTION_FindRelatedProducts(MSIPACKAGE *package)
{
- static const WCHAR query[] = {
- 'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ',
- '`','U','p','g','r','a','d','e','`',0};
MSIQUERY *view;
UINT rc;
- if (msi_get_property_int(package->db, szInstalled, 0))
+ if (msi_get_property_int(package->db, L"Installed", 0))
{
TRACE("Skipping FindRelatedProducts action: product already installed\n");
return ERROR_SUCCESS;
}
- if (msi_action_is_unique(package, szFindRelatedProducts))
+ if (msi_action_is_unique(package, L"FindRelatedProducts"))
{
TRACE("Skipping FindRelatedProducts action: already done in UI sequence\n");
return ERROR_SUCCESS;
}
else
- msi_register_unique_action(package, szFindRelatedProducts);
+ msi_register_unique_action(package, L"FindRelatedProducts");
- rc = MSI_DatabaseOpenViewW(package->db, query, &view);
+ rc = MSI_DatabaseOpenViewW(package->db, L"SELECT * FROM `Upgrade`", &view);
if (rc != ERROR_SUCCESS)
return ERROR_SUCCESS;
-
+
rc = MSI_IterateRecords(view, NULL, ITERATE_FindRelatedProducts, package);
msiobj_release(&view->hdr);
return rc;
diff --git a/dlls/msi/where.c b/dlls/msi/where.c
index 07064f0f980..2a64de8cd9d 100644
--- a/dlls/msi/where.c
+++ b/dlls/msi/where.c
@@ -1235,7 +1235,7 @@ UINT WHERE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR tables,
wv = msi_alloc_zero( sizeof *wv );
if( !wv )
return ERROR_FUNCTION_FAILED;
-
+
/* fill the structure */
wv->view.ops = &where_ops;
msiobj_addref( &db->hdr );
--
2.28.0
1
0
29 Oct '20
1
0
Signed-off-by: Austin English <austinenglish(a)gmail.com>
---
dlls/ddrawex/Makefile.in | 2 ++
dlls/ddrawex/version.rc | 26 ++++++++++++++++++++++++++
2 files changed, 28 insertions(+)
create mode 100644 dlls/ddrawex/version.rc
diff --git a/dlls/ddrawex/Makefile.in b/dlls/ddrawex/Makefile.in
index fc4a50bbab7..056f90a222f 100644
--- a/dlls/ddrawex/Makefile.in
+++ b/dlls/ddrawex/Makefile.in
@@ -9,3 +9,5 @@ C_SRCS = \
surface.c
IDL_SRCS = ddrawex.idl
+
+RC_SRCS = version.rc
diff --git a/dlls/ddrawex/version.rc b/dlls/ddrawex/version.rc
new file mode 100644
index 00000000000..b58c91950ff
--- /dev/null
+++ b/dlls/ddrawex/version.rc
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2020 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define WINE_FILEDESCRIPTION_STR "Wine ddrawex"
+#define WINE_FILENAME_STR "ddrawex.dll"
+#define WINE_FILEVERSION 5,3,0,900
+#define WINE_FILEVERSION_STR "5.3.0.900"
+#define WINE_PRODUCTVERSION 5,3,0,900
+#define WINE_PRODUCTVERSION_STR "5.3.0.900"
+
+#include "wine/wine_common_ver.rc"
--
2.28.0
1
7
Signed-off-by: Austin English <austinenglish(a)gmail.com>
---
configure.ac | 1 +
dlls/d3dpmesh/Makefile.in | 8 +++++++
dlls/d3dpmesh/d3dpmesh.spec | 1 +
dlls/d3dpmesh/d3dpmesh_main.c | 42 +++++++++++++++++++++++++++++++++++
dlls/d3dpmesh/version.rc | 26 ++++++++++++++++++++++
5 files changed, 78 insertions(+)
create mode 100644 dlls/d3dpmesh/Makefile.in
create mode 100644 dlls/d3dpmesh/d3dpmesh.spec
create mode 100644 dlls/d3dpmesh/d3dpmesh_main.c
create mode 100644 dlls/d3dpmesh/version.rc
diff --git a/configure.ac b/configure.ac
index 2f81fd22610..719a338e5ba 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3157,6 +3157,7 @@ WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_47)
WINE_CONFIG_MAKEFILE(dlls/d3dcompiler_47/tests)
WINE_CONFIG_MAKEFILE(dlls/d3dim)
WINE_CONFIG_MAKEFILE(dlls/d3dim700)
+WINE_CONFIG_MAKEFILE(dlls/d3dpmesh)
WINE_CONFIG_MAKEFILE(dlls/d3drm)
WINE_CONFIG_MAKEFILE(dlls/d3drm/tests)
WINE_CONFIG_MAKEFILE(dlls/d3dx10_33)
diff --git a/dlls/d3dpmesh/Makefile.in b/dlls/d3dpmesh/Makefile.in
new file mode 100644
index 00000000000..2a7546832c2
--- /dev/null
+++ b/dlls/d3dpmesh/Makefile.in
@@ -0,0 +1,8 @@
+MODULE = d3dpmesh.dll
+
+EXTRADLLFLAGS = -mno-cygwin
+
+C_SRCS = \
+ d3dpmesh_main.c
+
+RC_SRCS = version.rc
diff --git a/dlls/d3dpmesh/d3dpmesh.spec b/dlls/d3dpmesh/d3dpmesh.spec
new file mode 100644
index 00000000000..d4b9a46bd7a
--- /dev/null
+++ b/dlls/d3dpmesh/d3dpmesh.spec
@@ -0,0 +1 @@
+@ stub CreateD3DRMPMeshVisual
diff --git a/dlls/d3dpmesh/d3dpmesh_main.c b/dlls/d3dpmesh/d3dpmesh_main.c
new file mode 100644
index 00000000000..3d84a693a45
--- /dev/null
+++ b/dlls/d3dpmesh/d3dpmesh_main.c
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2020 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3dpmesh);
+
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
+{
+ TRACE("(%p, %u, %p)\n", instance, reason, reserved);
+
+ switch (reason)
+ {
+ case DLL_WINE_PREATTACH:
+ return FALSE; /* prefer native version */
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls(instance);
+ break;
+ }
+
+ return TRUE;
+}
diff --git a/dlls/d3dpmesh/version.rc b/dlls/d3dpmesh/version.rc
new file mode 100644
index 00000000000..87e601a95a7
--- /dev/null
+++ b/dlls/d3dpmesh/version.rc
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2020 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define WINE_FILEDESCRIPTION_STR "Wine d3dpmesh"
+#define WINE_FILENAME_STR "d3dpmesh.dll"
+#define WINE_FILEVERSION 5,0,2134,1
+#define WINE_FILEVERSION_STR "5.0.2134.1"
+#define WINE_PRODUCTVERSION 5,0,2134,1
+#define WINE_PRODUCTVERSION_STR "5.0.2134.1"
+
+#include "wine/wine_common_ver.rc"
--
2.28.0
1
4
Signed-off-by: Daniel Lehman <dlehman25(a)gmail.com>
---
French Guiana never used DST
---
loader/wine.inf.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
index fba071fe0d8..72b10d354e0 100644
--- a/loader/wine.inf.in
+++ b/loader/wine.inf.in
@@ -3491,7 +3491,7 @@ HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"Dlt",,"SA Eastern D
HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"MUI_Dlt",,"@tzres.dll,-40657"
HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"MUI_Std",,"@tzres.dll,-40656"
HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"Std",,"SA Eastern Standard Time"
-HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"TZI",1,b4,00,00,00,00,00,00,00,c4,ff,ff,ff,00,00,03,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,0a,00,00,00,01,00,00,00,00,00,00,00,00,00
+HKLM,%CurrentVersionNT%\Time Zones\SA Eastern Standard Time,"TZI",1,b4,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
HKLM,%CurrentVersionNT%\Time Zones\SA Pacific Standard Time,"Display",,"America/Bogota"
HKLM,%CurrentVersionNT%\Time Zones\SA Pacific Standard Time,"Dlt",,"SA Pacific Daylight Time"
HKLM,%CurrentVersionNT%\Time Zones\SA Pacific Standard Time,"MUI_Dlt",,"@tzres.dll,-49425"
--
2.17.1
1
0
[PATCH v4 5/5] kernelbase: Reimplement GetVolumeInformation on top of GetVolumeInformationByHandle.
by Erich E. Hoover 28 Oct '20
by Erich E. Hoover 28 Oct '20
28 Oct '20
This patch removes the volume querying information duplication in
kernelbase by re-implementing GetVolumeInformation using
GetVolumeInformationByHandle (itself implemented with
NtQueryVolumeInformationFile).
v4: Reordered (no content change)
v3: No change
v2: Reordered (no content change)
Best,
Erich
2
2
Messages from the driver/layers won't be reported twice.
Messages during instance creation by the host loader won't be reported,
since the information is partly wrong and the windows loader reports the
correct information.
Other messages by the loader will be reported twice if lunarg's vulkan-1.dll
is used. This shouldn't be a problem because the messages are just used
for logging/debugging.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49813
Needed for Quake2RTX.
Signed-off-by: Georg Lehmann <dadschoorse(a)gmail.com>
---
dlls/winevulkan/make_vulkan | 14 +++--
dlls/winevulkan/vulkan.c | 105 ++++++++++++++++++++++++++++++-
dlls/winevulkan/vulkan_private.h | 26 ++++++++
3 files changed, 138 insertions(+), 7 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index a07c1d77bf5..7e5bd030867 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -86,12 +86,7 @@ EXT_BLOCK_SIZE = 1000
UNSUPPORTED_EXTENSIONS = [
# Instance extensions
- "VK_EXT_debug_report",
- # Handling of VK_EXT_debug_report requires some consideration. The win32
- # loader already provides it for us and it is somewhat usable. If we add
- # plumbing down to the native layer, we will get each message twice as we
- # use 2 loaders (win32+native), but we may get output from the driver.
- # In any case callback conversion is required.
+ "VK_EXT_debug_marker", # Needs handle unwrapping
"VK_EXT_validation_features",
"VK_EXT_validation_flags",
"VK_KHR_display", # Needs WSI work.
@@ -234,6 +229,11 @@ FUNCTION_OVERRIDES = {
"vkSubmitDebugUtilsMessageEXT" : {"dispatch": True, "driver" : False, "thunk" : True, "private_thunk" : True},
"vkSetDebugUtilsObjectTagEXT" : {"dispatch": True, "driver" : False, "thunk" : True, "private_thunk" : True},
"vkSetDebugUtilsObjectNameEXT" : {"dispatch": True, "driver" : False, "thunk" : True, "private_thunk" : True},
+
+ # VK_EXT_debug_report
+ "vkCreateDebugReportCallbackEXT" : {"dispatch": True, "driver" : False, "thunk" : False},
+ "vkDestroyDebugReportCallbackEXT" : {"dispatch": True, "driver" : False, "thunk" : False},
+ "vkDebugReportMessageEXT" : {"dispatch": True, "driver" : False, "thunk" : False},
}
STRUCT_CHAIN_CONVERSIONS = [
@@ -955,6 +955,8 @@ class VkHandle(object):
return "wine_cmd_pool_from_handle({0})->command_pool".format(name)
if self.name == "VkDebugUtilsMessengerEXT":
return "wine_debug_utils_messenger_from_handle({0})->debug_messenger".format(name)
+ if self.name == "VkDebugReportCallbackEXT":
+ return "wine_debug_report_callback_from_handle({0})->debug_callback".format(name)
native_handle_name = None
diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c
index 92c26be1fc0..d486f43e66c 100644
--- a/dlls/winevulkan/vulkan.c
+++ b/dlls/winevulkan/vulkan.c
@@ -190,6 +190,30 @@ static VkBool32 debug_utils_callback_conversion(VkDebugUtilsMessageSeverityFlagB
return result;
}
+static VkBool32 debug_report_callback_conversion(VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT object_type,
+ uint64_t object_handle, size_t location, int32_t code, const char *layer_prefix, const char *message, void *user_data)
+{
+ struct wine_debug_report_callback *object;
+
+ TRACE("%#x, %#x, 0x%s, 0x%s, %d, %p, %p, %p\n", flags, object_type, wine_dbgstr_longlong(object_handle),
+ wine_dbgstr_longlong(location), code, layer_prefix, message, user_data);
+
+ object = user_data;
+
+ if (!object->instance->instance)
+ {
+ /* instance wasn't yet created, this is a message from the native loader */
+ return VK_FALSE;
+ }
+
+ object_handle = wine_vk_get_wrapper(object->instance, object_handle);
+ if (!object_handle)
+ object_type = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT;
+
+ return object->user_callback(
+ flags, object_type, object_handle, location, code, layer_prefix, message, object->user_data);
+}
+
static void wine_vk_physical_device_free(struct VkPhysicalDevice_T *phys_dev)
{
if (!phys_dev)
@@ -471,6 +495,7 @@ static VkResult wine_vk_instance_convert_create_info(const VkInstanceCreateInfo
VkInstanceCreateInfo *dst, struct VkInstance_T *object)
{
VkDebugUtilsMessengerCreateInfoEXT *debug_utils_messenger;
+ VkDebugReportCallbackCreateInfoEXT *debug_report_callback;
VkBaseInStructure *header;
unsigned int i;
VkResult res;
@@ -503,6 +528,18 @@ static VkResult wine_vk_instance_convert_create_info(const VkInstanceCreateInfo
debug_utils_messenger->pUserData = &object->utils_messengers[i];
}
+ debug_report_callback = wine_vk_find_struct(header->pNext, DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT);
+ if (debug_report_callback)
+ {
+ object->default_callback.instance = object;
+ object->default_callback.debug_callback = VK_NULL_HANDLE;
+ object->default_callback.user_callback = debug_report_callback->pfnCallback;
+ object->default_callback.user_data = debug_report_callback->pUserData;
+
+ debug_report_callback->pfnCallback = (void *) &debug_report_callback_conversion;
+ debug_report_callback->pUserData = &object->default_callback;
+ }
+
/* ICDs don't support any layers, so nothing to copy. Modern versions of the loader
* filter this data out as well.
*/
@@ -526,7 +563,7 @@ static VkResult wine_vk_instance_convert_create_info(const VkInstanceCreateInfo
free_VkInstanceCreateInfo_struct_chain(dst);
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
- if (!strcmp(extension_name, "VK_EXT_debug_utils"))
+ if (!strcmp(extension_name, "VK_EXT_debug_utils") || !strcmp(extension_name, "VK_EXT_debug_report"))
{
object->enable_wrapper_list = VK_TRUE;
}
@@ -1880,6 +1917,72 @@ VkResult WINAPI wine_vkSetDebugUtilsObjectNameEXT(VkDevice device, const VkDebug
return thunk_vkSetDebugUtilsObjectNameEXT(device, &wine_name_info);
}
+VkResult WINAPI wine_vkCreateDebugReportCallbackEXT(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT *create_info,
+ const VkAllocationCallbacks *allocator, VkDebugReportCallbackEXT *callback)
+{
+ VkDebugReportCallbackCreateInfoEXT wine_create_info;
+ struct wine_debug_report_callback *object;
+ VkResult res;
+
+ TRACE("%p, %p, %p, %p\n", instance, create_info, allocator, callback);
+
+ if (allocator)
+ FIXME("Support for allocation callbacks not implemented yet\n");
+
+ if (!(object = heap_alloc_zero(sizeof(*object))))
+ return VK_ERROR_OUT_OF_HOST_MEMORY;
+
+ object->instance = instance;
+ object->user_callback = create_info->pfnCallback;
+ object->user_data = create_info->pUserData;
+
+ wine_create_info = *create_info;
+
+ wine_create_info.pfnCallback = (void *) debug_report_callback_conversion;
+ wine_create_info.pUserData = object;
+
+ res = instance->funcs.p_vkCreateDebugReportCallbackEXT(instance->instance, &wine_create_info, NULL, &object->debug_callback);
+
+ if (res != VK_SUCCESS)
+ {
+ heap_free(object);
+ return res;
+ }
+
+ WINE_VK_ADD_NON_DISPATCHABLE_MAPPING(instance, object, object->debug_callback);
+ *callback = wine_debug_report_callback_to_handle(object);
+
+ return VK_SUCCESS;
+}
+
+void WINAPI wine_vkDestroyDebugReportCallbackEXT(
+ VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks *allocator)
+{
+ struct wine_debug_report_callback *object;
+
+ TRACE("%p, 0x%s, %p\n", instance, wine_dbgstr_longlong(callback), allocator);
+
+ object = wine_debug_report_callback_from_handle(callback);
+
+ instance->funcs.p_vkDestroyDebugReportCallbackEXT(instance->instance, object->debug_callback, NULL);
+
+ WINE_VK_REMOVE_HANDLE_MAPPING(instance, object);
+
+ heap_free(object);
+}
+
+void WINAPI wine_vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT object_type,
+ uint64_t object, size_t location, int32_t code, const char *layer_prefix, const char *message)
+{
+ TRACE("%p, %#x, %#x, 0x%s, 0x%s, %d, %p, %p\n", instance, flags, object_type, wine_dbgstr_longlong(object),
+ wine_dbgstr_longlong(location), code, layer_prefix, message);
+
+ object = wine_vk_unwrap_handle(object_type, object);
+
+ instance->funcs.p_vkDebugReportMessageEXT(
+ instance->instance, flags, object_type, object, location, code, layer_prefix, message);
+}
+
BOOL WINAPI DllMain(HINSTANCE hinst, DWORD reason, void *reserved)
{
TRACE("%p, %u, %p\n", hinst, reason, reserved);
diff --git a/dlls/winevulkan/vulkan_private.h b/dlls/winevulkan/vulkan_private.h
index eec0ef595d0..92c04543587 100644
--- a/dlls/winevulkan/vulkan_private.h
+++ b/dlls/winevulkan/vulkan_private.h
@@ -97,6 +97,18 @@ struct VkDevice_T
struct wine_debug_utils_messenger;
+struct wine_debug_report_callback
+{
+ struct VkInstance_T *instance; /* parent */
+ VkDebugReportCallbackEXT debug_callback; /* native callback object */
+
+ /* application callback + data */
+ PFN_vkDebugReportCallbackEXT user_callback;
+ void *user_data;
+
+ struct wine_vk_mapping mapping;
+};
+
struct VkInstance_T
{
struct wine_vk_base base;
@@ -116,6 +128,8 @@ struct VkInstance_T
struct wine_debug_utils_messenger *utils_messengers;
uint32_t utils_messenger_count;
+ struct wine_debug_report_callback default_callback;
+
unsigned int quirks;
struct wine_vk_mapping mapping;
@@ -187,6 +201,18 @@ static inline VkDebugUtilsMessengerEXT wine_debug_utils_messenger_to_handle(
return (VkDebugUtilsMessengerEXT)(uintptr_t)debug_messenger;
}
+static inline struct wine_debug_report_callback *wine_debug_report_callback_from_handle(
+ VkDebugReportCallbackEXT handle)
+{
+ return (struct wine_debug_report_callback *)(uintptr_t)handle;
+}
+
+static inline VkDebugReportCallbackEXT wine_debug_report_callback_to_handle(
+ struct wine_debug_report_callback *debug_messenger)
+{
+ return (VkDebugReportCallbackEXT)(uintptr_t)debug_messenger;
+}
+
void *wine_vk_get_device_proc_addr(const char *name) DECLSPEC_HIDDEN;
void *wine_vk_get_instance_proc_addr(const char *name) DECLSPEC_HIDDEN;
--
2.29.1
2
1
We shouldn't do that according to the Vulkan xml maintainer.
https://github.com/KhronosGroup/Vulkan-Docs/pull/1379
Signed-off-by: Georg Lehmann <dadschoorse(a)gmail.com>
---
dlls/winevulkan/make_vulkan | 19 +++++++------------
1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index a07c1d77bf5..bc9462fb9c7 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -2737,21 +2737,16 @@ class VkRegistry(object):
def _match_object_types(self):
""" Matches each handle with the correct object type. """
- for handle in self.handles:
- if not handle.is_required() or handle.is_alias():
- continue
- for value in self.enums["VkObjectType"].values:
- if value.comment == handle.name:
- handle.object_type = value.name
- break
- else:
- LOGGER.warning("No object type found for {}".format(handle.name))
+ # Use upper case comparison for simplicity.
+ object_types = {}
+ for value in self.enums["VkObjectType"].values:
+ object_name = "VK" + value.name[len("VK_OBJECT_TYPE"):].replace("_", "")
+ object_types[object_name] = value.name
for handle in self.handles:
- if not handle.is_required() or not handle.is_alias():
+ if not handle.is_required():
continue
- # Use the object type of the alias
- handle.object_type = handle.alias.object_type
+ handle.object_type = object_types.get(handle.name.upper())
if not handle.object_type:
LOGGER.warning("No object type found for {}".format(handle.name))
--
2.29.1
2
3
[PATCH v4 1/5] server: Allow volume information queries to be asynchronous.
by Erich E. Hoover 28 Oct '20
by Erich E. Hoover 28 Oct '20
28 Oct '20
Per Zeb's suggestion, these patches are now organized as follows:
0001: allow volume information queries to be asynchronous
0002: allow NtQueryVolumeInformationFile to make async volume
information queries
0003: implement volume information queries for device files
0004: hook up volume information queries for mountmgr
0005: reimplement GetVolumeInformation on top of GetVolumeInformationByHandle
Overall, this patchset has two objectives:
1) remove the volume information duplication in
dlls/kernelbase/volume.c in preference to the version in
dlls/mountmgr.sys/device.c
2) set the stage for fixing the advertisement of reparse point support
( https://github.com/wine-staging/wine-staging/blob/master/patches/ntdll-Junc…
)
---
This specific patch allows the volume information queries to be
asynchronous on the server side.
v4: Split content from server/device.c and
dlls/ntoskrnl.exe/ntoskrnl.c and moved to patch 4
v3: No change
v2: Split
Best,
Erich
1
1
28 Oct '20
This patch allows the mountmgr to handle the volume information
request IRP, allowing volume information to be queried from the
mountmgr.
v4: Reordered (no content change)
v3: Use SystemBuffer instead of UserBuffer (see
8e98dcd42e13bfeb5a2397ff9bf1c7f63c224e23)
v2: Per Zeb's request, now storing the volume with the disk_device so
that the lookup doesn't require a search.
Best,
Erich
1
0