https://git.reactos.org/?p=reactos.git;a=commitdiff;h=5c718f5f5ccfdbba92362…
commit 5c718f5f5ccfdbba923626d6151c7d1b2744597a
Author: winesync <ros-dev(a)reactos.org>
AuthorDate: Sun Mar 13 19:08:40 2022 +0100
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sun Mar 20 19:28:30 2022 +0100
[WINESYNC] msi: Support removing temporary columns in TABLE_remove_column.
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
wine commit id 5d568279dc0b842206918ba87a955298e72973ae by Piotr Caban
<piotr(a)codeweavers.com>
---
dll/win32/msi/table.c | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/dll/win32/msi/table.c b/dll/win32/msi/table.c
index a413808e8a3..db4dd59f958 100644
--- a/dll/win32/msi/table.c
+++ b/dll/win32/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)
{