Module: wine Branch: master Commit: f2ee10aed7f5da5fa0abe904a887cf25863e306b URL: http://source.winehq.org/git/wine.git/?a=commit;h=f2ee10aed7f5da5fa0abe904a8...
Author: Eric Pouech eric.pouech@wanadoo.fr Date: Wed Nov 8 21:47:04 2006 +0100
msi: Fixed bogus A -> W conversion.
---
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 );