PATCH: wineps / devmode size

Marcus Meissner mm at lst.de
Sun Nov 3 15:54:39 CST 2002


Hi,

Word 2000 was calling GetPrinter(hprinter,2,...) twice, once with 0 
to get the number of bytes it wants to return and once with this
number of bytes.

However, both calls needed a different number of bytes, since in between
WINEPS got loaded and used a new, larger, DEVMODE structure.

Debugging the problem the real problem lies in the DefaultDevmode
structure of WINEPS, which does not specify the dmDriverExtra size, but
uses it in some cases, confusing WINE and the calling programs.

So I corrected the places where dmDriverExtra was not handled and
Word 2000 now prints to my CUPS printer.

Ciao, Marcus

Changelog:
	Specify existing extra size of WINEPS Devmode structure.
	Make ExtDeviceMode16 in WINEPS return the correct size.


Index: dlls/wineps/driver.c
===================================================================
RCS file: /home/wine/wine/dlls/wineps/driver.c,v
retrieving revision 1.16
diff -u -r1.16 driver.c
--- driver.c	31 Oct 2002 01:04:40 -0000	1.16
+++ driver.c	3 Nov 2002 21:18:01 -0000
@@ -285,7 +285,7 @@
 fwMode);
 
   if(!fwMode)
-    return sizeof(DEVMODEA); /* Just copy dmPublic bit of PSDRV_DEVMODE */
+    return pi->Devmode->dmPublic.dmSize + pi->Devmode->dmPublic.dmDriverExtra;
 
   if((fwMode & DM_MODIFY) && lpdmInput) {
     TRACE("DM_MODIFY set. devIn->dmFields = %08lx\n", lpdmInput->dmFields);
@@ -337,7 +337,7 @@
 
   if((fwMode & DM_COPY) || (fwMode & DM_UPDATE)) {
     if (lpdmOutput)
-        memcpy(lpdmOutput, pi->Devmode, sizeof(DEVMODEA));
+        memcpy(lpdmOutput, pi->Devmode, pi->Devmode->dmPublic.dmSize + pi->Devmode->dmPublic.dmDriverExtra );
     else
         FIXME("lpdmOutput is NULL what should we do??\n");
   }
Index: dlls/wineps/init.c
===================================================================
RCS file: /home/wine/wine/dlls/wineps/init.c,v
retrieving revision 1.39
diff -u -r1.39 init.c
--- init.c	18 Oct 2002 23:48:57 -0000	1.39
+++ init.c	3 Nov 2002 21:18:01 -0000
@@ -46,7 +46,7 @@
 /* dmSpecVersion */	0x30a,
 /* dmDriverVersion */	0x001,
 /* dmSize */		sizeof(DEVMODEA),
-/* dmDriverExtra */	0,
+/* dmDriverExtra */	sizeof(PSDRV_DEVMODEA)-sizeof(DEVMODEA),
 /* dmFields */		DM_ORIENTATION | DM_PAPERSIZE | DM_SCALE |
 			DM_COPIES | DM_DEFAULTSOURCE | DM_COLOR |
 			DM_DUPLEX | DM_YRESOLUTION | DM_TTOPTION,



More information about the wine-patches mailing list