Author: cwittich
Date: Mon Nov 16 02:13:42 2009
New Revision: 44191
URL:
http://svn.reactos.org/svn/reactos?rev=44191&view=rev
Log:
sync msi to wine 1.1.33
Modified:
trunk/reactos/dll/win32/msi/action.c
trunk/reactos/dll/win32/msi/alter.c
trunk/reactos/dll/win32/msi/appsearch.c
trunk/reactos/dll/win32/msi/create.c
trunk/reactos/dll/win32/msi/delete.c
trunk/reactos/dll/win32/msi/dialog.c
trunk/reactos/dll/win32/msi/distinct.c
trunk/reactos/dll/win32/msi/insert.c
trunk/reactos/dll/win32/msi/install.c
trunk/reactos/dll/win32/msi/join.c
trunk/reactos/dll/win32/msi/media.c
trunk/reactos/dll/win32/msi/msi.c
trunk/reactos/dll/win32/msi/msi_main.c
trunk/reactos/dll/win32/msi/msipriv.h
trunk/reactos/dll/win32/msi/msiquery.c
trunk/reactos/dll/win32/msi/msiserver.idl
trunk/reactos/dll/win32/msi/package.c
trunk/reactos/dll/win32/msi/query.h
trunk/reactos/dll/win32/msi/select.c
trunk/reactos/dll/win32/msi/sql.tab.c
trunk/reactos/dll/win32/msi/sql.y
trunk/reactos/dll/win32/msi/storages.c
trunk/reactos/dll/win32/msi/streams.c
trunk/reactos/dll/win32/msi/table.c
trunk/reactos/dll/win32/msi/update.c
trunk/reactos/dll/win32/msi/where.c
Modified: trunk/reactos/dll/win32/msi/action.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/action.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/action.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/action.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -4888,7 +4888,6 @@
static LONG env_set_flags( LPCWSTR *name, LPCWSTR *value, DWORD *flags )
{
LPCWSTR cptr = *name;
- LPCWSTR ptr = *value;
static const WCHAR prefix[] = {'[','~',']',0};
static const int prefix_len = 3;
@@ -4919,18 +4918,22 @@
return ERROR_FUNCTION_FAILED;
}
- if (!strncmpW(ptr, prefix, prefix_len))
- {
- *flags |= ENV_MOD_APPEND;
- *value += lstrlenW(prefix);
- }
- else if (lstrlenW(*value) >= prefix_len)
- {
- ptr += lstrlenW(ptr) - prefix_len;
- if (!lstrcmpW(ptr, prefix))
- {
- *flags |= ENV_MOD_PREFIX;
- /* the "[~]" will be removed by deformat_string */;
+ if (*value)
+ {
+ LPCWSTR ptr = *value;
+ if (!strncmpW(ptr, prefix, prefix_len))
+ {
+ *flags |= ENV_MOD_APPEND;
+ *value += lstrlenW(prefix);
+ }
+ else if (lstrlenW(*value) >= prefix_len)
+ {
+ ptr += lstrlenW(ptr) - prefix_len;
+ if (!lstrcmpW(ptr, prefix))
+ {
+ *flags |= ENV_MOD_PREFIX;
+ /* the "[~]" will be removed by deformat_string */;
+ }
}
}
@@ -4978,8 +4981,7 @@
if (res != ERROR_SUCCESS)
goto done;
- deformat_string(package, value, &deformatted);
- if (!deformatted)
+ if (value && !deformat_string(package, value, &deformatted))
{
res = ERROR_OUTOFMEMORY;
goto done;
@@ -5066,7 +5068,7 @@
}
}
}
- else
+ else if (value)
{
size = (lstrlenW(value) + 1) * sizeof(WCHAR);
newval = msi_alloc(size);
@@ -5079,8 +5081,13 @@
lstrcpyW(newval, value);
}
- TRACE("setting %s to %s\n", debugstr_w(name), debugstr_w(newval));
- res = RegSetValueExW(env, name, 0, type, (LPVOID)newval, size);
+ if (newval)
+ {
+ TRACE("setting %s to %s\n", debugstr_w(name), debugstr_w(newval));
+ res = RegSetValueExW(env, name, 0, type, (LPVOID)newval, size);
+ }
+ else
+ res = ERROR_SUCCESS;
done:
if (env) RegCloseKey(env);
Modified: trunk/reactos/dll/win32/msi/alter.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/alter.c?rev=…
==============================================================================
--- trunk/reactos/dll/win32/msi/alter.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/alter.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -183,11 +183,12 @@
}
static UINT ALTER_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSIALTERVIEW *av = (MSIALTERVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", av, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSIALTERVIEW *av = (MSIALTERVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", av, n, name, type, temporary, table_name );
return ERROR_FUNCTION_FAILED;
}
Modified: trunk/reactos/dll/win32/msi/appsearch.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/appsearch.c?…
==============================================================================
--- trunk/reactos/dll/win32/msi/appsearch.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/appsearch.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -445,7 +445,8 @@
if (sz == 0)
goto end;
- if ((ptr = strchrW((LPWSTR)value, '"')) && (end = strchrW(++ptr,
'"')))
+ if ((regType == REG_SZ || regType == REG_EXPAND_SZ) &&
+ (ptr = strchrW((LPWSTR)value, '"')) && (end = strchrW(++ptr,
'"')))
*end = '\0';
else
ptr = (LPWSTR)value;
Modified: trunk/reactos/dll/win32/msi/create.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/create.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/create.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/create.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -91,11 +91,12 @@
}
static UINT CREATE_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSICREATEVIEW *cv = (MSICREATEVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", cv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSICREATEVIEW *cv = (MSICREATEVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", cv, n, name, type, temporary, table_name );
return ERROR_FUNCTION_FAILED;
}
Modified: trunk/reactos/dll/win32/msi/delete.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/delete.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/delete.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/delete.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -127,17 +127,18 @@
}
static UINT DELETE_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSIDELETEVIEW *dv = (MSIDELETEVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", dv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSIDELETEVIEW *dv = (MSIDELETEVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", dv, n, name, type, temporary, table_name );
if( !dv->table )
return ERROR_FUNCTION_FAILED;
return dv->table->ops->get_column_info( dv->table, n, name,
- type, temporary );
+ type, temporary, table_name);
}
static UINT DELETE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
Modified: trunk/reactos/dll/win32/msi/dialog.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/dialog.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/dialog.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/dialog.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -606,6 +606,8 @@
func = MSI_RecordGetInteger( rec , 1 );
val = MSI_RecordGetInteger( rec , 2 );
+ TRACE("progress: func %u, val %u\n", func, val);
+
switch (func)
{
case 0: /* init */
@@ -618,10 +620,12 @@
break;
case 2: /* move */
ctrl->progress_current += val;
- SendMessageW(ctrl->hwnd, PBM_SETPOS,
100*(ctrl->progress_current/ctrl->progress_max), 0);
+ if (ctrl->progress_current > ctrl->progress_max)
+ ctrl->progress_current = ctrl->progress_max;
+ SendMessageW(ctrl->hwnd, PBM_SETPOS, MulDiv(100,
ctrl->progress_current, ctrl->progress_max), 0);
break;
default:
- ERR("Unknown progress message %d\n", func);
+ FIXME("Unknown progress message %u\n", func);
break;
}
}
@@ -681,6 +685,10 @@
name = MSI_RecordGetString( rec, 2 );
attributes = MSI_RecordGetInteger( rec, 8 );
text = MSI_RecordGetString( rec, 10 );
+
+ TRACE("%s, %s, %08x, %s, %08x\n", debugstr_w(szCls), debugstr_w(name),
+ attributes, debugstr_w(text), style);
+
if( attributes & msidbControlAttributesVisible )
style |= WS_VISIBLE;
if( ~attributes & msidbControlAttributesEnabled )
@@ -1571,8 +1579,14 @@
static UINT msi_dialog_progress_bar( msi_dialog *dialog, MSIRECORD *rec )
{
msi_control *control;
-
- control = msi_dialog_add_control( dialog, rec, PROGRESS_CLASSW, WS_VISIBLE );
+ DWORD attributes, style;
+
+ style = WS_VISIBLE;
+ attributes = MSI_RecordGetInteger( rec, 8 );
+ if( !(attributes & msidbControlAttributesProgress95) )
+ style |= PBS_SMOOTH;
+
+ control = msi_dialog_add_control( dialog, rec, PROGRESS_CLASSW, style );
if( !control )
return ERROR_FUNCTION_FAILED;
@@ -2600,14 +2614,43 @@
}
}
+static LONGLONG msi_vcl_get_cost( msi_dialog *dialog )
+{
+ MSIFEATURE *feature;
+ INT each_cost;
+ LONGLONG total_cost = 0;
+
+ LIST_FOR_EACH_ENTRY( feature, &dialog->package->features, MSIFEATURE, entry
)
+ {
+ if (ERROR_SUCCESS == (MSI_GetFeatureCost(dialog->package, feature,
+ MSICOSTTREE_SELFONLY, INSTALLSTATE_LOCAL, &each_cost)))
+ {
+ /* each_cost is in 512-byte units */
+ total_cost += each_cost * 512;
+ }
+ if (ERROR_SUCCESS == (MSI_GetFeatureCost(dialog->package, feature,
+ MSICOSTTREE_SELFONLY, INSTALLSTATE_ABSENT, &each_cost)))
+ {
+ /* each_cost is in 512-byte units */
+ total_cost -= each_cost * 512;
+ }
+ }
+ return total_cost;
+}
+
static void msi_dialog_vcl_add_drives( msi_dialog *dialog, msi_control *control )
{
ULARGE_INTEGER total, free;
+ LONGLONG difference, cost;
WCHAR size_text[MAX_PATH];
+ WCHAR cost_text[MAX_PATH];
LPWSTR drives, ptr;
LVITEMW lvitem;
DWORD size;
int i = 0;
+
+ cost = msi_vcl_get_cost(dialog);
+ StrFormatByteSizeW(cost, cost_text, MAX_PATH);
size = GetLogicalDriveStringsW( 0, NULL );
if ( !size ) return;
@@ -2628,6 +2671,7 @@
SendMessageW( control->hwnd, LVM_INSERTITEMW, 0, (LPARAM)&lvitem );
GetDiskFreeSpaceExW(ptr, &free, &total, NULL);
+ difference = free.QuadPart - cost;
StrFormatByteSizeW(total.QuadPart, size_text, MAX_PATH);
lvitem.iSubItem = 1;
@@ -2637,6 +2681,17 @@
StrFormatByteSizeW(free.QuadPart, size_text, MAX_PATH);
lvitem.iSubItem = 2;
+ lvitem.pszText = size_text;
+ lvitem.cchTextMax = lstrlenW(size_text) + 1;
+ SendMessageW( control->hwnd, LVM_SETITEMW, 0, (LPARAM)&lvitem );
+
+ lvitem.iSubItem = 3;
+ lvitem.pszText = cost_text;
+ lvitem.cchTextMax = lstrlenW(cost_text) + 1;
+ SendMessageW( control->hwnd, LVM_SETITEMW, 0, (LPARAM)&lvitem );
+
+ StrFormatByteSizeW(difference, size_text, MAX_PATH);
+ lvitem.iSubItem = 4;
lvitem.pszText = size_text;
lvitem.cchTextMax = lstrlenW(size_text) + 1;
SendMessageW( control->hwnd, LVM_SETITEMW, 0, (LPARAM)&lvitem );
Modified: trunk/reactos/dll/win32/msi/distinct.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/distinct.c?r…
==============================================================================
--- trunk/reactos/dll/win32/msi/distinct.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/distinct.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -205,17 +205,18 @@
}
static UINT DISTINCT_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSIDISTINCTVIEW *dv = (MSIDISTINCTVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", dv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSIDISTINCTVIEW *dv = (MSIDISTINCTVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", dv, n, name, type, temporary, table_name );
if( !dv->table )
return ERROR_FUNCTION_FAILED;
return dv->table->ops->get_column_info( dv->table, n, name,
- type, temporary );
+ type, temporary, table_name );
}
static UINT DISTINCT_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
Modified: trunk/reactos/dll/win32/msi/insert.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/insert.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/insert.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/insert.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -114,8 +114,8 @@
for (i = 1; i <= col_count; i++)
{
- iv->sv->ops->get_column_info(iv->sv, i, &a, NULL, NULL);
- iv->table->ops->get_column_info(iv->table, i, &b, NULL, NULL);
+ iv->sv->ops->get_column_info(iv->sv, i, &a, NULL, NULL, NULL);
+ iv->table->ops->get_column_info(iv->table, i, &b, NULL, NULL,
NULL);
res = lstrcmpW(a, b);
msi_free(a);
@@ -157,13 +157,14 @@
for (colidx = 1; colidx <= val_count; colidx++)
{
- r = iv->sv->ops->get_column_info(iv->sv, colidx, &a, NULL,
NULL);
+ r = iv->sv->ops->get_column_info(iv->sv, colidx, &a, NULL, NULL,
NULL);
if (r != ERROR_SUCCESS)
goto err;
for (i = 1; i <= col_count; i++)
{
- r = iv->table->ops->get_column_info(iv->table, i, &b, NULL,
NULL);
+ r = iv->table->ops->get_column_info(iv->table, i, &b, NULL,
+ NULL, NULL);
if (r != ERROR_SUCCESS)
goto err;
@@ -200,7 +201,8 @@
for (i = 1; i <= col_count; i++)
{
- r = iv->table->ops->get_column_info(iv->table, i, NULL, &type,
NULL);
+ r = iv->table->ops->get_column_info(iv->table, i, NULL, &type,
+ NULL, NULL);
if (r != ERROR_SUCCESS)
return FALSE;
@@ -291,18 +293,19 @@
}
static UINT INSERT_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
{
MSIINSERTVIEW *iv = (MSIINSERTVIEW*)view;
MSIVIEW *sv;
- TRACE("%p %d %p %p %p\n", iv, n, name, type, temporary );
+ TRACE("%p %d %p %p %p %p\n", iv, n, name, type, temporary, table_name );
sv = iv->sv;
if( !sv )
return ERROR_FUNCTION_FAILED;
- return sv->ops->get_column_info( sv, n, name, type, temporary );
+ return sv->ops->get_column_info( sv, n, name, type, temporary, table_name );
}
static UINT INSERT_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode, MSIRECORD
*rec, UINT row)
Modified: trunk/reactos/dll/win32/msi/install.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/install.c?re…
==============================================================================
--- trunk/reactos/dll/win32/msi/install.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/install.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -934,8 +934,24 @@
UINT WINAPI MsiGetFeatureCostA(MSIHANDLE hInstall, LPCSTR szFeature,
MSICOSTTREE iCostTree, INSTALLSTATE iState, LPINT piCost)
{
- FIXME("(%d %s %i %i %p): stub\n", hInstall, debugstr_a(szFeature),
- iCostTree, iState, piCost);
+ LPWSTR szwFeature = NULL;
+ UINT rc;
+
+ szwFeature = strdupAtoW(szFeature);
+
+ rc = MsiGetFeatureCostW(hInstall, szwFeature, iCostTree, iState, piCost);
+
+ msi_free(szwFeature);
+
+ return rc;
+}
+
+UINT MSI_GetFeatureCost(MSIPACKAGE *package, MSIFEATURE *feature,
+ MSICOSTTREE iCostTree, INSTALLSTATE iState,
+ LPINT piCost)
+{
+ FIXME("(%s %i %i %p): not implemented yet\n",
+ debugstr_w(feature->Feature), iCostTree, iState, piCost);
if (piCost) *piCost = 0;
return ERROR_SUCCESS;
}
@@ -946,10 +962,57 @@
UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall, LPCWSTR szFeature,
MSICOSTTREE iCostTree, INSTALLSTATE iState, LPINT piCost)
{
- FIXME("(%d %s %i %i %p): stub\n", hInstall, debugstr_w(szFeature),
+ MSIPACKAGE *package;
+ MSIFEATURE *feature;
+ UINT ret;
+
+ TRACE("(%d %s %i %i %p)\n", hInstall, debugstr_w(szFeature),
iCostTree, iState, piCost);
- if (piCost) *piCost = 0;
- return ERROR_SUCCESS;
+
+ package = msihandle2msiinfo(hInstall, MSIHANDLETYPE_PACKAGE);
+ if (!package)
+ {
+ HRESULT hr;
+ BSTR feature;
+ IWineMsiRemotePackage *remote_package;
+
+ remote_package = (IWineMsiRemotePackage *)msi_get_remote(hInstall);
+ if (!remote_package)
+ return ERROR_INVALID_HANDLE;
+
+ feature = SysAllocString(szFeature);
+ if (!feature)
+ {
+ IWineMsiRemotePackage_Release(remote_package);
+ return ERROR_OUTOFMEMORY;
+ }
+
+ hr = IWineMsiRemotePackage_GetFeatureCost(remote_package, feature,
+ iCostTree, iState, piCost);
+
+ SysFreeString(feature);
+ IWineMsiRemotePackage_Release(remote_package);
+
+ if (FAILED(hr))
+ {
+ if (HRESULT_FACILITY(hr) == FACILITY_WIN32)
+ return HRESULT_CODE(hr);
+
+ return ERROR_FUNCTION_FAILED;
+ }
+
+ return ERROR_SUCCESS;
+ }
+
+ feature = get_loaded_feature(package, szFeature);
+
+ if (feature)
+ ret = MSI_GetFeatureCost(package, feature, iCostTree, iState, piCost);
+ else
+ ret = ERROR_UNKNOWN_FEATURE;
+
+ msiobj_release( &package->hdr );
+ return ret;
}
/***********************************************************************
Modified: trunk/reactos/dll/win32/msi/join.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/join.c?rev=4…
==============================================================================
--- trunk/reactos/dll/win32/msi/join.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/join.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -194,13 +194,14 @@
}
static UINT JOIN_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name )
{
MSIJOINVIEW *jv = (MSIJOINVIEW*)view;
JOINTABLE *table;
UINT cols = 0;
- TRACE("%p %d %p %p %p\n", jv, n, name, type, temporary );
+ TRACE("%p %d %p %p %p %p\n", jv, n, name, type, temporary, table_name );
if (n == 0 || n > jv->columns)
return ERROR_FUNCTION_FAILED;
@@ -209,7 +210,8 @@
{
if (n <= cols + table->columns)
return table->view->ops->get_column_info(table->view, n - cols,
- name, type, temporary);
+ name, type, temporary,
+ table_name);
cols += table->columns;
}
Modified: trunk/reactos/dll/win32/msi/media.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/media.c?rev=…
==============================================================================
--- trunk/reactos/dll/win32/msi/media.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/media.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -70,7 +70,6 @@
static UINT msi_change_media(MSIPACKAGE *package, MSIMEDIAINFO *mi)
{
- LPSTR msg;
LPWSTR error, error_dialog;
LPWSTR source_dir;
UINT r = ERROR_SUCCESS;
@@ -78,23 +77,33 @@
static const WCHAR error_prop[] =
{'E','r','r','o','r','D','i','a','l','o','g',0};
if ((msi_get_property_int(package, szUILevel, 0) & INSTALLUILEVEL_MASK) ==
- INSTALLUILEVEL_NONE && !gUIHandlerA)
+ INSTALLUILEVEL_NONE && !gUIHandlerA && !gUIHandlerW &&
!gUIHandlerRecord)
return ERROR_SUCCESS;
error = generate_error_string(package, 1302, 1, mi->disk_prompt);
error_dialog = msi_dup_property(package, error_prop);
source_dir = msi_dup_property(package, cszSourceDir);
- while (r == ERROR_SUCCESS &&
- !source_matches_volume(mi, source_dir))
+ while (r == ERROR_SUCCESS && !source_matches_volume(mi, source_dir))
{
r = msi_spawn_error_dialog(package, error_dialog, error);
- if (gUIHandlerA)
- {
- msg = strdupWtoA(error);
+ if (gUIHandlerW)
+ {
+ gUIHandlerW(gUIContext, MB_RETRYCANCEL | INSTALLMESSAGE_ERROR, error);
+ }
+ else if (gUIHandlerA)
+ {
+ char *msg = strdupWtoA(error);
gUIHandlerA(gUIContext, MB_RETRYCANCEL | INSTALLMESSAGE_ERROR, msg);
msi_free(msg);
+ }
+ else if (gUIHandlerRecord)
+ {
+ MSIHANDLE rec = MsiCreateRecord(1);
+ MsiRecordSetStringW(rec, 0, error);
+ gUIHandlerRecord(gUIContext, MB_RETRYCANCEL | INSTALLMESSAGE_ERROR, rec);
+ MsiCloseHandle(rec);
}
}
Modified: trunk/reactos/dll/win32/msi/msi.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi.c?rev=44…
==============================================================================
--- trunk/reactos/dll/win32/msi/msi.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/msi.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -1902,10 +1902,12 @@
{
INSTALLUI_HANDLERA prev = gUIHandlerA;
- TRACE("%p %x %p\n",puiHandler, dwMessageFilter,pvContext);
+ TRACE("%p %08x %p\n", puiHandler, dwMessageFilter, pvContext);
+
gUIHandlerA = puiHandler;
- gUIFilter = dwMessageFilter;
- gUIContext = pvContext;
+ gUIHandlerW = NULL;
+ gUIFilter = dwMessageFilter;
+ gUIContext = pvContext;
return prev;
}
@@ -1915,10 +1917,12 @@
{
INSTALLUI_HANDLERW prev = gUIHandlerW;
- TRACE("%p %x %p\n",puiHandler,dwMessageFilter,pvContext);
+ TRACE("%p %08x %p\n", puiHandler, dwMessageFilter, pvContext);
+
+ gUIHandlerA = NULL;
gUIHandlerW = puiHandler;
- gUIFilter = dwMessageFilter;
- gUIContext = pvContext;
+ gUIFilter = dwMessageFilter;
+ gUIContext = pvContext;
return prev;
}
@@ -3591,13 +3595,20 @@
/***********************************************************************
* MsiSetExternalUIRecord [MSI.@]
*/
-UINT WINAPI MsiSetExternalUIRecord( INSTALLUI_HANDLER_RECORD puiHandler,
- DWORD dwMessageFilter, LPVOID pvContext,
- PINSTALLUI_HANDLER_RECORD ppuiPrevHandler)
-{
- FIXME("%p %08x %p %p\n", puiHandler, dwMessageFilter ,pvContext,
- ppuiPrevHandler);
- return ERROR_CALL_NOT_IMPLEMENTED;
+UINT WINAPI MsiSetExternalUIRecord( INSTALLUI_HANDLER_RECORD handler,
+ DWORD filter, LPVOID context,
+ PINSTALLUI_HANDLER_RECORD prev )
+{
+ TRACE("%p %08x %p %p\n", handler, filter, context, prev);
+
+ if (prev)
+ *prev = gUIHandlerRecord;
+
+ gUIHandlerRecord = handler;
+ gUIFilter = filter;
+ gUIContext = context;
+
+ return ERROR_SUCCESS;
}
/***********************************************************************
Modified: trunk/reactos/dll/win32/msi/msi_main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msi_main.c?r…
==============================================================================
--- trunk/reactos/dll/win32/msi/msi_main.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/msi_main.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -37,12 +37,13 @@
static LONG dll_count;
/* the UI level */
-INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC;
-HWND gUIhwnd = 0;
-INSTALLUI_HANDLERA gUIHandlerA = NULL;
-INSTALLUI_HANDLERW gUIHandlerW = NULL;
-DWORD gUIFilter = 0;
-LPVOID gUIContext = NULL;
+INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC;
+HWND gUIhwnd = 0;
+INSTALLUI_HANDLERA gUIHandlerA = NULL;
+INSTALLUI_HANDLERW gUIHandlerW = NULL;
+INSTALLUI_HANDLER_RECORD gUIHandlerRecord = NULL;
+DWORD gUIFilter = 0;
+LPVOID gUIContext = NULL;
WCHAR gszLogFile[MAX_PATH];
HINSTANCE msi_hInstance;
Modified: trunk/reactos/dll/win32/msi/msipriv.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msipriv.h?re…
==============================================================================
--- trunk/reactos/dll/win32/msi/msipriv.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/msipriv.h [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -228,11 +228,11 @@
/*
* get_column_info - returns the name and type of a specific column
*
- * The name is HeapAlloc'ed by this function and should be freed by
- * the caller.
+ * The name and tablename is HeapAlloc'ed by this function and should be
+ * freed by the caller.
* The column information can be queried at any time.
*/
- UINT (*get_column_info)( struct tagMSIVIEW *view, UINT n, LPWSTR *name, UINT *type,
BOOL *temporary );
+ UINT (*get_column_info)( struct tagMSIVIEW *view, UINT n, LPWSTR *name, UINT *type,
BOOL *temporary, LPWSTR *tableName);
/*
* modify - not yet implemented properly
@@ -737,7 +737,7 @@
extern UINT MSI_ViewClose( MSIQUERY* );
extern UINT MSI_ViewGetColumnInfo(MSIQUERY *, MSICOLINFO, MSIRECORD **);
extern UINT MSI_ViewModify( MSIQUERY *, MSIMODIFY, MSIRECORD * );
-extern UINT VIEW_find_column( MSIVIEW *, LPCWSTR, UINT * );
+extern UINT VIEW_find_column( MSIVIEW *, LPCWSTR, LPCWSTR, UINT * );
extern UINT msi_view_get_row(MSIDATABASE *, MSIVIEW *, UINT, MSIRECORD **);
/* install internals */
@@ -759,6 +759,7 @@
extern UINT msi_package_add_info(MSIPACKAGE *, DWORD, DWORD, LPCWSTR, LPWSTR);
extern UINT msi_package_add_media_disk(MSIPACKAGE *, DWORD, DWORD, DWORD, LPWSTR,
LPWSTR);
extern UINT msi_clone_properties(MSIPACKAGE *);
+extern UINT MSI_GetFeatureCost(MSIPACKAGE *, MSIFEATURE *, MSICOSTTREE, INSTALLSTATE,
LPINT);
/* for deformating */
extern UINT MSI_FormatRecordW( MSIPACKAGE *, MSIRECORD *, LPWSTR, LPDWORD );
@@ -843,6 +844,7 @@
extern HWND gUIhwnd;
extern INSTALLUI_HANDLERA gUIHandlerA;
extern INSTALLUI_HANDLERW gUIHandlerW;
+extern INSTALLUI_HANDLER_RECORD gUIHandlerRecord;
extern DWORD gUIFilter;
extern LPVOID gUIContext;
extern WCHAR gszLogFile[MAX_PATH];
Modified: trunk/reactos/dll/win32/msi/msiquery.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msiquery.c?r…
==============================================================================
--- trunk/reactos/dll/win32/msi/msiquery.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/msiquery.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -56,9 +56,10 @@
}
}
-UINT VIEW_find_column( MSIVIEW *table, LPCWSTR name, UINT *n )
+UINT VIEW_find_column( MSIVIEW *table, LPCWSTR name, LPCWSTR table_name, UINT *n )
{
LPWSTR col_name;
+ LPWSTR haystack_table_name;
UINT i, count, r;
r = table->ops->get_dimensions( table, NULL, &count );
@@ -70,11 +71,15 @@
INT x;
col_name = NULL;
- r = table->ops->get_column_info( table, i, &col_name, NULL, NULL );
+ r = table->ops->get_column_info( table, i, &col_name, NULL,
+ NULL, &haystack_table_name );
if( r != ERROR_SUCCESS )
return r;
x = lstrcmpW( name, col_name );
+ if( table_name )
+ x |= lstrcmpW( table_name, haystack_table_name );
msi_free( col_name );
+ msi_free( haystack_table_name );
if( !x )
{
*n = i;
@@ -306,7 +311,7 @@
for (i = 1; i <= col_count; i++)
{
- ret = view->ops->get_column_info(view, i, NULL, &type, NULL);
+ ret = view->ops->get_column_info(view, i, NULL, &type, NULL, NULL);
if (ret)
{
ERR("Error getting column type for %d\n", i);
@@ -553,7 +558,8 @@
for( i=0; i<count; i++ )
{
name = NULL;
- r = view->ops->get_column_info( view, i+1, &name, &type,
&temporary );
+ r = view->ops->get_column_info( view, i+1, &name, &type,
&temporary,
+ NULL );
if( r != ERROR_SUCCESS )
continue;
if (info == MSICOLINFO_NAMES)
Modified: trunk/reactos/dll/win32/msi/msiserver.idl
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/msiserver.id…
==============================================================================
--- trunk/reactos/dll/win32/msi/msiserver.idl [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/msiserver.idl [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -72,6 +72,7 @@
HRESULT SetInstallLevel( [in] int level );
HRESULT FormatRecord( [in] MSIHANDLE record, [out] BSTR *value );
HRESULT EvaluateCondition( [in] BSTR condition );
+ HRESULT GetFeatureCost( [in] BSTR feature, [in] INT cost_tree, [in] INSTALLSTATE
state, [out] INT *cost);
}
[
Modified: trunk/reactos/dll/win32/msi/package.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/package.c?re…
==============================================================================
--- trunk/reactos/dll/win32/msi/package.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/package.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -1203,19 +1203,28 @@
}
}
- TRACE("(%p %x %x %s)\n", gUIHandlerA, gUIFilter, log_type,
- debugstr_w(message));
+ TRACE("%p %p %p %x %x %s\n", gUIHandlerA, gUIHandlerW, gUIHandlerRecord,
+ gUIFilter, log_type, debugstr_w(message));
/* convert it to ASCII */
- len = WideCharToMultiByte( CP_ACP, 0, message, -1,
- NULL, 0, NULL, NULL );
+ len = WideCharToMultiByte( CP_ACP, 0, message, -1, NULL, 0, NULL, NULL );
msg = msi_alloc( len );
- WideCharToMultiByte( CP_ACP, 0, message, -1,
- msg, len, NULL, NULL );
-
- if (gUIHandlerA && (gUIFilter & log_type))
- {
- rc = gUIHandlerA(gUIContext,eMessageType,msg);
+ WideCharToMultiByte( CP_ACP, 0, message, -1, msg, len, NULL, NULL );
+
+ if (gUIHandlerW && (gUIFilter & log_type))
+ {
+ rc = gUIHandlerW( gUIContext, eMessageType, message );
+ }
+ else if (gUIHandlerA && (gUIFilter & log_type))
+ {
+ rc = gUIHandlerA( gUIContext, eMessageType, msg );
+ }
+ else if (gUIHandlerRecord && (gUIFilter & log_type))
+ {
+ MSIHANDLE rec = MsiCreateRecord( 1 );
+ MsiRecordSetStringW( rec, 0, message );
+ rc = gUIHandlerRecord( gUIContext, eMessageType, rec );
+ MsiCloseHandle( rec );
}
if ((!rc) && (gszLogFile[0]) && !((eMessageType & 0xff000000) ==
@@ -1234,8 +1243,7 @@
}
}
msi_free( msg );
-
- msi_free( message);
+ msi_free( message );
switch (eMessageType & 0xff000000)
{
@@ -1887,6 +1895,14 @@
{
msi_remote_package_impl* This = mrp_from_IWineMsiRemotePackage( iface );
UINT r = MsiEvaluateConditionW(This->package, condition);
+ return HRESULT_FROM_WIN32(r);
+}
+
+static HRESULT WINAPI mrp_GetFeatureCost( IWineMsiRemotePackage *iface, BSTR feature,
+ INT cost_tree, INSTALLSTATE state, INT *cost )
+{
+ msi_remote_package_impl* This = mrp_from_IWineMsiRemotePackage( iface );
+ UINT r = MsiGetFeatureCostW(This->package, feature, cost_tree, state, cost);
return HRESULT_FROM_WIN32(r);
}
@@ -1914,6 +1930,7 @@
mrp_SetInstallLevel,
mrp_FormatRecord,
mrp_EvaluateCondition,
+ mrp_GetFeatureCost,
};
HRESULT create_msi_remote_package( IUnknown *pOuter, LPVOID *ppObj )
Modified: trunk/reactos/dll/win32/msi/query.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/query.h?rev=…
==============================================================================
--- trunk/reactos/dll/win32/msi/query.h [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/query.h [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -68,6 +68,12 @@
struct expr *right;
};
+struct ext_column
+{
+ LPCWSTR column;
+ LPCWSTR table;
+};
+
struct expr
{
int type;
@@ -77,7 +83,7 @@
INT ival;
UINT uval;
LPCWSTR sval;
- LPCWSTR column;
+ struct ext_column column;
UINT col_number;
} u;
};
Modified: trunk/reactos/dll/win32/msi/select.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/select.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/select.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/select.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -209,11 +209,12 @@
}
static UINT SELECT_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSISELECTVIEW *sv = (MSISELECTVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", sv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSISELECTVIEW *sv = (MSISELECTVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", sv, n, name, type, temporary, table_name );
if( !sv->table )
return ERROR_FUNCTION_FAILED;
@@ -224,7 +225,7 @@
n = sv->cols[ n - 1 ];
return sv->table->ops->get_column_info( sv->table, n, name,
- type, temporary );
+ type, temporary, table_name );
}
static UINT msi_select_update(struct tagMSIVIEW *view, MSIRECORD *rec, UINT row)
@@ -247,7 +248,7 @@
{
col = sv->cols[i];
- r = SELECT_get_column_info(view, i + 1, &name, &type, NULL);
+ r = SELECT_get_column_info(view, i + 1, &name, &type, NULL, NULL);
msi_free(name);
if (r != ERROR_SUCCESS)
{
@@ -388,7 +389,7 @@
if( sv->num_cols >= sv->max_cols )
return ERROR_FUNCTION_FAILED;
- r = VIEW_find_column( table, name, &n );
+ r = VIEW_find_column( table, name, NULL, &n );
if( r != ERROR_SUCCESS )
return r;
Modified: trunk/reactos/dll/win32/msi/sql.tab.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/sql.tab.c?re…
==============================================================================
--- trunk/reactos/dll/win32/msi/sql.tab.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/sql.tab.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -2778,7 +2778,8 @@
if( e )
{
e->type = EXPR_COLUMN;
- e->u.sval = column->column;
+ e->u.column.column = column->column;
+ e->u.column.table = column->table;
}
return e;
}
Modified: trunk/reactos/dll/win32/msi/sql.y
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/sql.y?rev=44…
==============================================================================
--- trunk/reactos/dll/win32/msi/sql.y [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/sql.y [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -856,7 +856,8 @@
if( e )
{
e->type = EXPR_COLUMN;
- e->u.sval = column->column;
+ e->u.column.column = column->column;
+ e->u.column.table = column->table;
}
return e;
}
Modified: trunk/reactos/dll/win32/msi/storages.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/storages.c?r…
==============================================================================
--- trunk/reactos/dll/win32/msi/storages.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/storages.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -289,14 +289,16 @@
}
static UINT STORAGES_get_column_info(struct tagMSIVIEW *view, UINT n,
- LPWSTR *name, UINT *type, BOOL *temporary)
+ LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
{
LPCWSTR name_ptr = NULL;
static const WCHAR Name[] = {'N','a','m','e',0};
static const WCHAR Data[] = {'D','a','t','a',0};
- TRACE("(%p, %d, %p, %p, %p)\n", view, n, name, type, temporary);
+ TRACE("(%p, %d, %p, %p, %p, %p)\n", view, n, name, type, temporary,
+ table_name);
if (n == 0 || n > NUM_STORAGES_COLS)
return ERROR_INVALID_PARAMETER;
Modified: trunk/reactos/dll/win32/msi/streams.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/streams.c?re…
==============================================================================
--- trunk/reactos/dll/win32/msi/streams.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/streams.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -255,14 +255,16 @@
}
static UINT STREAMS_get_column_info(struct tagMSIVIEW *view, UINT n,
- LPWSTR *name, UINT *type, BOOL *temporary)
+ LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
{
LPCWSTR name_ptr = NULL;
static const WCHAR Name[] = {'N','a','m','e',0};
static const WCHAR Data[] = {'D','a','t','a',0};
- TRACE("(%p, %d, %p, %p, %p)\n", view, n, name, type, temporary);
+ TRACE("(%p, %d, %p, %p, %p, %p)\n", view, n, name, type, temporary,
+ table_name);
if (n == 0 || n > NUM_STREAMS_COLS)
return ERROR_INVALID_PARAMETER;
Modified: trunk/reactos/dll/win32/msi/table.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/table.c?rev=…
==============================================================================
--- trunk/reactos/dll/win32/msi/table.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/table.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -1582,7 +1582,8 @@
}
static UINT TABLE_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name )
{
MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
@@ -1595,6 +1596,13 @@
{
*name = strdupW( tv->columns[n-1].colname );
if( !*name )
+ return ERROR_FUNCTION_FAILED;
+ }
+
+ if( table_name )
+ {
+ *table_name = strdupW( tv->columns[n-1].tablename );
+ if( !*table_name )
return ERROR_FUNCTION_FAILED;
}
@@ -2118,6 +2126,7 @@
static UINT order_add_column(struct tagMSIVIEW *view, MSIORDERINFO *order, LPCWSTR name)
{
UINT n, r, count;
+ MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
r = TABLE_get_dimensions(view, NULL, &count);
if (r != ERROR_SUCCESS)
@@ -2126,7 +2135,7 @@
if (order->num_cols >= count)
return ERROR_FUNCTION_FAILED;
- r = VIEW_find_column(view, name, &n);
+ r = VIEW_find_column(view, name, tv->name, &n);
if (r != ERROR_SUCCESS)
return r;
Modified: trunk/reactos/dll/win32/msi/update.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/update.c?rev…
==============================================================================
--- trunk/reactos/dll/win32/msi/update.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/update.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -155,18 +155,19 @@
}
static UINT UPDATE_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSIUPDATEVIEW *uv = (MSIUPDATEVIEW*)view;
- MSIVIEW *wv;
-
- TRACE("%p %d %p %p %p\n", uv, n, name, type, temporary );
-
- wv = uv->wv;
- if( !wv )
- return ERROR_FUNCTION_FAILED;
-
- return wv->ops->get_column_info( wv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR* table_name )
+{
+ MSIUPDATEVIEW *uv = (MSIUPDATEVIEW*)view;
+ MSIVIEW *wv;
+
+ TRACE("%p %d %p %p %p %p\n", uv, n, name, type, temporary, table_name );
+
+ wv = uv->wv;
+ if( !wv )
+ return ERROR_FUNCTION_FAILED;
+
+ return wv->ops->get_column_info( wv, n, name, type, temporary, table_name );
}
static UINT UPDATE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
Modified: trunk/reactos/dll/win32/msi/where.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msi/where.c?rev=…
==============================================================================
--- trunk/reactos/dll/win32/msi/where.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msi/where.c [iso-8859-1] Mon Nov 16 02:13:42 2009
@@ -490,17 +490,18 @@
}
static UINT WHERE_get_column_info( struct tagMSIVIEW *view,
- UINT n, LPWSTR *name, UINT *type, BOOL *temporary )
-{
- MSIWHEREVIEW *wv = (MSIWHEREVIEW*)view;
-
- TRACE("%p %d %p %p %p\n", wv, n, name, type, temporary );
+ UINT n, LPWSTR *name, UINT *type, BOOL *temporary,
+ LPWSTR *table_name)
+{
+ MSIWHEREVIEW *wv = (MSIWHEREVIEW*)view;
+
+ TRACE("%p %d %p %p %p %p\n", wv, n, name, type, temporary, table_name );
if( !wv->table )
return ERROR_FUNCTION_FAILED;
return wv->table->ops->get_column_info( wv->table, n, name,
- type, temporary );
+ type, temporary, table_name );
}
static UINT WHERE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
@@ -597,11 +598,13 @@
switch( cond->type )
{
case EXPR_COLUMN:
- r = VIEW_find_column( table, cond->u.column, &val );
+ r = VIEW_find_column( table, cond->u.column.column,
+ cond->u.column.table, &val );
if( r == ERROR_SUCCESS )
{
UINT type = 0;
- r = table->ops->get_column_info( table, val, NULL, &type, NULL );
+ r = table->ops->get_column_info( table, val, NULL, &type,
+ NULL, NULL );
if( r == ERROR_SUCCESS )
{
if (type&MSITYPE_STRING)
@@ -619,7 +622,7 @@
else
{
*valid = 0;
- WARN("Couldn't find column %s\n", debugstr_w( cond->u.column
) );
+ WARN("Couldn't find column %s.%s\n", debugstr_w(
cond->u.column.table ), debugstr_w( cond->u.column.column ) );
}
break;
case EXPR_COMPLEX: