comctl32: Create the manifest directory if needed (spotted by Dan Kegel).

This commit is contained in:
Alexandre Julliard 2007-08-20 12:46:37 +02:00
parent b8a76c60f5
commit 4bac1e959d
1 changed files with 9 additions and 4 deletions

View File

@ -145,7 +145,8 @@ static const WCHAR strCC32SubclassInfo[] = {
static BOOL create_manifest( BOOL install ) static BOOL create_manifest( BOOL install )
{ {
static const WCHAR dirW[] = {'\\','w','i','n','s','x','s','\\','m','a','n','i','f','e','s','t','s','\\',0}; static const WCHAR winsxsW[] = {'\\','w','i','n','s','x','s',0};
static const WCHAR manifestsW[] = {'\\','m','a','n','i','f','e','s','t','s','\\',0};
DWORD len, written; DWORD len, written;
WCHAR *buffer; WCHAR *buffer;
@ -154,10 +155,14 @@ static BOOL create_manifest( BOOL install )
len = MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename), NULL, 0 ); len = MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename), NULL, 0 );
len += GetWindowsDirectoryW( NULL, 0 ); len += GetWindowsDirectoryW( NULL, 0 );
len = len * sizeof(WCHAR) + sizeof(dirW); len += lstrlenW(winsxsW);
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len ))) return FALSE; len += lstrlenW(manifestsW);
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) return FALSE;
GetWindowsDirectoryW( buffer, len ); GetWindowsDirectoryW( buffer, len );
lstrcatW( buffer, dirW ); lstrcatW( buffer, winsxsW );
CreateDirectoryW( buffer, NULL );
lstrcatW( buffer, manifestsW );
CreateDirectoryW( buffer, NULL );
MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename), MultiByteToWideChar( CP_UTF8, 0, manifest_filename, sizeof(manifest_filename),
buffer + lstrlenW(buffer), len ); buffer + lstrlenW(buffer), len );
if (install) if (install)