Hib Eris : msi: Implement ASSIGN mode in MsiViewModify.
Alexandre Julliard
julliard at winehq.org
Mon Jul 6 09:34:00 CDT 2009
Module: wine
Branch: master
Commit: ec4edbfd6c35a76327bf06e7677170afa5aad265
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ec4edbfd6c35a76327bf06e7677170afa5aad265
Author: Hib Eris <hib at hiberis.nl>
Date: Mon Jul 6 12:26:20 2009 +0200
msi: Implement ASSIGN mode in MsiViewModify.
---
dlls/msi/table.c | 18 ++++++++++++++++++
dlls/msi/tests/db.c | 16 ++++++++--------
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index dc21b3b..126769a 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1711,6 +1711,21 @@ static UINT msi_table_update(struct tagMSIVIEW *view, MSIRECORD *rec, UINT row)
return TABLE_set_row(view, new_row, rec, (1 << tv->num_cols) - 1);
}
+static UINT msi_table_assign(struct tagMSIVIEW *view, MSIRECORD *rec)
+{
+ MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
+ UINT r, row;
+
+ if (!tv->table)
+ return ERROR_INVALID_PARAMETER;
+
+ r = msi_table_find_row(tv, rec, &row);
+ if (r == ERROR_SUCCESS)
+ return TABLE_set_row(view, row, rec, (1 << tv->num_cols) - 1);
+ else
+ return TABLE_insert_row( view, rec, -1, FALSE );
+}
+
static UINT modify_delete_row( struct tagMSIVIEW *view, MSIRECORD *rec )
{
MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
@@ -1780,6 +1795,9 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
break;
case MSIMODIFY_ASSIGN:
+ r = msi_table_assign( view, rec );
+ break;
+
case MSIMODIFY_REPLACE:
case MSIMODIFY_MERGE:
case MSIMODIFY_VALIDATE:
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index e694ea3..019ff5e 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -4795,7 +4795,7 @@ static void test_viewmodify_assign(void)
ok(r == ERROR_SUCCESS, "failed to set integer\n");
r = MsiViewModify(hview, MSIMODIFY_ASSIGN, hrec);
- todo_wine ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
+ ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4811,12 +4811,12 @@ static void test_viewmodify_assign(void)
r = MsiViewExecute(hview, 0);
ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
r = MsiViewFetch(hview, &hrec);
- todo_wine ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
+ ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
r = MsiRecordGetInteger(hrec, 1);
- todo_wine ok(r == 1, "Expected 1, got %d\n", r);
+ ok(r == 1, "Expected 1, got %d\n", r);
r = MsiRecordGetInteger(hrec, 2);
- todo_wine ok(r == 2, "Expected 2, got %d\n", r);
+ ok(r == 2, "Expected 2, got %d\n", r);
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4845,7 +4845,7 @@ static void test_viewmodify_assign(void)
ok(r == ERROR_SUCCESS, "failed to set integer\n");
r = MsiViewModify(hview, MSIMODIFY_ASSIGN, hrec);
- todo_wine ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
+ ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4861,12 +4861,12 @@ static void test_viewmodify_assign(void)
r = MsiViewExecute(hview, 0);
ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
r = MsiViewFetch(hview, &hrec);
- todo_wine ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
+ ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
r = MsiRecordGetInteger(hrec, 1);
- todo_wine ok(r == 1, "Expected 1, got %d\n", r);
+ ok(r == 1, "Expected 1, got %d\n", r);
r = MsiRecordGetInteger(hrec, 2);
- todo_wine ok(r == 4, "Expected 4, got %d\n", r);
+ ok(r == 4, "Expected 4, got %d\n", r);
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
More information about the wine-cvs
mailing list