mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 08:15:41 +00:00
[MSI]
* Sync with Wine 1.7.27. Dedicated to Jérôme. CORE-8540 svn path=/trunk/; revision=64244
This commit is contained in:
parent
8155a55f42
commit
fd8d353ac0
12 changed files with 1442 additions and 1883 deletions
|
@ -1650,6 +1650,8 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
|
||||||
{
|
{
|
||||||
LPWSTR override;
|
LPWSTR override;
|
||||||
MSIFEATURE *feature;
|
MSIFEATURE *feature;
|
||||||
|
BOOL remove = !strcmpW(property, szRemove);
|
||||||
|
BOOL reinstall = !strcmpW(property, szReinstall);
|
||||||
|
|
||||||
override = msi_dup_property( package->db, property );
|
override = msi_dup_property( package->db, property );
|
||||||
if (!override)
|
if (!override)
|
||||||
|
@ -1657,19 +1659,19 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
|
LIST_FOR_EACH_ENTRY( feature, &package->features, MSIFEATURE, entry )
|
||||||
{
|
{
|
||||||
if (strcmpW( property, szRemove ) && !is_feature_selected( feature, level ))
|
if (feature->Level <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!strcmpW(property, szReinstall)) state = feature->Installed;
|
if (reinstall)
|
||||||
|
state = (feature->Installed == INSTALLSTATE_ABSENT ? INSTALLSTATE_UNKNOWN : feature->Installed);
|
||||||
|
else if (remove)
|
||||||
|
state = (feature->Installed == INSTALLSTATE_ABSENT ? INSTALLSTATE_UNKNOWN : INSTALLSTATE_ABSENT);
|
||||||
|
|
||||||
if (!strcmpiW( override, szAll ))
|
if (!strcmpiW( override, szAll ))
|
||||||
{
|
|
||||||
if (feature->Installed != state)
|
|
||||||
{
|
{
|
||||||
feature->Action = state;
|
feature->Action = state;
|
||||||
feature->ActionRequest = state;
|
feature->ActionRequest = state;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LPWSTR ptr = override;
|
LPWSTR ptr = override;
|
||||||
|
@ -1681,12 +1683,9 @@ static BOOL process_state_property(MSIPACKAGE* package, int level,
|
||||||
|
|
||||||
if ((ptr2 && strlenW(feature->Feature) == len && !strncmpW(ptr, feature->Feature, len))
|
if ((ptr2 && strlenW(feature->Feature) == len && !strncmpW(ptr, feature->Feature, len))
|
||||||
|| (!ptr2 && !strcmpW(ptr, feature->Feature)))
|
|| (!ptr2 && !strcmpW(ptr, feature->Feature)))
|
||||||
{
|
|
||||||
if (feature->Installed != state)
|
|
||||||
{
|
{
|
||||||
feature->Action = state;
|
feature->Action = state;
|
||||||
feature->ActionRequest = state;
|
feature->ActionRequest = state;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ptr2)
|
if (ptr2)
|
||||||
|
@ -1823,6 +1822,8 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
|
||||||
{
|
{
|
||||||
FeatureList *fl;
|
FeatureList *fl;
|
||||||
|
|
||||||
|
if (!is_feature_selected( feature, level )) continue;
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( fl, &feature->Children, FeatureList, entry )
|
LIST_FOR_EACH_ENTRY( fl, &feature->Children, FeatureList, entry )
|
||||||
{
|
{
|
||||||
if (fl->feature->Attributes & msidbFeatureAttributesFollowParent &&
|
if (fl->feature->Attributes & msidbFeatureAttributesFollowParent &&
|
||||||
|
@ -1847,8 +1848,6 @@ UINT MSI_SetFeatureStates(MSIPACKAGE *package)
|
||||||
debugstr_w(feature->Feature), feature->Level, feature->Installed,
|
debugstr_w(feature->Feature), feature->Level, feature->Installed,
|
||||||
feature->ActionRequest, feature->Action);
|
feature->ActionRequest, feature->Action);
|
||||||
|
|
||||||
if (!is_feature_selected( feature, level )) continue;
|
|
||||||
|
|
||||||
/* features with components that have compressed files are made local */
|
/* features with components that have compressed files are made local */
|
||||||
LIST_FOR_EACH_ENTRY( cl, &feature->Components, ComponentList, entry )
|
LIST_FOR_EACH_ENTRY( cl, &feature->Components, ComponentList, entry )
|
||||||
{
|
{
|
||||||
|
@ -2340,6 +2339,8 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
|
||||||
static const WCHAR szPrimaryVolumeSpaceAvailable[] =
|
static const WCHAR szPrimaryVolumeSpaceAvailable[] =
|
||||||
{'P','r','i','m','a','r','y','V','o','l','u','m','e','S','p','a','c','e',
|
{'P','r','i','m','a','r','y','V','o','l','u','m','e','S','p','a','c','e',
|
||||||
'A','v','a','i','l','a','b','l','e',0};
|
'A','v','a','i','l','a','b','l','e',0};
|
||||||
|
static const WCHAR szOutOfNoRbDiskSpace[] =
|
||||||
|
{'O','u','t','O','f','N','o','R','b','D','i','s','k','S','p','a','c','e',0};
|
||||||
MSICOMPONENT *comp;
|
MSICOMPONENT *comp;
|
||||||
MSIQUERY *view;
|
MSIQUERY *view;
|
||||||
WCHAR *level, *primary_key, *primary_folder;
|
WCHAR *level, *primary_key, *primary_folder;
|
||||||
|
@ -2416,6 +2417,7 @@ static UINT ACTION_CostFinalize(MSIPACKAGE *package)
|
||||||
|
|
||||||
/* FIXME: check volume disk space */
|
/* FIXME: check volume disk space */
|
||||||
msi_set_property( package->db, szOutOfDiskSpace, szZero, -1 );
|
msi_set_property( package->db, szOutOfDiskSpace, szZero, -1 );
|
||||||
|
msi_set_property( package->db, szOutOfNoRbDiskSpace, szZero, -1 );
|
||||||
|
|
||||||
return MSI_SetFeatureStates(package);
|
return MSI_SetFeatureStates(package);
|
||||||
}
|
}
|
||||||
|
@ -3907,7 +3909,9 @@ static UINT ITERATE_CreateShortcuts(MSIRECORD *row, LPVOID param)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FIXME("poorly handled shortcut format, advertised shortcut\n");
|
FIXME("poorly handled shortcut format, advertised shortcut\n");
|
||||||
IShellLinkW_SetPath(sl,comp->FullKeypath);
|
path = resolve_keypath( package, comp );
|
||||||
|
IShellLinkW_SetPath( sl, path );
|
||||||
|
msi_free( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!MSI_RecordIsNull(row,6))
|
if (!MSI_RecordIsNull(row,6))
|
||||||
|
@ -4876,6 +4880,8 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
|
||||||
BOOL absent = FALSE;
|
BOOL absent = FALSE;
|
||||||
MSIRECORD *uirow;
|
MSIRECORD *uirow;
|
||||||
|
|
||||||
|
if (feature->Level <= 0) continue;
|
||||||
|
|
||||||
if (feature->Action != INSTALLSTATE_LOCAL &&
|
if (feature->Action != INSTALLSTATE_LOCAL &&
|
||||||
feature->Action != INSTALLSTATE_SOURCE &&
|
feature->Action != INSTALLSTATE_SOURCE &&
|
||||||
feature->Action != INSTALLSTATE_ADVERTISED) absent = TRUE;
|
feature->Action != INSTALLSTATE_ADVERTISED) absent = TRUE;
|
||||||
|
@ -7734,7 +7740,7 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||||
static const WCHAR szDisableRollback[] = {'D','I','S','A','B','L','E','R','O','L','L','B','A','C','K',0};
|
static const WCHAR szDisableRollback[] = {'D','I','S','A','B','L','E','R','O','L','L','B','A','C','K',0};
|
||||||
static const WCHAR szAction[] = {'A','C','T','I','O','N',0};
|
static const WCHAR szAction[] = {'A','C','T','I','O','N',0};
|
||||||
static const WCHAR szInstall[] = {'I','N','S','T','A','L','L',0};
|
static const WCHAR szInstall[] = {'I','N','S','T','A','L','L',0};
|
||||||
WCHAR *reinstall, *remove, *patch;
|
WCHAR *reinstall, *remove, *patch, *productcode;
|
||||||
BOOL ui_exists;
|
BOOL ui_exists;
|
||||||
UINT rc;
|
UINT rc;
|
||||||
|
|
||||||
|
@ -7803,6 +7809,15 @@ UINT MSI_InstallPackage( MSIPACKAGE *package, LPCWSTR szPackagePath,
|
||||||
msi_adjust_privilege_properties( package );
|
msi_adjust_privilege_properties( package );
|
||||||
msi_set_context( package );
|
msi_set_context( package );
|
||||||
|
|
||||||
|
productcode = msi_dup_property( package->db, szProductCode );
|
||||||
|
if (strcmpiW( productcode, package->ProductCode ))
|
||||||
|
{
|
||||||
|
TRACE( "product code changed %s -> %s\n", debugstr_w(package->ProductCode), debugstr_w(productcode) );
|
||||||
|
msi_free( package->ProductCode );
|
||||||
|
package->ProductCode = productcode;
|
||||||
|
}
|
||||||
|
else msi_free( productcode );
|
||||||
|
|
||||||
if (msi_get_property_int( package->db, szDisableRollback, 0 ))
|
if (msi_get_property_int( package->db, szDisableRollback, 0 ))
|
||||||
{
|
{
|
||||||
TRACE("disabling rollback\n");
|
TRACE("disabling rollback\n");
|
||||||
|
|
|
@ -438,6 +438,19 @@ static UINT ACTION_AppSearchReg(MSIPACKAGE *package, LPWSTR *appValue, MSISIGNAT
|
||||||
if (sz == 0)
|
if (sz == 0)
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
/* expand if needed */
|
||||||
|
if (regType == REG_EXPAND_SZ)
|
||||||
|
{
|
||||||
|
sz = ExpandEnvironmentStringsW((LPCWSTR)value, NULL, 0);
|
||||||
|
if (sz)
|
||||||
|
{
|
||||||
|
LPWSTR buf = msi_alloc(sz * sizeof(WCHAR));
|
||||||
|
ExpandEnvironmentStringsW((LPCWSTR)value, buf, sz);
|
||||||
|
msi_free(value);
|
||||||
|
value = (LPBYTE)buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((regType == REG_SZ || regType == REG_EXPAND_SZ) &&
|
if ((regType == REG_SZ || regType == REG_EXPAND_SZ) &&
|
||||||
(ptr = strchrW((LPWSTR)value, '"')) && (end = strchrW(++ptr, '"')))
|
(ptr = strchrW((LPWSTR)value, '"')) && (end = strchrW(++ptr, '"')))
|
||||||
*end = '\0';
|
*end = '\0';
|
||||||
|
|
|
@ -1443,14 +1443,14 @@ UINT ACTION_RegisterMIMEInfo(MSIPACKAGE *package)
|
||||||
|
|
||||||
LIST_FOR_EACH_ENTRY( mt, &package->mimes, MSIMIME, entry )
|
LIST_FOR_EACH_ENTRY( mt, &package->mimes, MSIMIME, entry )
|
||||||
{
|
{
|
||||||
LPWSTR extension, key;
|
LPWSTR extension = NULL, key;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check if the MIME is to be installed. Either as requested by an
|
* check if the MIME is to be installed. Either as requested by an
|
||||||
* extension or Class
|
* extension or Class
|
||||||
*/
|
*/
|
||||||
if ((!mt->Class || mt->Class->action != INSTALLSTATE_LOCAL) &&
|
if ((!mt->Class || mt->Class->action != INSTALLSTATE_LOCAL) &&
|
||||||
mt->Extension->action != INSTALLSTATE_LOCAL)
|
(!mt->Extension || mt->Extension->action != INSTALLSTATE_LOCAL))
|
||||||
{
|
{
|
||||||
TRACE("MIME %s not scheduled to be installed\n", debugstr_w(mt->ContentType));
|
TRACE("MIME %s not scheduled to be installed\n", debugstr_w(mt->ContentType));
|
||||||
continue;
|
continue;
|
||||||
|
@ -1458,7 +1458,7 @@ UINT ACTION_RegisterMIMEInfo(MSIPACKAGE *package)
|
||||||
|
|
||||||
TRACE("Registering MIME type %s\n", debugstr_w(mt->ContentType));
|
TRACE("Registering MIME type %s\n", debugstr_w(mt->ContentType));
|
||||||
|
|
||||||
extension = msi_alloc( (strlenW( mt->Extension->Extension ) + 2) * sizeof(WCHAR) );
|
if (mt->Extension) extension = msi_alloc( (strlenW( mt->Extension->Extension ) + 2) * sizeof(WCHAR) );
|
||||||
key = msi_alloc( (strlenW( mt->ContentType ) + strlenW( szMIMEDatabase ) + 1) * sizeof(WCHAR) );
|
key = msi_alloc( (strlenW( mt->ContentType ) + strlenW( szMIMEDatabase ) + 1) * sizeof(WCHAR) );
|
||||||
|
|
||||||
if (extension && key)
|
if (extension && key)
|
||||||
|
@ -1501,7 +1501,7 @@ UINT ACTION_UnregisterMIMEInfo( MSIPACKAGE *package )
|
||||||
LPWSTR mime_key;
|
LPWSTR mime_key;
|
||||||
|
|
||||||
if ((!mime->Class || mime->Class->action != INSTALLSTATE_ABSENT) &&
|
if ((!mime->Class || mime->Class->action != INSTALLSTATE_ABSENT) &&
|
||||||
mime->Extension->action != INSTALLSTATE_ABSENT)
|
(!mime->Extension || mime->Extension->action != INSTALLSTATE_ABSENT))
|
||||||
{
|
{
|
||||||
TRACE("MIME %s not scheduled to be removed\n", debugstr_w(mime->ContentType));
|
TRACE("MIME %s not scheduled to be removed\n", debugstr_w(mime->ContentType));
|
||||||
continue;
|
continue;
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -830,7 +830,13 @@ static UINT ITERATE_MoveFiles( MSIRECORD *rec, LPVOID param )
|
||||||
{
|
{
|
||||||
if (!wildcards)
|
if (!wildcards)
|
||||||
{
|
{
|
||||||
|
WCHAR *p;
|
||||||
|
if (sourcename)
|
||||||
destname = strdupW(sourcename);
|
destname = strdupW(sourcename);
|
||||||
|
else if ((p = strrchrW(sourcedir, '\\')))
|
||||||
|
destname = strdupW(p + 1);
|
||||||
|
else
|
||||||
|
destname = strdupW(sourcedir);
|
||||||
if (!destname)
|
if (!destname)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2841,7 +2841,9 @@ static INSTALLSTATE MSI_GetComponentPath(LPCWSTR szProduct, LPCWSTR szComponent,
|
||||||
if (state == INSTALLSTATE_LOCAL && !*path)
|
if (state == INSTALLSTATE_LOCAL && !*path)
|
||||||
state = INSTALLSTATE_NOTUSED;
|
state = INSTALLSTATE_NOTUSED;
|
||||||
|
|
||||||
msi_strcpy_to_awstring(path, -1, lpPathBuf, pcchBuf);
|
if (msi_strcpy_to_awstring(path, -1, lpPathBuf, pcchBuf) == ERROR_MORE_DATA)
|
||||||
|
state = INSTALLSTATE_MOREDATA;
|
||||||
|
|
||||||
msi_free(path);
|
msi_free(path);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -3355,6 +3357,7 @@ static UINT MSI_ProvideQualifiedComponentEx(LPCWSTR szComponent,
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
DWORD sz;
|
DWORD sz;
|
||||||
UINT rc;
|
UINT rc;
|
||||||
|
INSTALLSTATE state;
|
||||||
|
|
||||||
rc = MSIREG_OpenUserComponentsKey(szComponent, &hkey, FALSE);
|
rc = MSIREG_OpenUserComponentsKey(szComponent, &hkey, FALSE);
|
||||||
if (rc != ERROR_SUCCESS)
|
if (rc != ERROR_SUCCESS)
|
||||||
|
@ -3369,13 +3372,16 @@ static UINT MSI_ProvideQualifiedComponentEx(LPCWSTR szComponent,
|
||||||
MsiDecomposeDescriptorW(info, product, feature, component, &sz);
|
MsiDecomposeDescriptorW(info, product, feature, component, &sz);
|
||||||
|
|
||||||
if (!szProduct)
|
if (!szProduct)
|
||||||
rc = MSI_GetComponentPath(product, component, lpPathBuf, pcchPathBuf);
|
state = MSI_GetComponentPath(product, component, lpPathBuf, pcchPathBuf);
|
||||||
else
|
else
|
||||||
rc = MSI_GetComponentPath(szProduct, component, lpPathBuf, pcchPathBuf);
|
state = MSI_GetComponentPath(szProduct, component, lpPathBuf, pcchPathBuf);
|
||||||
|
|
||||||
msi_free( info );
|
msi_free( info );
|
||||||
|
|
||||||
if (rc != INSTALLSTATE_LOCAL)
|
if (state == INSTALLSTATE_MOREDATA)
|
||||||
|
return ERROR_MORE_DATA;
|
||||||
|
|
||||||
|
if (state != INSTALLSTATE_LOCAL)
|
||||||
return ERROR_FILE_NOT_FOUND;
|
return ERROR_FILE_NOT_FOUND;
|
||||||
|
|
||||||
return ERROR_SUCCESS;
|
return ERROR_SUCCESS;
|
||||||
|
|
|
@ -1156,7 +1156,6 @@ MSIPACKAGE *MSI_CreatePackage( MSIDATABASE *db, LPCWSTR base_url )
|
||||||
package->ProductCode = msi_dup_property( package->db, szProductCode );
|
package->ProductCode = msi_dup_property( package->db, szProductCode );
|
||||||
package->script = msi_alloc_zero( sizeof(MSISCRIPT) );
|
package->script = msi_alloc_zero( sizeof(MSISCRIPT) );
|
||||||
|
|
||||||
set_installed_prop( package );
|
|
||||||
set_installer_properties( package );
|
set_installer_properties( package );
|
||||||
|
|
||||||
package->ui_level = gUILevel;
|
package->ui_level = gUILevel;
|
||||||
|
@ -1631,6 +1630,7 @@ UINT MSI_OpenPackageW(LPCWSTR szPackage, MSIPACKAGE **pPackage)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
msi_set_property( package->db, szDatabase, db->path, -1 );
|
msi_set_property( package->db, szDatabase, db->path, -1 );
|
||||||
|
set_installed_prop( package );
|
||||||
msi_set_context( package );
|
msi_set_context( package );
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
|
|
|
@ -37,54 +37,57 @@ static BOOL match_language( MSIPACKAGE *package, LANGID langid )
|
||||||
|
|
||||||
static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform )
|
static UINT check_transform_applicable( MSIPACKAGE *package, IStorage *transform )
|
||||||
{
|
{
|
||||||
WCHAR *package_product, *transform_product, *template = NULL;
|
MSISUMMARYINFO *si = MSI_GetSummaryInformationW( transform, 0 );
|
||||||
UINT ret = ERROR_FUNCTION_FAILED;
|
UINT valid_flags = 0, wanted_flags = 0;
|
||||||
|
|
||||||
package_product = msi_dup_property( package->db, szProductCode );
|
if (si) wanted_flags = msi_suminfo_get_int32( si, PID_CHARCOUNT );
|
||||||
transform_product = msi_get_suminfo_product( transform );
|
TRACE("validation flags %x\n", wanted_flags);
|
||||||
|
|
||||||
|
if (wanted_flags & ~(MSITRANSFORM_VALIDATE_PRODUCT|MSITRANSFORM_VALIDATE_LANGUAGE))
|
||||||
|
FIXME("unsupported validation flags %x\n", wanted_flags);
|
||||||
|
|
||||||
|
if (wanted_flags & MSITRANSFORM_VALIDATE_PRODUCT)
|
||||||
|
{
|
||||||
|
WCHAR *package_product = msi_dup_property( package->db, szProductCode );
|
||||||
|
WCHAR *transform_product = msi_get_suminfo_product( transform );
|
||||||
|
|
||||||
TRACE("package = %s transform = %s\n", debugstr_w(package_product), debugstr_w(transform_product));
|
TRACE("package = %s transform = %s\n", debugstr_w(package_product), debugstr_w(transform_product));
|
||||||
|
|
||||||
if (!transform_product || strstrW( transform_product, package_product ))
|
if (!transform_product || strstrW( transform_product, package_product ))
|
||||||
{
|
{
|
||||||
MSISUMMARYINFO *si;
|
valid_flags |= MSITRANSFORM_VALIDATE_PRODUCT;
|
||||||
|
}
|
||||||
|
msi_free( transform_product );
|
||||||
|
msi_free( package_product );
|
||||||
|
}
|
||||||
|
if (wanted_flags & MSITRANSFORM_VALIDATE_LANGUAGE)
|
||||||
|
{
|
||||||
|
WCHAR *template;
|
||||||
const WCHAR *p;
|
const WCHAR *p;
|
||||||
|
|
||||||
si = MSI_GetSummaryInformationW( transform, 0 );
|
|
||||||
if (!si)
|
if (!si)
|
||||||
{
|
{
|
||||||
ERR("no summary information!\n");
|
ERR("no summary information!\n");
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
template = msi_suminfo_dup_string( si, PID_TEMPLATE );
|
if (!(template = msi_suminfo_dup_string( si, PID_TEMPLATE )))
|
||||||
if (!template)
|
|
||||||
{
|
{
|
||||||
ERR("no template property!\n");
|
ERR("no template property!\n");
|
||||||
msiobj_release( &si->hdr );
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
if (!template[0])
|
|
||||||
{
|
|
||||||
ret = ERROR_SUCCESS;
|
|
||||||
msiobj_release( &si->hdr );
|
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
TRACE("template: %s\n", debugstr_w(template));
|
TRACE("template: %s\n", debugstr_w(template));
|
||||||
p = strchrW( template, ';' );
|
if (!template[0] || ((p = strchrW( template, ';' )) && match_language( package, atoiW( p + 1 ) )))
|
||||||
if (p && match_language( package, atoiW( p + 1 ) ))
|
|
||||||
{
|
{
|
||||||
TRACE("applicable transform\n");
|
valid_flags |= MSITRANSFORM_VALIDATE_LANGUAGE;
|
||||||
ret = ERROR_SUCCESS;
|
|
||||||
}
|
}
|
||||||
/* FIXME: check platform */
|
msi_free( template );
|
||||||
msiobj_release( &si->hdr );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
msi_free( transform_product );
|
msiobj_release( &si->hdr );
|
||||||
msi_free( package_product );
|
if (valid_flags & ~wanted_flags) return ERROR_FUNCTION_FAILED;
|
||||||
msi_free( template );
|
TRACE("applicable transform\n");
|
||||||
return ret;
|
return ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static UINT apply_substorage_transform( MSIPACKAGE *package, MSIDATABASE *patch_db, LPCWSTR name )
|
static UINT apply_substorage_transform( MSIPACKAGE *package, MSIDATABASE *patch_db, LPCWSTR name )
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,8 @@
|
||||||
/* A Bison parser, made by GNU Bison 2.5. */
|
/* A Bison parser, made by GNU Bison 3.0.2. */
|
||||||
|
|
||||||
/* Bison interface for Yacc-like parsers in C
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
|
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -30,13 +30,21 @@
|
||||||
This special exception was added by the Free Software Foundation in
|
This special exception was added by the Free Software Foundation in
|
||||||
version 2.2 of Bison. */
|
version 2.2 of Bison. */
|
||||||
|
|
||||||
|
#ifndef YY_SQL_SQL_TAB_H_INCLUDED
|
||||||
|
# define YY_SQL_SQL_TAB_H_INCLUDED
|
||||||
|
/* Debug traces. */
|
||||||
|
#ifndef YYDEBUG
|
||||||
|
# define YYDEBUG 0
|
||||||
|
#endif
|
||||||
|
#if YYDEBUG
|
||||||
|
extern int sql_debug;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Tokens. */
|
/* Token type. */
|
||||||
#ifndef YYTOKENTYPE
|
#ifndef YYTOKENTYPE
|
||||||
# define YYTOKENTYPE
|
# define YYTOKENTYPE
|
||||||
/* Put the tokens into the symbol table, so that GDB and other debuggers
|
enum yytokentype
|
||||||
know about them. */
|
{
|
||||||
enum yytokentype {
|
|
||||||
TK_ALTER = 258,
|
TK_ALTER = 258,
|
||||||
TK_AND = 259,
|
TK_AND = 259,
|
||||||
TK_BY = 260,
|
TK_BY = 260,
|
||||||
|
@ -89,26 +97,24 @@
|
||||||
TK_VALUES = 307,
|
TK_VALUES = 307,
|
||||||
TK_WHERE = 308,
|
TK_WHERE = 308,
|
||||||
TK_WILDCARD = 309,
|
TK_WILDCARD = 309,
|
||||||
COLUMN = 311,
|
END_OF_FILE = 310,
|
||||||
FUNCTION = 312,
|
ILLEGAL = 311,
|
||||||
COMMENT = 313,
|
SPACE = 312,
|
||||||
UNCLOSED_STRING = 314,
|
UNCLOSED_STRING = 313,
|
||||||
SPACE = 315,
|
COMMENT = 314,
|
||||||
ILLEGAL = 316,
|
FUNCTION = 315,
|
||||||
END_OF_FILE = 317,
|
COLUMN = 316,
|
||||||
TK_LIKE = 318,
|
TK_LIKE = 318,
|
||||||
TK_NEGATION = 319
|
TK_NEGATION = 319
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Value type. */
|
||||||
|
|
||||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||||
typedef union YYSTYPE
|
typedef union YYSTYPE YYSTYPE;
|
||||||
|
union YYSTYPE
|
||||||
{
|
{
|
||||||
|
#line 68 "sql.y" /* yacc.c:1909 */
|
||||||
/* Line 2068 of yacc.c */
|
|
||||||
#line 68 "sql.y"
|
|
||||||
|
|
||||||
struct sql_str str;
|
struct sql_str str;
|
||||||
LPWSTR string;
|
LPWSTR string;
|
||||||
|
@ -118,16 +124,14 @@ typedef union YYSTYPE
|
||||||
USHORT column_type;
|
USHORT column_type;
|
||||||
int integer;
|
int integer;
|
||||||
|
|
||||||
|
#line 128 "sql.tab.h" /* yacc.c:1909 */
|
||||||
|
};
|
||||||
/* Line 2068 of yacc.c */
|
|
||||||
#line 125 "sql.tab.h"
|
|
||||||
} YYSTYPE;
|
|
||||||
# define YYSTYPE_IS_TRIVIAL 1
|
# define YYSTYPE_IS_TRIVIAL 1
|
||||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
|
||||||
# define YYSTYPE_IS_DECLARED 1
|
# define YYSTYPE_IS_DECLARED 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int sql_parse (SQL_input *info);
|
||||||
|
|
||||||
|
#endif /* !YY_SQL_SQL_TAB_H_INCLUDED */
|
||||||
|
|
|
@ -652,7 +652,7 @@ static UINT get_tablecolumns( MSIDATABASE *db, LPCWSTR szTableName, MSICOLUMNINF
|
||||||
/* Note: _Columns table doesn't have non-persistent data */
|
/* Note: _Columns table doesn't have non-persistent data */
|
||||||
|
|
||||||
/* if maxcount is non-zero, assume it's exactly right for this table */
|
/* if maxcount is non-zero, assume it's exactly right for this table */
|
||||||
memset( colinfo, 0, maxcount * sizeof(*colinfo) );
|
if (colinfo) memset( colinfo, 0, maxcount * sizeof(*colinfo) );
|
||||||
count = table->row_count;
|
count = table->row_count;
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
|
@ -665,7 +665,7 @@ static UINT get_tablecolumns( MSIDATABASE *db, LPCWSTR szTableName, MSICOLUMNINF
|
||||||
/* check the column number is in range */
|
/* check the column number is in range */
|
||||||
if (col < 1 || col > maxcount)
|
if (col < 1 || col > maxcount)
|
||||||
{
|
{
|
||||||
ERR("column %d out of range\n", col);
|
ERR("column %d out of range (maxcount: %d)\n", col, maxcount);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* check if this column was already set */
|
/* check if this column was already set */
|
||||||
|
|
|
@ -120,7 +120,7 @@ reactos/dll/win32/msg711.acm # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/msgsm32.acm # Synced to Wine-1.7.17
|
reactos/dll/win32/msgsm32.acm # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/mshtml # Synced to Wine-1.7.17
|
reactos/dll/win32/mshtml # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/mshtml.tlb # Synced to Wine-1.7.17
|
reactos/dll/win32/mshtml.tlb # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/msi # Synced to Wine-1.7.17
|
reactos/dll/win32/msi # Synced to Wine-1.7.27
|
||||||
reactos/dll/win32/msimg32 # Synced to Wine-1.7.17
|
reactos/dll/win32/msimg32 # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/msimtf # Synced to Wine-1.7.17
|
reactos/dll/win32/msimtf # Synced to Wine-1.7.17
|
||||||
reactos/dll/win32/msisip # Synced to Wine-1.7.17
|
reactos/dll/win32/msisip # Synced to Wine-1.7.17
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue