Fix MsiRecordSetString for NULL strings and update test case.
This commit is contained in:
parent
bcaca0a5f7
commit
e5f2ed4c66
|
@ -454,12 +454,20 @@ UINT MSI_RecordSetStringA( MSIRECORD *rec, unsigned int iField, LPCSTR szValue )
|
||||||
if( iField > rec->count )
|
if( iField > rec->count )
|
||||||
return ERROR_INVALID_FIELD;
|
return ERROR_INVALID_FIELD;
|
||||||
|
|
||||||
len = MultiByteToWideChar( CP_ACP, 0, szValue, -1, NULL, 0 );
|
|
||||||
str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
|
|
||||||
MultiByteToWideChar( CP_ACP, 0, szValue, -1, str, len );
|
|
||||||
MSI_FreeField( &rec->fields[iField] );
|
MSI_FreeField( &rec->fields[iField] );
|
||||||
rec->fields[iField].type = MSIFIELD_WSTR;
|
if( szValue )
|
||||||
rec->fields[iField].u.szwVal = str;
|
{
|
||||||
|
len = MultiByteToWideChar( CP_ACP, 0, szValue, -1, NULL, 0 );
|
||||||
|
str = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) );
|
||||||
|
MultiByteToWideChar( CP_ACP, 0, szValue, -1, str, len );
|
||||||
|
rec->fields[iField].type = MSIFIELD_WSTR;
|
||||||
|
rec->fields[iField].u.szwVal = str;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rec->fields[iField].type = MSIFIELD_NULL;
|
||||||
|
rec->fields[iField].u.szwVal = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -491,13 +499,22 @@ UINT MSI_RecordSetStringW( MSIRECORD *rec, unsigned int iField, LPCWSTR szValue
|
||||||
if( iField > rec->count )
|
if( iField > rec->count )
|
||||||
return ERROR_INVALID_FIELD;
|
return ERROR_INVALID_FIELD;
|
||||||
|
|
||||||
len = lstrlenW(szValue) + 1;
|
|
||||||
str = HeapAlloc( GetProcessHeap(), 0, len*sizeof (WCHAR));
|
|
||||||
lstrcpyW( str, szValue );
|
|
||||||
|
|
||||||
MSI_FreeField( &rec->fields[iField] );
|
MSI_FreeField( &rec->fields[iField] );
|
||||||
rec->fields[iField].type = MSIFIELD_WSTR;
|
|
||||||
rec->fields[iField].u.szwVal = str;
|
if( szValue )
|
||||||
|
{
|
||||||
|
len = lstrlenW(szValue) + 1;
|
||||||
|
str = HeapAlloc( GetProcessHeap(), 0, len*sizeof (WCHAR));
|
||||||
|
lstrcpyW( str, szValue );
|
||||||
|
|
||||||
|
rec->fields[iField].type = MSIFIELD_WSTR;
|
||||||
|
rec->fields[iField].u.szwVal = str;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rec->fields[iField].type = MSIFIELD_NULL;
|
||||||
|
rec->fields[iField].u.szwVal = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -119,6 +119,10 @@ void test_msirecord(void)
|
||||||
ok(r == 1, "failed to get integer\n");
|
ok(r == 1, "failed to get integer\n");
|
||||||
|
|
||||||
/* same record, but add a string to it */
|
/* same record, but add a string to it */
|
||||||
|
r = MsiRecordSetString(h, 0, NULL);
|
||||||
|
ok(r == ERROR_SUCCESS, "Failed to set null string at 0\n");
|
||||||
|
r = MsiRecordIsNull(h, 0);
|
||||||
|
ok(r == TRUE, "null string not null field\n");
|
||||||
r = MsiRecordSetString(h,0,str);
|
r = MsiRecordSetString(h,0,str);
|
||||||
ok(r == ERROR_SUCCESS, "Failed to set string at 0\n");
|
ok(r == ERROR_SUCCESS, "Failed to set string at 0\n");
|
||||||
r = MsiRecordGetInteger(h, 0);
|
r = MsiRecordGetInteger(h, 0);
|
||||||
|
|
Loading…
Reference in New Issue