Piotr Caban : msi: Support removing temporary columns in TABLE_remove_column.

Alexandre Julliard julliard at winehq.org
Tue Jun 30 14:55:06 CDT 2020


Module: wine
Branch: master
Commit: 5d568279dc0b842206918ba87a955298e72973ae
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5d568279dc0b842206918ba87a955298e72973ae

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Jun 30 05:40:06 2020 +0200

msi: Support removing temporary columns in TABLE_remove_column.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msi/table.c | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index a413808e8a..db4dd59f95 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1966,6 +1966,20 @@ static UINT TABLE_remove_column(struct tagMSIVIEW *view, LPCWSTR table, UINT num
     MSIVIEW *columns = NULL;
     UINT row, r;
 
+    if (tv->table->col_count != number)
+        return ERROR_BAD_QUERY_SYNTAX;
+
+    if (tv->table->colinfo[number-1].temporary)
+    {
+        UINT size = tv->table->colinfo[number-1].offset;
+        tv->table->col_count--;
+        tv->table->colinfo = msi_realloc( tv->table->colinfo, sizeof(*tv->table->colinfo) * tv->table->col_count );
+
+        for (row = 0; row < tv->table->row_count; row++)
+            tv->table->data[row] = msi_realloc( tv->table->data[row], size );
+        return ERROR_SUCCESS;
+    }
+
     rec = MSI_CreateRecord(2);
     if (!rec)
         return ERROR_OUTOFMEMORY;
@@ -2000,11 +2014,12 @@ static UINT TABLE_release(struct tagMSIVIEW *view)
 {
     MSITABLEVIEW *tv = (MSITABLEVIEW*)view;
     INT ref = tv->table->ref_count;
-    UINT i, r;
+    UINT r;
+    INT i;
 
     TRACE("%p %d\n", view, ref);
 
-    for (i = 0; i < tv->table->col_count; i++)
+    for (i = tv->table->col_count - 1; i >= 0; i--)
     {
         if (tv->table->colinfo[i].type & MSITYPE_TEMPORARY)
         {




More information about the wine-cvs mailing list