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