Mike McCormack : msi: Fix the value of LONG integers in records ( suggested by James Hawkins).

Alexandre Julliard julliard at wine.codeweavers.com
Thu Jul 27 05:42:26 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 65d12c342d95d15320c127f8192fe08f1ef8a670
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=65d12c342d95d15320c127f8192fe08f1ef8a670

Author: Mike McCormack <mike at codeweavers.com>
Date:   Thu Jul 27 12:34:20 2006 +0900

msi: Fix the value of LONG integers in records (suggested by James Hawkins).

---

 dlls/msi/table.c    |    2 ++
 dlls/msi/tests/db.c |    8 ++++++++
 dlls/msi/where.c    |    2 +-
 3 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index 39dfc4e..1a3ccb2 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1308,6 +1308,8 @@ static UINT msi_table_modify_row( MSITAB
             val = MSI_RecordGetInteger( rec, i+1 );
             if ( 2 == bytes_per_column( &tv->columns[i] ) )
                 val ^= 0x8000;
+            else
+                val ^= 0x80000000;
         }
         r = TABLE_set_int( &tv->view, row, i+1, val );
         if( r )
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index 8f0b75f..baf5635 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -1026,12 +1026,20 @@ static void test_where(void)
     r = do_query(hdb, query, &rec);
     ok(r == ERROR_SUCCESS, "MsiViewFetch failed: %d\n", r);
     ok( check_record( rec, 4, "zero.cab"), "wrong cabinet\n");
+    MsiCloseHandle( rec );
 
     query = "SELECT * FROM `Media` WHERE `LastSequence` >= 1";
     r = do_query(hdb, query, &rec);
     ok(r == ERROR_SUCCESS, "MsiViewFetch failed: %d\n", r);
     ok( check_record( rec, 4, "one.cab"), "wrong cabinet\n");
 
+    r = MsiRecordGetInteger(rec, 1);
+    ok( 2 == r, "field wrong\n");
+    r = MsiRecordGetInteger(rec, 2);
+    ok( 1 == r, "field wrong\n");
+
+    MsiCloseHandle( rec );
+
     MsiCloseHandle( hdb );
     DeleteFile(msifile);
 }
diff --git a/dlls/msi/where.c b/dlls/msi/where.c
index 7670bfd..d01510b 100644
--- a/dlls/msi/where.c
+++ b/dlls/msi/where.c
@@ -197,7 +197,7 @@ static UINT WHERE_evaluate( MSIDATABASE 
 
     case EXPR_COL_NUMBER32:
         r = table->ops->fetch_int( table, row, cond->u.col_number, &tval );
-        *val = tval;
+        *val = tval - 0x80000000;
         return r;
 
     case EXPR_UVAL:




More information about the wine-cvs mailing list