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 )