msi: Fix merging string type checks.
authorHib Eris <hib@hiberis.nl>
Tue, 20 Oct 2009 13:49:39 +0000 (15:49 +0200)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 20 Oct 2009 13:55:43 +0000 (15:55 +0200)
dlls/msi/database.c
dlls/msi/tests/db.c

index 85d71c28b1d997ede96fd528b3884be0ce5335a4..adbdb9d46fc8709af28e2a8a758d114607cf924a 100644 (file)
@@ -1081,6 +1081,19 @@ typedef struct _tagMERGEDATA
     struct list *tabledata;
 } MERGEDATA;
 
+static BOOL merge_type_match(LPCWSTR type1, LPCWSTR type2)
+{
+    if (((type1[0] == 'l') || (type1[0] == 's')) &&
+        ((type2[0] == 'l') || (type2[0] == 's')))
+        return TRUE;
+
+    if (((type1[0] == 'L') || (type1[0] == 'S')) &&
+        ((type2[0] == 'L') || (type2[0] == 'S')))
+        return TRUE;
+
+    return !lstrcmpW(type1, type2);
+}
+
 static UINT merge_verify_colnames(MSIQUERY *dbview, MSIQUERY *mergeview)
 {
     MSIRECORD *dbrec, *mergerec;
@@ -1126,7 +1139,7 @@ static UINT merge_verify_colnames(MSIQUERY *dbview, MSIQUERY *mergeview)
         if (!MSI_RecordGetString(mergerec, i))
             break;
 
-        if (lstrcmpW(MSI_RecordGetString(dbrec, i),
+        if (!merge_type_match(MSI_RecordGetString(dbrec, i),
                      MSI_RecordGetString(mergerec, i)))
         {
             r = ERROR_DATATYPE_MISMATCH;
index 7013fa409c6e098fb09ccc42e351dfde34097d53..4bb0039ebc405b9fedc24d0d6f1ee5df9cdb72c0 100644 (file)
@@ -7273,7 +7273,7 @@ static void test_dbmerge(void)
 
     /* column sting types don't match exactly */
     r = MsiDatabaseMergeA(hdb, href, "MergeErrors");
-    todo_wine ok(r == ERROR_SUCCESS,
+    ok(r == ERROR_SUCCESS,
        "Expected ERROR_SUCCESS, got %d\n", r);
 
     /* nothing in MergeErrors */