[PATCH 09/16] [Msi]: descriptor

Eric Pouech eric.pouech at wanadoo.fr
Sun Oct 22 14:48:30 CDT 2006


- fixed bogus A -> W conversion

A+
---

 dlls/msi/registry.c |   27 +++++++++++++++------------
 1 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c
index 5ad5059..bb50ae0 100644
--- a/dlls/msi/registry.c
+++ b/dlls/msi/registry.c
@@ -618,13 +618,8 @@ UINT WINAPI MsiDecomposeDescriptorW( LPC
     len = (p - &szDescriptor[20]);
     if( len > MAX_FEATURE_CHARS )
         return ERROR_INVALID_PARAMETER;
-    if (szFeature)
-    {
-        memcpy( szFeature, &szDescriptor[20], len*sizeof(WCHAR) );
-        szFeature[len] = 0;
-    }
 
-    TRACE("feature %s\n", debugstr_w( &szDescriptor[20] ));
+    TRACE("feature %s\n", debugstr_wn( &szDescriptor[20], len ));
 
     r = decode_base85_guid( p+1, &component );
     if( !r )
@@ -636,6 +631,11 @@ UINT WINAPI MsiDecomposeDescriptorW( LPC
         StringFromGUID2( &product, szProduct, MAX_FEATURE_CHARS+1 );
     if (szComponent)
         StringFromGUID2( &component, szComponent, MAX_FEATURE_CHARS+1 );
+    if (szFeature)
+    {
+        memcpy( szFeature, &szDescriptor[20], len*sizeof(WCHAR) );
+        szFeature[len] = 0;
+    }
     len = ( &p[21] - szDescriptor );
 
     TRACE("length = %d\n", len);
@@ -669,12 +669,15 @@ UINT WINAPI MsiDecomposeDescriptorA( LPC
 
     r = MsiDecomposeDescriptorW( str, p, f, c, pUsed );
 
-    WideCharToMultiByte( CP_ACP, 0, p, MAX_FEATURE_CHARS+1,
-                         szProduct, MAX_FEATURE_CHARS+1, NULL, NULL );
-    WideCharToMultiByte( CP_ACP, 0, f, MAX_FEATURE_CHARS+1,
-                         szFeature, MAX_FEATURE_CHARS+1, NULL, NULL );
-    WideCharToMultiByte( CP_ACP, 0, c, MAX_FEATURE_CHARS+1,
-                         szComponent, MAX_FEATURE_CHARS+1, NULL, NULL );
+    if (r == ERROR_SUCCESS)
+    {
+        WideCharToMultiByte( CP_ACP, 0, p, -1,
+                             szProduct, MAX_FEATURE_CHARS+1, NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, f, -1,
+                             szFeature, MAX_FEATURE_CHARS+1, NULL, NULL );
+        WideCharToMultiByte( CP_ACP, 0, c, -1,
+                             szComponent, MAX_FEATURE_CHARS+1, NULL, NULL );
+    }
 
     msi_free( str );
 



More information about the wine-patches mailing list