Alexandre Julliard : winspool: Store generic. ppd in a resource instead of depending on an external file.
Alexandre Julliard
julliard at winehq.org
Tue Oct 8 15:41:05 CDT 2013
Module: wine
Branch: master
Commit: 8c959d6c560563d1c7b746e5e28e7245d0b34b83
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8c959d6c560563d1c7b746e5e28e7245d0b34b83
Author: Alexandre Julliard <julliard at 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
-
- at 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"
More information about the wine-cvs
mailing list