Mike McCormack : msi:
Split code to create a random package name into a separate function.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Sep 8 10:24:33 CDT 2006
Module: wine
Branch: master
Commit: 5f83069bd852be706d773f934b876c5b843b4578
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5f83069bd852be706d773f934b876c5b843b4578
Author: Mike McCormack <mike at codeweavers.com>
Date: Fri Sep 8 16:20:46 2006 +0900
msi: Split code to create a random package name into a separate function.
---
dlls/msi/action.c | 63 ++++++++++++++++++++++++++++-------------------------
1 files changed, 33 insertions(+), 30 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index da7d7e8..b309509 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -3487,32 +3487,25 @@ end:
return rc;
}
-static UINT msi_make_package_local( MSIPACKAGE *package, HKEY hkey )
+static UINT msi_get_local_package_name( LPWSTR path )
{
- static const WCHAR installerPathFmt[] = {
- '%','s','\\','I','n','s','t','a','l','l','e','r','\\',0};
- static const WCHAR fmt[] = {
- '%','s','\\',
- 'I','n','s','t','a','l','l','e','r','\\',
- '%','x','.','m','s','i',0};
- static const WCHAR szOriginalDatabase[] =
- {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
- WCHAR windir[MAX_PATH], path[MAX_PATH], packagefile[MAX_PATH];
- INT num, start;
- LPWSTR msiFilePath;
- BOOL r;
-
- /* copy the package locally */
- num = GetTickCount() & 0xffff;
- if (!num)
- num = 1;
- start = num;
- GetWindowsDirectoryW( windir, MAX_PATH );
- snprintfW( packagefile, MAX_PATH, fmt, windir, num );
- do
+ static const WCHAR szInstaller[] = {
+ '\\','I','n','s','t','a','l','l','e','r','\\',0};
+ static const WCHAR fmt[] = { '%','x','.','m','s','i',0};
+ DWORD time, len, i;
+ HANDLE handle;
+
+ time = GetTickCount();
+ GetWindowsDirectoryW( path, MAX_PATH );
+ lstrcatW( path, szInstaller );
+ CreateDirectoryW( path, NULL );
+
+ len = lstrlenW(path);
+ for (i=0; i<0x10000; i++)
{
- HANDLE handle = CreateFileW(packagefile,GENERIC_WRITE, 0, NULL,
- CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 );
+ snprintfW( &path[len], MAX_PATH - len, fmt, (time+i)&0xffff );
+ handle = CreateFileW( path, GENERIC_WRITE, 0, NULL,
+ CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 );
if (handle != INVALID_HANDLE_VALUE)
{
CloseHandle(handle);
@@ -3520,13 +3513,23 @@ static UINT msi_make_package_local( MSIP
}
if (GetLastError() != ERROR_FILE_EXISTS &&
GetLastError() != ERROR_SHARING_VIOLATION)
- break;
- if (!(++num & 0xffff)) num = 1;
- sprintfW(packagefile,fmt,num);
- } while (num != start);
+ return ERROR_FUNCTION_FAILED;
+ }
- snprintfW( path, MAX_PATH, installerPathFmt, windir );
- create_full_pathW(path);
+ return ERROR_SUCCESS;
+}
+
+static UINT msi_make_package_local( MSIPACKAGE *package, HKEY hkey )
+{
+ static const WCHAR szOriginalDatabase[] =
+ {'O','r','i','g','i','n','a','l','D','a','t','a','b','a','s','e',0};
+ WCHAR packagefile[MAX_PATH];
+ LPWSTR msiFilePath;
+ UINT r;
+
+ r = msi_get_local_package_name( packagefile );
+ if (r != ERROR_SUCCESS)
+ return r;
TRACE("Copying to local package %s\n",debugstr_w(packagefile));
More information about the wine-cvs
mailing list