Mike McCormack : msi: Fix use of integer fields in MsiFormatRecord.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 21 08:14:51 CST 2006
Module: wine
Branch: master
Commit: 5b8fdad9209570bd2f525b9fe359752ebc2501d1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5b8fdad9209570bd2f525b9fe359752ebc2501d1
Author: Mike McCormack <mike at codeweavers.com>
Date: Tue Nov 21 16:40:14 2006 +0900
msi: Fix use of integer fields in MsiFormatRecord.
---
dlls/msi/helpers.c | 27 +++++++++++++++++++++++++--
dlls/msi/tests/format.c | 4 ----
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/dlls/msi/helpers.c b/dlls/msi/helpers.c
index ebd0301..3da5a05 100644
--- a/dlls/msi/helpers.c
+++ b/dlls/msi/helpers.c
@@ -67,9 +67,32 @@ LPWSTR build_icon_path(MSIPACKAGE *packa
return FilePath;
}
-LPWSTR msi_dup_record_field( MSIRECORD *row, INT index )
+LPWSTR msi_dup_record_field( MSIRECORD *rec, INT field )
{
- return strdupW( MSI_RecordGetString(row,index) );
+ DWORD sz = 0;
+ LPWSTR str;
+ UINT r;
+
+ if (MSI_RecordIsNull( rec, field ))
+ return NULL;
+
+ r = MSI_RecordGetStringW( rec, field, NULL, &sz );
+ if (r != ERROR_SUCCESS)
+ return NULL;
+
+ sz ++;
+ str = msi_alloc( sz * sizeof (WCHAR) );
+ if (!str)
+ return str;
+ str[0] = 0;
+ r = MSI_RecordGetStringW( rec, field, str, &sz );
+ if (r != ERROR_SUCCESS)
+ {
+ ERR("failed to get string!\n");
+ msi_free( str );
+ return NULL;
+ }
+ return str;
}
MSICOMPONENT* get_loaded_component( MSIPACKAGE* package, LPCWSTR Component )
diff --git a/dlls/msi/tests/format.c b/dlls/msi/tests/format.c
index 308bd70..37a1c08 100644
--- a/dlls/msi/tests/format.c
+++ b/dlls/msi/tests/format.c
@@ -927,10 +927,8 @@ static void test_formatrecord(void)
sz = sizeof buffer;
r = MsiFormatRecord(0, hrec, buffer, &sz);
ok( r == ERROR_SUCCESS, "format failed\n");
- todo_wine{
ok( sz == 6, "size wrong\n");
ok( 0 == strcmp(buffer,"123456"), "wrong output (%s)\n",buffer);
- }
r = MsiRecordSetString(hrec, 0, "[~]");
sz = sizeof buffer;
@@ -1634,10 +1632,8 @@ static void test_formatrecord(void)
MsiRecordSetString(hrec, 0, "[1] [2]");
r = MsiFormatRecord(0, hrec, buffer, &sz);
ok( r == ERROR_SUCCESS, "format failed\n");
- todo_wine {
ok( sz == 8, "size wrong(%i)\n",sz);
ok( 0 == strcmp(buffer,"100 -100"), "wrong output (%s)\n",buffer);
- }
MsiCloseHandle( hrec );
}
More information about the wine-cvs
mailing list