openbsd-ports/print/ghostscript/gnu/patches/patch-cups_gdevcups_c

151 lines
4.9 KiB
Plaintext
Raw Normal View History

2009-04-27 04:26:23 -04:00
$OpenBSD: patch-cups_gdevcups_c,v 1.2 2009/04/27 08:26:23 bernd Exp $
--- cups/gdevcups.c.orig Mon May 14 20:22:09 2007
+++ cups/gdevcups.c Thu Oct 30 15:47:00 2008
@@ -69,6 +69,7 @@
#include "gsexit.h"
#include "arch.h"
+#include <dlfcn.h>
#include <stdlib.h>
#include <ctype.h>
#include <cups/raster.h>
@@ -87,7 +88,7 @@
#ifdef CUPS_RASTER_SYNCv1
# define cups_page_header_t cups_page_header2_t
-# define cupsRasterWriteHeader cupsRasterWriteHeader2
+# define cupsRasterWriteHeader cups->cupsRasterWriteHeader2
#else
/* The RGBW colorspace is not defined until CUPS 1.2... */
# define CUPS_CSPACE_RGBW 17
@@ -204,6 +205,14 @@ typedef struct gx_device_cups_s
cups_raster_t *stream; /* Raster stream */
cups_page_header_t header; /* PostScript page device info */
int landscape; /* Non-zero if this is landscape */
+
+ /* cups stubs, initialized in cups_open() */
+ int libCupsReady;
+ void (*cupsRasterClose) (cups_raster_t *);
+ cups_raster_t *(*cupsRasterOpen) (int, cups_mode_t);
+ unsigned (*cupsRasterWriteHeader2) (cups_raster_t *, cups_page_header2_t *);
+ unsigned (*cupsRasterWritePixels) (cups_raster_t *, unsigned char *, unsigned);
+ ppd_file_t *(*ppdOpenFile) (const char *);
} gx_device_cups;
private gx_device_procs cups_procs =
@@ -352,7 +361,14 @@ gx_device_cups gs_cups_device =
0, /* cupsRowCount */
0, /* cupsRowFeed */
0 /* cupsRowStep */
- }
+ },
+ 0, /* landscape */
+ 0, /* libCupsReady */
+ NULL, /* cupsRasterClose */
+ NULL, /* cupsRasterOpen */
+ NULL, /* cupsRasterWriteHeader2 */
+ NULL, /* cupsRasterWritePixels */
+ NULL /* ppdOpenFile */
};
/*
@@ -426,7 +442,7 @@ cups_close(gx_device *pdev) /* I - Device info */
if (cups->stream != NULL)
{
- cupsRasterClose(cups->stream);
+ cups->cupsRasterClose(cups->stream);
cups->stream = NULL;
}
@@ -2496,6 +2512,35 @@ cups_open(gx_device *pdev) /* I - Device info */
dprintf1("DEBUG2: cups_open(%p)\n", pdev);
+ if (!cups->libCupsReady) {
+ void *handle;
2009-04-27 04:26:23 -04:00
+ if (!(handle = dlopen("libcupsimage.so.3", 0))) {
+ eprintf1("ERROR: libcupsimage.so.3: %s\n", dlerror());
+ return -1;
+ }
+ if (!(cups->cupsRasterClose = dlsym(handle, "cupsRasterClose"))) {
+ eprintf1("ERROR: cupsRasterClose: %s\n", dlerror());
+ return -1;
+ }
+ if (!(cups->cupsRasterOpen = dlsym(handle, "cupsRasterOpen"))) {
+ eprintf1("ERROR: cupsRasterOpen: %s\n", dlerror());
+ return -1;
+ }
+ if (!(cups->cupsRasterWriteHeader2 = dlsym(handle, "cupsRasterWriteHeader2"))) {
+ eprintf1("ERROR: cupsRasterWriteHeader2: %s\n", dlerror());
+ return -1;
+ }
+ if (!(cups->cupsRasterWritePixels = dlsym(handle, "cupsRasterWritePixels"))) {
+ eprintf1("ERROR: cupsRasterWritePixels: %s\n", dlerror());
+ return -1;
+ }
+ if (!(cups->ppdOpenFile = dlsym(handle, "ppdOpenFile"))) {
+ eprintf1("ERROR: ppdOpenFile: %s\n", dlerror());
+ return -1;
+ }
+ cups->libCupsReady = 1;
+ }
+
cups->printer_procs.get_space_params = cups_get_space_params;
if (cups->page == 0)
@@ -2510,7 +2555,7 @@ cups_open(gx_device *pdev) /* I - Device info */
return (code);
if (cupsPPD == NULL)
- cupsPPD = ppdOpenFile(getenv("PPD"));
+ cupsPPD = cups->ppdOpenFile(getenv("PPD"));
return (0);
}
@@ -2597,7 +2642,7 @@ cups_print_pages(gx_device_printer *pdev,
if (cups->stream == NULL)
{
- if ((cups->stream = cupsRasterOpen(fileno(cups->file),
+ if ((cups->stream = cups->cupsRasterOpen(fileno(cups->file),
CUPS_RASTER_WRITE)) == NULL)
{
perror("ERROR: Unable to open raster stream - ");
@@ -3669,7 +3714,7 @@ cups_print_chunked(gx_device_printer *pdev,
* Write the bitmap data to the raster stream...
*/
- cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
+ cups->cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
}
else
{
@@ -3677,7 +3722,7 @@ cups_print_chunked(gx_device_printer *pdev,
* Write the scanline data to the raster stream...
*/
- cupsRasterWritePixels(cups->stream, srcptr, cups->header.cupsBytesPerLine);
+ cups->cupsRasterWritePixels(cups->stream, srcptr, cups->header.cupsBytesPerLine);
}
}
}
@@ -4345,7 +4390,7 @@ cups_print_banded(gx_device_printer *pdev,
* Write the bitmap data to the raster stream...
*/
- cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
+ cups->cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
}
}
@@ -4716,7 +4761,7 @@ cups_print_planar(gx_device_printer *pdev,
* Write the bitmap data to the raster stream...
*/
- cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
+ cups->cupsRasterWritePixels(cups->stream, dst, cups->header.cupsBytesPerLine);
}
}