Pull the codepage from the string table.
diff --git a/dlls/msi/string.c b/dlls/msi/string.c
index 0e7cf77..e61d416 100644
--- a/dlls/msi/string.c
+++ b/dlls/msi/string.c
@@ -47,6 +47,7 @@
{
UINT count; /* the number of strings */
UINT freeslot;
+ UINT codepage;
msistring *strings; /* an array of strings (in the tree) */
};
@@ -63,7 +64,7 @@
return hash;
}
-string_table *msi_init_stringtable( int entries )
+string_table *msi_init_stringtable( int entries, UINT codepage )
{
string_table *st;
@@ -79,6 +80,7 @@
}
st->count = entries;
st->freeslot = 1;
+ st->codepage = codepage;
return st;
}
@@ -192,11 +194,11 @@
}
/* allocate a new string */
- sz = WideCharToMultiByte( CP_UTF8, 0, data, len, NULL, 0, NULL, NULL );
+ sz = WideCharToMultiByte( st->codepage, 0, data, len, NULL, 0, NULL, NULL );
st->strings[n].str = HeapAlloc( GetProcessHeap(), 0, sz + 1 );
if( !st->strings[n].str )
return -1;
- WideCharToMultiByte( CP_UTF8, 0, data, len,
+ WideCharToMultiByte( st->codepage, 0, data, len,
st->strings[n].str, sz, NULL, NULL );
st->strings[n].str[sz] = 0;
st->strings[n].refcount = 1;
@@ -245,7 +247,7 @@
if( !str )
return ERROR_FUNCTION_FAILED;
- len = MultiByteToWideChar(CP_UTF8,0,str,-1,NULL,0);
+ len = MultiByteToWideChar(st->codepage,0,str,-1,NULL,0);
if( !buffer )
{
@@ -253,7 +255,7 @@
return ERROR_SUCCESS;
}
- *sz = MultiByteToWideChar(CP_UTF8,0,str,-1,buffer,*sz);
+ *sz = MultiByteToWideChar(st->codepage,0,str,-1,buffer,*sz);
return ERROR_SUCCESS;
}
@@ -338,13 +340,13 @@
return ERROR_SUCCESS;
}
- sz = WideCharToMultiByte( CP_UTF8, 0, buffer, -1, NULL, 0, NULL, NULL );
+ sz = WideCharToMultiByte( st->codepage, 0, buffer, -1, NULL, 0, NULL, NULL );
if( sz <= 0 )
return r;
str = HeapAlloc( GetProcessHeap(), 0, sz );
if( !str )
return ERROR_NOT_ENOUGH_MEMORY;
- WideCharToMultiByte( CP_UTF8, 0, buffer, -1, str, sz, NULL, NULL );
+ WideCharToMultiByte( st->codepage, 0, buffer, -1, str, sz, NULL, NULL );
r = msi_string2idA( st, str, id );
if( str )