James Hawkins : msi: Add handling for the MSIMODIFY_UPDATE command.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 24 07:06:18 CDT 2007
Module: wine
Branch: master
Commit: f4147ca004022228257d3ee89ff1540eb90a0b60
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f4147ca004022228257d3ee89ff1540eb90a0b60
Author: James Hawkins <truiken at gmail.com>
Date: Mon Jul 23 19:20:51 2007 -0700
msi: Add handling for the MSIMODIFY_UPDATE command.
---
dlls/msi/table.c | 28 +++++++++++++++++++++++++++-
dlls/msi/tests/db.c | 25 +++++--------------------
2 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index 745712a..5333817 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1532,6 +1532,29 @@ static UINT TABLE_delete_row( struct tagMSIVIEW *view, UINT row )
return ERROR_SUCCESS;
}
+static UINT msi_table_update(struct tagMSIVIEW *view, MSIRECORD *rec)
+{
+ MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
+ UINT r, row;
+
+ /* FIXME: MsiViewFetch should set rec index 0 to some ID that
+ * sets the fetched record apart from other records
+ */
+
+ if (!tv->table)
+ return ERROR_INVALID_PARAMETER;
+
+ r = msi_table_find_row(tv, rec, &row);
+ if (r != ERROR_SUCCESS)
+ return ERROR_SUCCESS;
+
+ /* the row cannot be changed */
+ if (row != 0)
+ return ERROR_FUNCTION_FAILED;
+
+ return TABLE_set_row(view, row, rec, (1 << tv->num_cols) - 1);
+}
+
static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
MSIRECORD *rec)
{
@@ -1553,9 +1576,12 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
r = TABLE_insert_row( view, rec, TRUE );
break;
+ case MSIMODIFY_UPDATE:
+ r = msi_table_update( view, rec );
+ break;
+
case MSIMODIFY_REFRESH:
case MSIMODIFY_INSERT:
- case MSIMODIFY_UPDATE:
case MSIMODIFY_ASSIGN:
case MSIMODIFY_REPLACE:
case MSIMODIFY_MERGE:
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 1cb8ce6..5b01189 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -832,17 +832,11 @@ static void test_viewmodify(void)
ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
- todo_wine
- {
- ok(r == ERROR_SUCCESS, "MsiViewModify failed\n");
- }
+ ok(r == ERROR_SUCCESS, "MsiViewModify failed\n");
/* do it again */
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
- todo_wine
- {
- ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
- }
+ ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
/* update the view, primary key */
r = MsiRecordSetInteger(hrec, 1, 5);
@@ -883,10 +877,7 @@ static void test_viewmodify(void)
sz = sizeof(buffer);
r = MsiRecordGetString(hrec, 3, buffer, &sz);
ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n");
- todo_wine
- {
- ok(!lstrcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer);
- }
+ ok(!lstrcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer);
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -965,10 +956,7 @@ static void test_viewmodify(void)
ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
- todo_wine
- {
- ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
- }
+ ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -993,10 +981,7 @@ static void test_viewmodify(void)
ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
- todo_wine
- {
- ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
- }
+ ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
More information about the wine-cvs
mailing list