Module: wine Branch: master Commit: 8c959d6c560563d1c7b746e5e28e7245d0b34b83 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8c959d6c560563d1c7b746e5e2...
Author: Alexandre Julliard julliard@winehq.org Date: Sat Oct 5 12:54:38 2013 +0200
winspool: Store generic.ppd in a resource instead of depending on an external file.
---
configure | 5 +-- configure.ac | 3 +- dlls/wineps.drv/Makefile.in | 10 ----- dlls/{wineps.drv => winspool.drv}/generic.ppd | 0 dlls/winspool.drv/info.c | 48 ++++++++++++++---------- dlls/winspool.drv/winspool.rc | 3 ++ 6 files changed, 33 insertions(+), 36 deletions(-)
diff --git a/configure b/configure index 24ed2a8..c25d104 100755 --- a/configure +++ b/configure @@ -16598,8 +16598,6 @@ Makefile: Makefile.in Make.vars.in Make.rules config.status
ac_config_links="$ac_config_links dlls/shell32/AUTHORS:AUTHORS" wine_fn_config_symlink -d dlls/shell32 dlls/shell32/AUTHORS -ac_config_links="$ac_config_links dlls/wineps.drv/generic.ppd:dlls/wineps.drv/generic.ppd" -test "$srcdir" = "." || wine_fn_config_symlink dlls/wineps.drv/generic.ppd if test "x$enable_fonts" != xno; then ac_config_links="$ac_config_links fonts/marlett.ttf:fonts/marlett.ttf" ac_config_links="$ac_config_links fonts/symbol.ttf:fonts/symbol.ttf" @@ -17228,7 +17226,7 @@ wine_fn_config_dll winemac.drv enable_winemac_drv wine_fn_config_dll winemapi enable_winemapi wine_fn_config_dll winemp3.acm enable_winemp3_acm wine_fn_config_dll wineoss.drv enable_wineoss_drv -wine_fn_config_dll wineps.drv enable_wineps_drv install-lib,po +wine_fn_config_dll wineps.drv enable_wineps_drv po wine_fn_config_dll wineps16.drv16 enable_win16 wine_fn_config_dll wineqtdecoder enable_wineqtdecoder wine_fn_config_dll winex11.drv enable_winex11_drv @@ -18217,7 +18215,6 @@ do "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; "include/stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS include/stamp-h" ;; "dlls/shell32/AUTHORS") CONFIG_LINKS="$CONFIG_LINKS dlls/shell32/AUTHORS:AUTHORS" ;; - "dlls/wineps.drv/generic.ppd") CONFIG_LINKS="$CONFIG_LINKS dlls/wineps.drv/generic.ppd:dlls/wineps.drv/generic.ppd" ;; "fonts/marlett.ttf") CONFIG_LINKS="$CONFIG_LINKS fonts/marlett.ttf:fonts/marlett.ttf" ;; "fonts/symbol.ttf") CONFIG_LINKS="$CONFIG_LINKS fonts/symbol.ttf:fonts/symbol.ttf" ;; "fonts/tahoma.ttf") CONFIG_LINKS="$CONFIG_LINKS fonts/tahoma.ttf:fonts/tahoma.ttf" ;; diff --git a/configure.ac b/configure.ac index a508f8b..763889b 100644 --- a/configure.ac +++ b/configure.ac @@ -2617,7 +2617,6 @@ Makefile: Makefile.in Make.vars.in Make.rules config.status @./config.status Make.tmp Makefile])
WINE_CONFIG_SYMLINK(dlls/shell32,,[AUTHORS]) -WINE_CONFIG_SYMLINK(dlls/wineps.drv,dlls/wineps.drv,[generic.ppd]) WINE_CONFIG_SYMLINK(fonts,fonts,[marlett.ttf,symbol.ttf,tahoma.ttf,tahomabd.ttf],enable_fonts) WINE_CONFIG_SYMLINK(loader,loader,[l_intl.nls]) WINE_CONFIG_SYMLINK(po,po,[LINGUAS]) @@ -3198,7 +3197,7 @@ WINE_CONFIG_DLL(winemac.drv) WINE_CONFIG_DLL(winemapi) WINE_CONFIG_DLL(winemp3.acm) WINE_CONFIG_DLL(wineoss.drv) -WINE_CONFIG_DLL(wineps.drv,,[install-lib,po]) +WINE_CONFIG_DLL(wineps.drv,,[po]) WINE_CONFIG_DLL(wineps16.drv16,enable_win16) WINE_CONFIG_DLL(wineqtdecoder) WINE_CONFIG_DLL(winex11.drv) diff --git a/dlls/wineps.drv/Makefile.in b/dlls/wineps.drv/Makefile.in index bd810f9..3775f28 100644 --- a/dlls/wineps.drv/Makefile.in +++ b/dlls/wineps.drv/Makefile.in @@ -67,13 +67,3 @@ RC_SRCS = wineps.rc EXTRASUBDIRS = data
@MAKE_DLL_RULES@ - -install-ppd:: $(DESTDIR)$(datadir)/wine dummy - $(INSTALL_DATA) $(srcdir)/generic.ppd $(DESTDIR)$(datadir)/wine/generic.ppd - -.PHONY: install-ppd - -@WOW64_DISABLE@ install install-lib:: install-ppd - -uninstall:: - $(RM) $(DESTDIR)$(datadir)/wine/generic.ppd diff --git a/dlls/wineps.drv/generic.ppd b/dlls/winspool.drv/generic.ppd similarity index 100% rename from dlls/wineps.drv/generic.ppd rename to dlls/winspool.drv/generic.ppd diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c index 2ab2401..ed4b314 100644 --- a/dlls/winspool.drv/info.c +++ b/dlls/winspool.drv/info.c @@ -646,7 +646,6 @@ static char *get_fallback_ppd_name( const char *printer_name ) HKEY hkey; DWORD needed, type; char *ret = NULL; - const char *data_dir, *filename;
if (RegOpenKeyW( HKEY_CURRENT_USER, ppds_key, &hkey ) == ERROR_SUCCESS ) { @@ -666,22 +665,7 @@ static char *get_fallback_ppd_name( const char *printer_name ) RegCloseKey( hkey ); if (ret) return expand_env_string( ret, type ); } - - if ((data_dir = wine_get_data_dir())) filename = "/generic.ppd"; - else if ((data_dir = wine_get_build_dir())) filename = "/dlls/wineps.drv/generic.ppd"; - else - { - ERR( "Error getting PPD file name for printer '%s'\n", debugstr_a(printer_name) ); - return NULL; - } - ret = HeapAlloc( GetProcessHeap(), 0, strlen(data_dir) + strlen(filename) + 1 ); - if (ret) - { - strcpy( ret, data_dir ); - strcat( ret, filename ); - } - - return ret; + return NULL; }
static BOOL copy_file( const char *src, const char *dst ) @@ -707,15 +691,39 @@ fail: return ret; }
+static BOOL get_internal_fallback_ppd( const WCHAR *ppd ) +{ + static const WCHAR typeW[] = {'P','P','D','F','I','L','E',0}; + + char *ptr, *end; + DWORD size, written; + HANDLE file; + BOOL ret; + HRSRC res = FindResourceW( WINSPOOL_hInstance, MAKEINTRESOURCEW(1), typeW ); + + if (!res || !(ptr = LoadResource( WINSPOOL_hInstance, res ))) return FALSE; + size = SizeofResource( WINSPOOL_hInstance, res ); + end = memchr( ptr, 0, size ); /* resource file may contain additional nulls */ + if (end) size = end - ptr; + file = CreateFileW( ppd, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, 0 ); + if (file == INVALID_HANDLE_VALUE) return FALSE; + ret = WriteFile( file, ptr, size, &written, NULL ) && written == size; + CloseHandle( file ); + if (ret) TRACE( "using internal fallback for %s\n", debugstr_w( ppd )); + else DeleteFileW( ppd ); + return ret; +} + static BOOL get_fallback_ppd( const char *printer_name, const WCHAR *ppd ) { - char *src = get_fallback_ppd_name( printer_name ); - char *dst = wine_get_unix_file_name( ppd ); + char *dst, *src = get_fallback_ppd_name( printer_name ); BOOL ret = FALSE;
+ if (!src) return get_internal_fallback_ppd( ppd ); + TRACE( "(%s %s) found %s\n", debugstr_a(printer_name), debugstr_w(ppd), debugstr_a(src) );
- if (!src || !dst) goto fail; + if (!(dst = wine_get_unix_file_name( ppd ))) goto fail;
if (symlink( src, dst ) == -1) if (errno != ENOSYS || !copy_file( src, dst )) diff --git a/dlls/winspool.drv/winspool.rc b/dlls/winspool.drv/winspool.rc index 9b88b8d..6936353 100644 --- a/dlls/winspool.drv/winspool.rc +++ b/dlls/winspool.drv/winspool.rc @@ -42,6 +42,9 @@ END
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+/* @makedep: generic.ppd */ +1 PPDFILE generic.ppd + #define WINE_FILENAME_STR "winspool.drv" #define WINE_FILEDESCRIPTION_STR "Wine core printer driver"