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