Huw Davies : localspl: Only store the file part of the filenames in the registry.
Alexandre Julliard
julliard at winehq.org
Wed May 16 14:22:39 CDT 2012
Module: wine
Branch: master
Commit: 67886fe54fd7b3c91896b0c004ec79d1e22ca36a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=67886fe54fd7b3c91896b0c004ec79d1e22ca36a
Author: Huw Davies <huw at codeweavers.com>
Date: Wed May 16 13:48:18 2012 +0100
localspl: Only store the file part of the filenames in the registry.
---
dlls/localspl/provider.c | 96 +++++++++++++++++++++++-----------------------
1 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/dlls/localspl/provider.c b/dlls/localspl/provider.c
index 848d11e..392b8ed 100644
--- a/dlls/localspl/provider.c
+++ b/dlls/localspl/provider.c
@@ -212,41 +212,29 @@ static LPWSTR strdupW(LPCWSTR p)
* Failure: FALSE
*
*/
-static BOOL apd_copyfile(LPWSTR filename, apd_data_t *apd)
+static BOOL apd_copyfile( WCHAR *pathname, WCHAR *file_part, apd_data_t *apd )
{
- LPWSTR ptr;
- LPWSTR srcname;
- DWORD res;
+ WCHAR *srcname;
+ DWORD res;
apd->src[apd->srclen] = '\0';
apd->dst[apd->dstlen] = '\0';
- if (!filename || !filename[0]) {
+ if (!pathname || !pathname[0]) {
/* nothing to copy */
return TRUE;
}
- ptr = strrchrW(filename, '\\');
- if (ptr) {
- ptr++;
- }
- else
- {
- ptr = filename;
- }
-
- if (apd->copyflags & APD_COPY_FROM_DIRECTORY) {
- /* we have an absolute Path */
- srcname = filename;
- }
+ if (apd->copyflags & APD_COPY_FROM_DIRECTORY)
+ srcname = pathname;
else
{
srcname = apd->src;
- lstrcatW(srcname, ptr);
+ strcatW( srcname, file_part );
}
- lstrcatW(apd->dst, ptr);
+ strcatW( apd->dst, file_part );
- TRACE("%s => %s\n", debugstr_w(filename), debugstr_w(apd->dst));
+ TRACE("%s => %s\n", debugstr_w(srcname), debugstr_w(apd->dst));
/* FIXME: handle APD_COPY_NEW_FILES */
res = CopyFileW(srcname, apd->dst, FALSE);
@@ -1284,6 +1272,12 @@ end:
return (HANDLE)printer;
}
+static inline WCHAR *get_file_part( WCHAR *name )
+{
+ WCHAR *ptr = strrchrW( name, '\\' );
+ if (ptr) return ptr + 1;
+ return name;
+}
/******************************************************************************
* myAddPrinterDriverEx [internal]
@@ -1299,7 +1293,7 @@ static BOOL myAddPrinterDriverEx(DWORD level, LPBYTE pDriverInfo, DWORD dwFileCo
DRIVER_INFO_8W di;
BOOL (WINAPI *pDrvDriverEvent)(DWORD, DWORD, LPBYTE, LPARAM);
HMODULE hui;
- LPWSTR ptr;
+ WCHAR *file;
HKEY hroot;
HKEY hdrv;
DWORD disposition;
@@ -1378,43 +1372,49 @@ static BOOL myAddPrinterDriverEx(DWORD level, LPBYTE pDriverInfo, DWORD dwFileCo
RegSetValueExW(hdrv, versionW, 0, REG_DWORD, (const BYTE*) &env->driverversion,
sizeof(DWORD));
- RegSetValueExW(hdrv, driverW, 0, REG_SZ, (LPBYTE) di.pDriverPath,
- (lstrlenW(di.pDriverPath)+1)* sizeof(WCHAR));
- apd_copyfile(di.pDriverPath, &apd);
+ file = get_file_part( di.pDriverPath );
+ RegSetValueExW( hdrv, driverW, 0, REG_SZ, (LPBYTE)file, (strlenW( file ) + 1) * sizeof(WCHAR) );
+ apd_copyfile( di.pDriverPath, file, &apd );
- RegSetValueExW(hdrv, data_fileW, 0, REG_SZ, (LPBYTE) di.pDataFile,
- (lstrlenW(di.pDataFile)+1)* sizeof(WCHAR));
- apd_copyfile(di.pDataFile, &apd);
+ file = get_file_part( di.pDataFile );
+ RegSetValueExW( hdrv, data_fileW, 0, REG_SZ, (LPBYTE)file, (strlenW( file ) + 1) * sizeof(WCHAR) );
+ apd_copyfile( di.pDataFile, file, &apd );
- RegSetValueExW(hdrv, configuration_fileW, 0, REG_SZ, (LPBYTE) di.pConfigFile,
- (lstrlenW(di.pConfigFile)+1)* sizeof(WCHAR));
- apd_copyfile(di.pConfigFile, &apd);
+ file = get_file_part( di.pConfigFile );
+ RegSetValueExW( hdrv, configuration_fileW, 0, REG_SZ, (LPBYTE)file, (strlenW( file ) + 1) * sizeof(WCHAR) );
+ apd_copyfile( di.pConfigFile, file, &apd );
/* settings for level 3 */
if (di.pHelpFile)
- RegSetValueExW(hdrv, help_fileW, 0, REG_SZ, (LPBYTE) di.pHelpFile,
- (lstrlenW(di.pHelpFile)+1)* sizeof(WCHAR));
+ {
+ file = get_file_part( di.pHelpFile );
+ RegSetValueExW( hdrv, help_fileW, 0, REG_SZ, (LPBYTE)file, (strlenW( file ) + 1) * sizeof(WCHAR) );
+ apd_copyfile( di.pHelpFile, file, &apd );
+ }
else
- RegSetValueExW(hdrv, help_fileW, 0, REG_SZ, (const BYTE*)emptyW, sizeof(emptyW));
- apd_copyfile(di.pHelpFile, &apd);
+ RegSetValueExW( hdrv, help_fileW, 0, REG_SZ, (const BYTE*)emptyW, sizeof(emptyW) );
+ if (di.pDependentFiles && *di.pDependentFiles)
+ {
+ WCHAR *reg, *reg_ptr, *in_ptr;
+ reg = reg_ptr = HeapAlloc( GetProcessHeap(), 0, multi_sz_lenW( di.pDependentFiles ) );
- ptr = di.pDependentFiles;
- if (ptr)
- RegSetValueExW(hdrv, dependent_filesW, 0, REG_MULTI_SZ, (LPBYTE) di.pDependentFiles,
- multi_sz_lenW(di.pDependentFiles));
- else
- RegSetValueExW(hdrv, dependent_filesW, 0, REG_MULTI_SZ, (const BYTE*)emptyW, sizeof(emptyW));
- while ((ptr != NULL) && (ptr[0])) {
- if (apd_copyfile(ptr, &apd)) {
- ptr += lstrlenW(ptr) + 1;
- }
- else
+ for (in_ptr = di.pDependentFiles; *in_ptr; in_ptr += strlenW( in_ptr ) + 1)
{
- WARN("Failed to copy %s\n", debugstr_w(ptr));
- ptr = NULL;
+ file = get_file_part( in_ptr );
+ len = strlenW( file ) + 1;
+ memcpy( reg_ptr, file, len * sizeof(WCHAR) );
+ reg_ptr += len;
+ apd_copyfile( in_ptr, file, &apd );
}
+ *reg_ptr = 0;
+
+ RegSetValueExW( hdrv, dependent_filesW, 0, REG_MULTI_SZ, (LPBYTE)reg, (reg_ptr - reg + 1) * sizeof(WCHAR) );
+ HeapFree( GetProcessHeap(), 0, reg );
}
+ else
+ RegSetValueExW(hdrv, dependent_filesW, 0, REG_MULTI_SZ, (const BYTE*)emptyW, sizeof(emptyW));
+
/* The language-Monitor was already copied by the caller to "%SystemRoot%\system32" */
if (di.pMonitorName)
RegSetValueExW(hdrv, monitorW, 0, REG_SZ, (LPBYTE) di.pMonitorName,
More information about the wine-cvs
mailing list