]> git.pld-linux.org Git - packages/cups.git/commitdiff
- outdated
authorKarol Krenski <charles@pld-linux.org>
Fri, 28 Jul 2006 20:49:22 +0000 (20:49 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    cups-svn5706.patch -> 1.2

cups-svn5706.patch [deleted file]

diff --git a/cups-svn5706.patch b/cups-svn5706.patch
deleted file mode 100644 (file)
index dfe95e1..0000000
+++ /dev/null
@@ -1,10335 +0,0 @@
-diff -durN release-1.2.1/backend/backend-private.h cups-1.2.x/backend/backend-private.h
---- release-1.2.1/backend/backend-private.h    1970-01-01 01:00:00.000000000 +0100
-+++ cups-1.2.x/backend/backend-private.h       2006-06-26 12:42:40.000000000 +0100
-@@ -0,0 +1,73 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Backend support definitions for the Common UNIX Printing System (CUPS).
-+ *
-+ *   Copyright 1997-2006 by Easy Software Products, all rights reserved.
-+ *
-+ *   These coded instructions, statements, and computer programs are the
-+ *   property of Easy Software Products and are protected by Federal
-+ *   copyright law.  Distribution and use rights are outlined in the file
-+ *   "LICENSE" which should have been included with this file.  If this
-+ *   file is missing or damaged please contact Easy Software Products
-+ *   at:
-+ *
-+ *       Attn: CUPS Licensing Information
-+ *       Easy Software Products
-+ *       44141 Airport View Drive, Suite 204
-+ *       Hollywood, Maryland 20636 USA
-+ *
-+ *       Voice: (301) 373-9600
-+ *       EMail: cups-info@cups.org
-+ *         WWW: http://www.cups.org
-+ *
-+ *   This file is subject to the Apple OS-Developed Software exception.
-+ */
-+
-+#ifndef _CUPS_BACKEND_PRIVATE_H_
-+#  define _CUPS_BACKEND_PRIVATE_H_
-+
-+
-+/*
-+ * Include necessary headers.
-+ */
-+
-+#  include <cups/backend.h>
-+#  include <cups/cups.h>
-+#  include <cups/debug.h>
-+#  include <stdlib.h>
-+#  include <errno.h>
-+#  include <cups/string.h>
-+#  include <signal.h>
-+
-+
-+/*
-+ * C++ magic...
-+ */
-+
-+#  ifdef _cplusplus
-+extern "C" {
-+#  endif /* _cplusplus */
-+
-+
-+/*
-+ * Prototypes...
-+ */
-+
-+extern int    backendGetDeviceID(int fd, char *device_id, int device_id_size,
-+                                 char *make_model, int make_model_size,
-+                                 const char *scheme, char *uri, int uri_size);
-+extern int    backendGetMakeModel(const char *device_id, char *make_model,
-+                                  int make_model_size);
-+extern ssize_t        backendRunLoop(int print_fd, int device_fd, int use_bc);
-+
-+
-+#  ifdef _cplusplus
-+}
-+#  endif /* _cplusplus */
-+#endif /* !_CUPS_BACKEND_PRIVATE_H_ */
-+
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -durN release-1.2.1/backend/Dependencies cups-1.2.x/backend/Dependencies
---- release-1.2.1/backend/Dependencies 2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/Dependencies    2006-06-26 12:42:40.000000000 +0100
-@@ -9,26 +9,31 @@
- lpd.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
- lpd.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
- lpd.o: ../cups/string.h
--parallel.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
--parallel.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
--parallel.o: ../cups/language.h ../cups/string.h ../config.h ieee1284.c
--parallel.o: ../cups/debug.h
-+pap.o: ../cups/http.h ../cups/md5.h
-+parallel.o: backend-private.h ../cups/backend.h ../cups/cups.h ../cups/ipp.h
-+parallel.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
-+parallel.o: ../cups/file.h ../cups/language.h ../cups/debug.h
-+parallel.o: ../cups/string.h ../config.h
- scsi.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
- scsi.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
- scsi.o: ../cups/language.h ../cups/string.h ../config.h
--serial.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
--serial.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
--serial.o: ../cups/language.h ../cups/string.h ../config.h
--snmp.o: ../cups/backend.h ../cups/http-private.h ../config.h ../cups/http.h
--snmp.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
--snmp.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
--snmp.o: ../cups/string.h ../cups/array.h ../cups/file.h ieee1284.c
--snmp.o: ../cups/debug.h
--socket.o: ../cups/backend.h ../cups/http-private.h ../config.h ../cups/http.h
--socket.o: ../cups/md5.h ../cups/ipp-private.h ../cups/ipp.h ../cups/cups.h
--socket.o: ../cups/ppd.h ../cups/array.h ../cups/file.h ../cups/language.h
--socket.o: ../cups/string.h
--test1284.o: ../cups/string.h ../config.h ieee1284.c ../cups/debug.h
-+serial.o: backend-private.h ../cups/backend.h ../cups/cups.h ../cups/ipp.h
-+serial.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
-+serial.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
-+serial.o: ../config.h
-+snmp.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
-+snmp.o: ../cups/ipp-private.h ../cups/ipp.h backend-private.h
-+snmp.o: ../cups/backend.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
-+snmp.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
-+snmp.o: ../cups/array.h ../cups/file.h
-+socket.o: ../cups/http-private.h ../config.h ../cups/http.h ../cups/md5.h
-+socket.o: ../cups/ipp-private.h ../cups/ipp.h backend-private.h
-+socket.o: ../cups/backend.h ../cups/cups.h ../cups/ppd.h ../cups/array.h
-+socket.o: ../cups/file.h ../cups/language.h ../cups/debug.h ../cups/string.h
-+test1284.o: ../cups/string.h ../config.h ieee1284.c backend-private.h
-+test1284.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
-+test1284.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
-+test1284.o: ../cups/language.h ../cups/debug.h
- usb.o: ../cups/backend.h ../cups/cups.h ../cups/ipp.h ../cups/http.h
- usb.o: ../cups/md5.h ../cups/ppd.h ../cups/array.h ../cups/file.h
- usb.o: ../cups/language.h ../cups/string.h ../config.h
-diff -durN release-1.2.1/backend/easysw-firewire-design.txt cups-1.2.x/backend/easysw-firewire-design.txt
---- release-1.2.1/backend/easysw-firewire-design.txt   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/easysw-firewire-design.txt      1970-01-01 01:00:00.000000000 +0100
-@@ -1,71 +0,0 @@
--Preliminary Design for CUPS Firewire Printer Backend - 03/19/2002
-------------------------------------------------------------------
--
--OVERVIEW
--
--    Easy Software Products will develop an IEEE-1394, a.k.a.
--    Firewire, printing interface for its Common UNIX Printing
--    System ("CUPS") for initial use under the Linux operating
--    system.  A follow-on implementation for MacOS X is
--    anticipated as well.
--
--    The operating system interfaces for IEEE-1394 ports vary
--    widely; the CUPS printing interface will abstract the OS
--    layer to a simpler interface geared towards discovering,
--    opening, reading from, writing to, and closing IEEE-1394
--    printers.
--
--    The initial development of the CUPS backend will be targeted
--    at the EPSON Stylus Pro 10000 large format printer, which
--    requires the bandwidth provided by Firewire in order to
--    print at full speed.  This printer supports printing via
--    Serial Bus Protocol 2 (SBP-2) using the SCSI and PWG command
--    sets. The CUPS backend will implement the PWG command set on
--    LUN 0 only.
--
--
--OS ABSTRACTION LAYER
--
--    The OS abstraction layer will be a thin client library that
--    implements the following functions:
--
--        ieee1394_list
--      ieee1394_open
--      ieee1394_close
--      ieee1394_read
--      ieee1394_write
--      ieee1394_error
--
--    The "ieee1394_list" function will list all of the available
--    printer devices on the bus.  The device information will
--    consist of the device URI (ieee1394:/something) used to
--    access the device and the make and model information, if
--    available, for the device ("EPSON Stylus Printer").
--
--    The "ieee1394_open" and "ieee1394_close" functions will open
--    and close a connection to the printer, respectively.
--
--    The "ieee1394_read" and "ieee1394_write" functions will read
--    and write data to and from the printer, respectively.  The
--    read function will be non-blocking, returning data only if
--    there is data coming back from the printer.
--
--    The "ieee1394_error" function will return a string
--    describing the last error or NULL if no error occurred.
--
--    The library will be responsible for creating any background
--    threads that are needed to monitor the connection to the
--    printer.
--
--
--CUPS BACKEND
--
--    The CUPS backend will use the OS abstraction layer to list
--    and access the Firewire printers.  The "main" function will
--    read and write printer data, while the "list_devices"
--    function will be called as necessary to identify the
--    available devices.
--
--    The CUPS 1.1 backend will record any status information in
--    the error log file, while the 1.2 backend will supply it to
--    the printer driver process.
-diff -durN release-1.2.1/backend/easysw-firewire-linux.txt cups-1.2.x/backend/easysw-firewire-linux.txt
---- release-1.2.1/backend/easysw-firewire-linux.txt    2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/easysw-firewire-linux.txt       1970-01-01 01:00:00.000000000 +0100
-@@ -1,35 +0,0 @@
--Easy Software Products
--44141 Airport View Drive
--Suite 204
--Hollywood, Maryland 20636
--+1.301.373.9600
--March 8, 2002
--
--
--Subject: EPSON Firewire Printer Driver for Linux
--
--Currently, no Firewire printer support exists for Linux.  Since
--the latest EPSON printer products depend on the Firewire
--interface to print at full speed, a solution is needed to
--support customers using Linux as their server platform.
--
--The Linux Firewire subsystem provides a user-mode driver
--interface that allows driver programs to access Firewire
--devices.  Easy Software Products will utilize this interface to
--develop a "backend" program for the Common UNIX Printing System
--that will allow users to print to EPSON printers using the
--Firewire interface.
--
--After examining the Linux interface, we estimate that it will
--require approximately 30 hours of development time to write,
--test, and document the Firewire backend, for a total cost of
--$3,000. The new backend will become a standard part of the CUPS
--software distribution and will be included with at least the
--following Linux distributions:
--
--    - Caldera Linux
--    - Mandrake Linux
--    - Red Hat Linux
--    - SuSE Linux
--
--ESP will provide EPSON with binaries for Red Hat Linux 7.2.
-diff -durN release-1.2.1/backend/ieee1284.c cups-1.2.x/backend/ieee1284.c
---- release-1.2.1/backend/ieee1284.c   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/ieee1284.c      2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   IEEE-1284 support functions for the Common UNIX Printing System (CUPS).
-  *
-@@ -25,51 +25,41 @@
-  *
-  * Contents:
-  *
-- *   get_device_id()  - Get the IEEE-1284 device ID string and corresponding
-- *                      URI.
-- *   get_make_model() - Get the make and model string from the device ID.
-+ *   backendGetDeviceID()  - Get the IEEE-1284 device ID string and
-+ *                           corresponding URI.
-+ *   backendGetMakeModel() - Get the make and model string from the device ID.
-  */
- /*
-  * Include necessary headers.
-  */
--#include <cups/debug.h>
--
-+#include "backend-private.h"
--/*
-- * Prototypes...
-- */
-+#ifdef __linux
-+#  include <sys/ioctl.h>
-+#  include <linux/lp.h>
-+#  define IOCNR_GET_DEVICE_ID         1
-+#  define LPIOC_GET_DEVICE_ID(len)    _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
-+#endif /* __linux */
--static int    get_make_model(const char *device_id, char *make_model,
--                             int make_model_size);
-+#ifdef __sun
-+#  ifdef __sparc
-+#    include <sys/ecppio.h>
-+#  else
-+#    include <sys/ioccom.h>
-+#    include <sys/ecppsys.h>
-+#  endif /* __sparc */
-+#endif /* __sun */
- /*
-- * 'get_device_id()' - Get the IEEE-1284 device ID string and
-- *                     corresponding URI.
-+ * 'backendGetDeviceID()' - Get the IEEE-1284 device ID string and
-+ *                          corresponding URI.
-  */
--#ifndef SNMP_BACKEND
--#  ifdef __linux
--#    include <sys/ioctl.h>
--#    include <linux/lp.h>
--#    define IOCNR_GET_DEVICE_ID               1
--#    define LPIOC_GET_DEVICE_ID(len)  _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len)
--#  endif /* __linux */
--
--#  ifdef __sun
--#    ifdef __sparc
--#      include <sys/ecppio.h>
--#    else
--#      include <sys/ioccom.h>
--#      include <sys/ecppsys.h>
--#    endif /* __sparc */
--#  endif /* __sun */
--
--
- int                                   /* O - 0 on success, -1 on failure */
--get_device_id(
-+backendGetDeviceID(
-     int        fd,                    /* I - File descriptor */
-     char       *device_id,            /* O - 1284 device ID */
-     int        device_id_size,                /* I - Size of buffer */
-@@ -93,7 +83,7 @@
- #endif /* __sun && ECPPIOC_GETDEVID */
--  DEBUG_printf(("get_device_id(fd=%d, device_id=%p, device_id_size=%d, "
-+  DEBUG_printf(("backendGetDeviceID(fd=%d, device_id=%p, device_id_size=%d, "
-                 "make_model=%p, make_model_size=%d, scheme=\"%s\", "
-               "uri=%p, uri_size=%d)\n", fd, device_id, device_id_size,
-               make_model, make_model_size, scheme ? scheme : "(null)",
-@@ -107,7 +97,7 @@
-       !device_id || device_id_size < 32 ||
-       !make_model || make_model_size < 32)
-   {
--    DEBUG_puts("get_device_id: Bad args!");
-+    DEBUG_puts("backendGetDeviceID: Bad args!");
-     return (-1);
-   }
-@@ -155,7 +145,7 @@
-   }
- #  ifdef DEBUG
-   else
--    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
-+    printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
- #  endif /* DEBUG */
- #endif /* __linux */
-@@ -178,11 +168,11 @@
-   }
- #  ifdef DEBUG
-   else
--    printf("get_device_id: ioctl failed - %s\n", strerror(errno));
-+    printf("backendGetDeviceID: ioctl failed - %s\n", strerror(errno));
- #  endif /* DEBUG */
- #endif /* __sun && ECPPIOC_GETDEVID */
--  DEBUG_printf(("get_device_id: device_id=\"%s\"\n", device_id));
-+  DEBUG_printf(("backendGetDeviceID: device_id=\"%s\"\n", device_id));
-   if (!*device_id)
-     return (-1);
-@@ -191,7 +181,7 @@
-   * Get the make and model...
-   */
--  get_make_model(device_id, make_model, make_model_size);
-+  backendGetMakeModel(device_id, make_model, make_model_size);
-  /*
-   * Then generate a device URI...
-@@ -303,15 +293,14 @@
-   return (0);
- }
--#endif /* !SNMP_BACKEND */
- /*
-- * 'get_make_model()' - Get the make and model string from the device ID.
-+ * 'backendGetMakeModel()' - Get the make and model string from the device ID.
-  */
- int                                   /* O - 0 on success, -1 on failure */
--get_make_model(
-+backendGetMakeModel(
-     const char *device_id,            /* O - 1284 device ID */
-     char       *make_model,           /* O - Make/model */
-     int        make_model_size)               /* I - Size of buffer */
-@@ -322,7 +311,7 @@
-       *mdl;                           /* Model string */
--  DEBUG_printf(("get_make_model(device_id=\"%s\", "
-+  DEBUG_printf(("backendGetMakeModel(device_id=\"%s\", "
-                 "make_model=%p, make_model_size=%d)\n", device_id,
-               make_model, make_model_size));
-@@ -332,7 +321,7 @@
-   if (!device_id || !*device_id || !make_model || make_model_size < 32)
-   {
--    DEBUG_puts("get_make_model: Bad args!");
-+    DEBUG_puts("backendGetMakeModel: Bad args!");
-     return (-1);
-   }
-@@ -506,5 +495,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/ieee1394.c cups-1.2.x/backend/ieee1394.c
---- release-1.2.1/backend/ieee1394.c   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/ieee1394.c      1970-01-01 01:00:00.000000000 +0100
-@@ -1,267 +0,0 @@
--/*
-- * "$Id$"
-- *
-- *   IEEE-1394 backend for the Common UNIX Printing System (CUPS).
-- *
-- *   Copyright 2002 by Easy Software Products, all rights reserved.
-- *
-- *   Redistribution and use in source and binary forms, with or
-- *   without modification, are permitted provided that the
-- *   following conditions are met:
-- *
-- *     1. Redistributions of source code must retain the above
-- *      copyright notice, this list of conditions and the
-- *      following disclaimer.
-- *
-- *     2. Redistributions in binary form must reproduce the
-- *      above copyright notice, this list of conditions and
-- *      the following disclaimer in the documentation and/or
-- *      other materials provided with the distribution.
-- *
-- *     3. All advertising materials mentioning features or use
-- *      of this software must display the following
-- *      acknowledgement:
-- *
-- *        This product includes software developed by Easy
-- *        Software Products.
-- *
-- *     4. The name of Easy Software Products may not be used to
-- *      endorse or promote products derived from this software
-- *      without specific prior written permission.
-- *
-- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
-- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
-- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-- *   DAMAGE.
-- *
-- * Contents:
-- *
-- *   main()         - Send a file to the printer.
-- *   list_devices() - List all known printer devices...
-- */
--
--/*
-- * Include necessary headers.
-- */
--
--#include "ieee1394.h"
--
--
--/*
-- * Local functions...
-- */
--
--void  list_devices(void);
--
--
--/*
-- * 'main()' - Send a file to the printer.
-- *
-- * Usage:
-- *
-- *    printer-uri job-id user title copies options [file]
-- */
--
--int                   /* O - Exit status */
--main(int  argc,               /* I - Number of command-line arguments (6 or 7) */
--     char *argv[])    /* I - Command-line arguments */
--{
--  ieee1394_dev_t dev;         /* Printer device */
--  int         fp;             /* Print file */
--  int         copies;         /* Number of copies to print */
--  int         rbytes;         /* Number of bytes read from device */
--  size_t      nbytes,         /* Number of bytes read from file */
--              tbytes;         /* Total number of bytes written */
--  char                buffer[8192];   /* Input/output buffer */
--#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
--  struct sigaction action;    /* Actions for POSIX signals */
--#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
--
--
-- /*
--  * Make sure status messages are not buffered...
--  */
--
--  setbuf(stderr, NULL);
--
-- /*
--  * Check command-line...
--  */
--
--  if (argc == 1)
--  {
--    list_devices();
--
--    return (0);
--  }
--  else if (argc < 6 || argc > 7)
--  {
--    fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
--            argv[0]);
--    return (1);
--  }
--
-- /*
--  * If we have 7 arguments, print the file named on the command-line.
--  * Otherwise, send stdin instead...
--  */
--
--  if (argc == 6)
--  {
--    fp     = 0;
--    copies = 1;
--  }
--  else
--  {
--   /*
--    * Try to open the print file...
--    */
--
--    if ((fp = open(argv[6], O_RDONLY)) < 0)
--    {
--      perror("ERROR: unable to open print file");
--      return (1);
--    }
--
--    copies = atoi(argv[4]);
--  }
--
-- /*
--  * Try to open the printer device...
--  */
--
--  fputs("STATE: +connecting-to-device\n", stderr);
--
--  do
--  {
--    if ((dev = ieee1394_open(argv[0])) == NULL)
--    {
--      fputs("INFO: Firewire printer busy; will retry in 30 seconds...\n", stderr);
--      sleep(30);
--    }
--  }
--  while (dev == NULL);
--
--  fputs("STATE: -connecting-to-device\n", stderr);
--
-- /*
--  * Now that we are "connected" to the port, ignore SIGTERM so that we
--  * can finish out any page data the driver sends (e.g. to eject the
--  * current page...  Only ignore SIGTERM if we are printing data from
--  * stdin (otherwise you can't cancel raw jobs...)
--  */
--
--  if (argc < 7)
--  {
--#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
--    sigset(SIGTERM, SIG_IGN);
--#elif defined(HAVE_SIGACTION)
--    memset(&action, 0, sizeof(action));
--
--    sigemptyset(&action.sa_mask);
--    action.sa_handler = SIG_IGN;
--    sigaction(SIGTERM, &action, NULL);
--#else
--    signal(SIGTERM, SIG_IGN);
--#endif /* HAVE_SIGSET */
--  }
--
-- /*
--  * Finally, send the print file...
--  */
--
--  while (copies > 0)
--  {
--    copies --;
--
--    if (fp != 0)
--    {
--      fputs("PAGE: 1 1\n", stderr);
--      lseek(fp, 0, SEEK_SET);
--    }
--
--    tbytes = 0;
--    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
--    {
--     /*
--      * Write the print data to the printer...
--      */
--
--      tbytes += nbytes;
--
--      if (ieee1394_write(dev, buffer, nbytes) < 0)
--      {
--      perror("ERROR: Unable to send print file to printer");
--      break;
--      }
--
--      if ((rbytes = ieee1394_read(dev, buffer, sizeof(buffer))) > 0)
--        fprintf(stderr, "INFO: Read %d bytes from printer...\n", rbytes);
--
--      if (argc > 6)
--      fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
--              (unsigned long)tbytes);
--    }
--  }
--
-- /*
--  * Close the printer device and input file and return...
--  */
--
--  ieee1394_close(dev);
--
--  if (fp != 0)
--    close(fp);
--
--  fputs("INFO: Ready to print.\n", stderr);
--
--  return (0);
--}
--
--
--/*
-- * 'list_devices()' - List all known devices...
-- */
--
--void
--list_devices(void)
--{
--  int                 i,              /* Looping var */
--                      num_info;       /* Number of devices */
--  ieee1394_info_t     *info;          /* Devices... */
--
--
-- /*
--  * Get the available devices...
--  */
--
--  info = ieee1394_list(&num_info);
--
-- /*
--  * List them as needed...
--  */
--
--  if (num_info > 0)
--  {
--    for (i = 0; i < num_info; i ++)
--      printf("direct %s \"%s\" \"%s\"\n", info[i].uri,
--             info[i].make_model, info[i].description);
--
--    free(info);
--  }
--}
--
--
--/*
-- * End of "$Id$".
-- */
-diff -durN release-1.2.1/backend/ieee1394.h cups-1.2.x/backend/ieee1394.h
---- release-1.2.1/backend/ieee1394.h   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/ieee1394.h      1970-01-01 01:00:00.000000000 +0100
-@@ -1,103 +0,0 @@
--/*
-- * "$Id$"
-- *
-- *   IEEE-1394 header for the Common UNIX Printing System (CUPS).
-- *
-- *   Copyright 2002 by Easy Software Products, all rights reserved.
-- *
-- *   Redistribution and use in source and binary forms, with or
-- *   without modification, are permitted provided that the
-- *   following conditions are met:
-- *
-- *     1. Redistributions of source code must retain the above
-- *      copyright notice, this list of conditions and the
-- *      following disclaimer.
-- *
-- *     2. Redistributions in binary form must reproduce the
-- *      above copyright notice, this list of conditions and
-- *      the following disclaimer in the documentation and/or
-- *      other materials provided with the distribution.
-- *
-- *     3. All advertising materials mentioning features or use
-- *      of this software must display the following
-- *      acknowledgement:
-- *
-- *        This product includes software developed by Easy
-- *        Software Products.
-- *
-- *     4. The name of Easy Software Products may not be used to
-- *      endorse or promote products derived from this software
-- *      without specific prior written permission.
-- *
-- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
-- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
-- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-- *   DAMAGE.
-- */
--
--/*
-- * Include necessary headers.
-- */
--
--#include <cups/cups.h>
--#include <stdio.h>
--#include <stdlib.h>
--#include <stdarg.h>
--#include <cups/string.h>
--#include <errno.h>
--#include <sys/types.h>
--#include <sys/stat.h>
--#include <signal.h>
--
--#ifdef WIN32
--#  include <io.h>
--#else
--#  include <unistd.h>
--#  include <fcntl.h>
--#endif /* WIN32 */
--
--
--/*
-- * Device information structure...
-- */
--
--typedef struct
--{
--  char        uri[HTTP_MAX_URI],      /* Device URI */
--      description[128],       /* Description of port */
--      make_model[128];        /* Make and model */
--} ieee1394_info_t;
--
--
--/*
-- * Private device connection information...
-- */
--
--typedef void  *ieee1394_dev_t;
--
--
--/*
-- * Prototypes for standard IEEE-1394 interface...
-- */
--
--extern ieee1394_info_t        *ieee1394_list(int *num_devices);
--extern ieee1394_dev_t ieee1394_open(const char *uri);
--extern int            ieee1394_close(ieee1394_dev_t dev);
--extern int            ieee1394_read(ieee1394_dev_t dev, char *buffer, int len);
--extern int            ieee1394_write(ieee1394_dev_t dev, char *buffer, int len);
--extern const char     *ieee1394_error(void);
--
--
--/*
-- * End of "$Id$".
-- */
-diff -durN release-1.2.1/backend/ieee1394-linux.c cups-1.2.x/backend/ieee1394-linux.c
---- release-1.2.1/backend/ieee1394-linux.c     2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/ieee1394-linux.c        1970-01-01 01:00:00.000000000 +0100
-@@ -1,877 +0,0 @@
--/*
-- * "$Id$"
-- *
-- *   Linux IEEE-1394 glue for the Common UNIX Printing System (CUPS).
-- *
-- *   Copyright 2002 by Easy Software Products, all rights reserved.
-- *
-- *   Redistribution and use in source and binary forms, with or
-- *   without modification, are permitted provided that the
-- *   following conditions are met:
-- *
-- *     1. Redistributions of source code must retain the above
-- *      copyright notice, this list of conditions and the
-- *      following disclaimer.
-- *
-- *     2. Redistributions in binary form must reproduce the
-- *      above copyright notice, this list of conditions and
-- *      the following disclaimer in the documentation and/or
-- *      other materials provided with the distribution.
-- *
-- *     3. All advertising materials mentioning features or use
-- *      of this software must display the following
-- *      acknowledgement:
-- *
-- *        This product includes software developed by Easy
-- *        Software Products.
-- *
-- *     4. The name of Easy Software Products may not be used to
-- *      endorse or promote products derived from this software
-- *      without specific prior written permission.
-- *
-- *   THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
-- *   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
-- *   BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-- *   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- *   DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS
-- *   BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-- *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- *   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-- *   HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-- *   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-- *   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- *   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-- *   DAMAGE.
-- *
-- * Contents:
-- *
-- *   get_device_id()  - Get the IEEE-1284 device ID for a node...
-- *   get_unit_type()  - Get the unit type for a node...
-- *   show_data()      - Show a data node...
-- *   show_dir()       - Show a directory list...
-- *   ieee1394_list()  - List the available printer devices.
-- *   ieee1394_open()  - Open a printer device.
-- *   ieee1394_close() - Close a printer device.
-- *   ieee1394_read()  - Read from a printer device.
-- *   ieee1394_write() - Write data to a printer device.
-- *   ieee1394_error() - Return the last error.
-- */
--
--/*
-- * Include necessary headers.
-- */
--
--#include "ieee1394.h"
--#include <cups/debug.h>
--#include <libraw1394/raw1394.h>
--#include <libraw1394/csr.h>
--
--
--/*
-- * Limits...
-- */
--
--#define MAX_NODES     100
--
--
--/*
-- * Structures...
-- */
--
--typedef struct
--{
--  char                        uri[HTTP_MAX_URI],/* URI for this node... */
--                      description[128],/* Description of port */
--                      make_model[128];/* Make and model */
--  int                 port,           /* Port where this node is found */
--                      node;           /* Node number */
--  unsigned long long  addr;           /* Management address */
--} linux1394_node_t;
--
--typedef struct
--{
--  raw1394handle_t     handle;         /* Handle for printer device */
--  int                 node;           /* Node number for printer device */
--  unsigned long long  addr;           /* Management address */
--} linux1394_dev_t;
--
--
--/*
-- * ORB messages for communication with the device...
-- */
--
--typedef struct                /**** Login ORB Message */
--{
--  unsigned char               passwd_addr[8]; /* Password address */
--  unsigned char               resp_addr[8];   /* Login response address */
--  unsigned char               notify_excl;    /* Notify and exclusive bits */
--  unsigned char               recon_func;     /* Reconnect time and function */
--  unsigned char               lun[2];         /* Logical unit number */
--  unsigned char               passwd_len[2];  /* Length of password */
--  unsigned char               resp_len[2];    /* Length of login response */
--  unsigned char               fifo_addr[8];   /* Local status FIFO address */
--} login_orb_t;
--
--typedef struct                /**** Login Response Message ****/
--{
--  unsigned char               length[2];      /* Length of response */
--  unsigned char               login_id[2];    /* Login ID */
--  unsigned char               cmd_addr[8];    /* Command block agent address */
--  unsigned char               reserved[2];    /* Reserved (0) */
--  unsigned char               recon_hold[2];  /* Number of seconds to hold login */
--} login_resp_t;
--
--
--/*
-- * Local globals...
-- */
--
--static char           error_string[1024] = "";
--static int            num_nodes;
--static linux1394_node_t       nodes[MAX_NODES];
--
--
--/*
-- * 'get_device_id()' - Get the IEEE-1284 device ID for a node...
-- */
--
--static char *                         /* O - Device ID */
--get_device_id(raw1394handle_t    handle,/* I - Handle for device */
--              int                node,        /* I - Node number */
--            unsigned long long offset,/* I - Offset to directory */
--            char               *id,   /* O - ID string */
--            int                idlen) /* I - Size of ID string */
--{
--  unsigned char               data[1024],     /* Data from ROM */
--                      *dataptr;       /* Pointer into data */
--  int                 length;         /* Length of directory */
--  int                 datalen;        /* Length of data */
--  unsigned long long  dataoff;        /* Offset of data */
--
--
--  DEBUG_printf(("get_device_id(handle = %p, node = %d, offset = %llx, id = %p, idlen = %d)\n",
--                handle, node, offset, id, idlen));
--
--  *id = '\0';
--
-- /*
--  * Read the directory length from the first quadlet...
--  */
--
--  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--    return (NULL);
--
--  offset += 4;
--
-- /*
--  * The length is in the upper 16 bits...
--  */
--
--  length = (data[0] << 8) | data[1];
--
--  DEBUG_printf(("    length = %d\n", length));
--
-- /*
--  * Then read the directory, looking for unit directory or device tags...
--  */
--
--  while (length > 0)
--  {
--    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--      return (NULL);
--
--    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
--                  data[2], data[3]));
--
--    if (data[0] == 0xd1)
--    {
--     /*
--      * Found the unit directory...
--      */
--
--      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
--
--      return (get_device_id(handle, node, offset, id, idlen));
--    }
--    else if (data[0] == 0x81)
--    {
--     /*
--      * Found potential IEEE-1284 device ID...
--      */
--
--      dataoff = offset + (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
--
--      if (raw1394_read(handle, 0xffc0 | node, dataoff, 4, (quadlet_t *)data) < 0)
--      return (NULL);
--
--      dataoff += 4;
--
--     /*
--      * Read the leaf value...
--      */
--
--      datalen = (data[0] << 8) | data[1];
--
--      if (datalen > (sizeof(data) / 4))
--        datalen = sizeof(data) / 4;
--
--      for (dataptr = data; datalen > 0; datalen --, dataptr += 4, dataoff += 4)
--      if (raw1394_read(handle, 0xffc0 | node, dataoff, 4,
--                       (quadlet_t *)dataptr) < 0)
--        return (NULL);
--
--      if (data[0] == 0 && memcmp(data + 8, "MFG:", 4) == 0)
--      {
--       /*
--        * Found the device ID...
--      */
--
--        datalen = dataptr - data - 8;
--      if (datalen >= idlen)
--        datalen --;
--
--      memcpy(id, data + 8, datalen);
--      id[datalen] = '\0';
--
--        return (id);
--      }
--    }
--
--    offset += 4;
--    length --;
--  }
--
--  return (NULL);
--}
--
--
--/*
-- * 'get_man_addr()' - Get the management address for a node...
-- */
--
--static int                            /* O - Unit type */
--get_man_addr(raw1394handle_t    handle,       /* I - Handle for device */
--             int                node, /* I - Node number */
--           unsigned long long offset) /* I - Offset to directory */
--{
--  unsigned char       data[4];                /* Data from ROM */
--  int         length;                 /* Length of directory */
--
--
--  DEBUG_printf(("get_man_addr(handle = %p, node = %d, offset = %llx)\n",
--                handle, node, offset));
--
-- /*
--  * Read the directory length from the first quadlet...
--  */
--
--  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--    return (-1);
--
--  offset += 4;
--
-- /*
--  * The length is in the upper 16 bits...
--  */
--
--  length = (data[0] << 8) | data[1];
--
--  DEBUG_printf(("    length = %d\n", length));
--
-- /*
--  * Then read the directory, looking for unit directory or type tags...
--  */
--
--  while (length > 0)
--  {
--    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--      return (-1);
--
--    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
--                  data[2], data[3]));
--
--    if (data[0] == 0xd1)
--    {
--     /*
--      * Found the unit directory...
--      */
--
--      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
--
--      return (get_man_addr(handle, node, offset));
--    }
--    else if (data[0] == 0x54)
--    {
--     /*
--      * Found the management address...
--      */
--
--      return (((((data[1] << 8) | data[2]) << 8) | data[3]) << 2);
--    }
--
--    offset += 4;
--    length --;
--  }
--
--  return (-1);
--}
--
--
--/*
-- * 'get_unit_type()' - Get the unit type for a node...
-- */
--
--static int                            /* O - Unit type */
--get_unit_type(raw1394handle_t    handle,/* I - Handle for device */
--              int                node,        /* I - Node number */
--            unsigned long long offset)/* I - Offset to directory */
--{
--  unsigned char       data[4];                /* Data from ROM */
--  int         length;                 /* Length of directory */
--
--
--  DEBUG_printf(("get_unit_type(handle = %p, node = %d, offset = %llx)\n",
--                handle, node, offset));
--
-- /*
--  * Read the directory length from the first quadlet...
--  */
--
--  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--    return (-1);
--
--  offset += 4;
--
-- /*
--  * The length is in the upper 16 bits...
--  */
--
--  length = (data[0] << 8) | data[1];
--
--  DEBUG_printf(("    length = %d\n", length));
--
-- /*
--  * Then read the directory, looking for unit directory or type tags...
--  */
--
--  while (length > 0)
--  {
--    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--      return (-1);
--
--    DEBUG_printf(("    data = %02X %02X %02X %02X\n", data[0], data[1],
--                  data[2], data[3]));
--
--    if (data[0] == 0xd1)
--    {
--     /*
--      * Found the unit directory...
--      */
--
--      offset += ((((data[1] << 8) | data[2]) << 8) | data[3]) << 2;
--
--      return (get_unit_type(handle, node, offset));
--    }
--    else if (data[0] == 0x14)
--    {
--     /*
--      * Found the unit type...
--      */
--
--      return (data[1] & 0x1f);
--    }
--
--    offset += 4;
--    length --;
--  }
--
--  return (-1);
--}
--
--
--#ifdef DEBUG
--/*
-- * 'show_data()' - Show a data node...
-- */
--
--static void
--show_data(raw1394handle_t    handle,  /* I - Handle for device */
--          int                node,    /* I - Node number */
--        unsigned long long offset,    /* I - Offset to directory */
--        int                indent)    /* Amount to indent */
--{
--  int         i;                      /* Looping var */
--  unsigned char       data[4];                /* Data from ROM */
--  int         length;                 /* Length of data */
--
--
-- /*
--  * Read the data length from the first quadlet...
--  */
--
--  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--    return;
--
--  offset += 4;
--
-- /*
--  * The length is in the upper 16 bits...
--  */
--
--  length = (data[0] << 8) | data[1];
--
-- /*
--  * Then read the data...
--  */
--
--  for (i = 0; i < indent; i ++)
--    putchar(' ');
--
--  printf("LEAF (%d quadlets)\n", length);
--
--  while (length > 0)
--  {
--    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--      return;
--
--    for (i = 0; i < indent; i ++)
--      putchar(' ');
--
--    printf("%02X %02X %02X %02X    '%c%c%c%c'\n",
--           data[0], data[1], data[2], data[3],
--           (data[0] < ' ' || data[0] >= 0x7f) ? '.' : data[0],
--           (data[1] < ' ' || data[1] >= 0x7f) ? '.' : data[1],
--           (data[2] < ' ' || data[2] >= 0x7f) ? '.' : data[2],
--           (data[3] < ' ' || data[3] >= 0x7f) ? '.' : data[3]);
--
--    offset += 4;
--    length --;
--  }
--}
--
--
--/*
-- * 'show_dir()' - Show a directory list...
-- */
--
--static void
--show_dir(raw1394handle_t    handle,   /* I - Handle for device */
--         int                node,     /* I - Node number */
--       unsigned long long offset,     /* I - Offset to directory */
--       int                indent)     /* Amount to indent */
--{
--  int                 i;              /* Looping var */
--  unsigned char               data[4];        /* Data from ROM */
--  int                 length;         /* Length of directory */
--  int                 value;          /* Value in directory */
--
--
-- /*
--  * Read the directory length from the first quadlet...
--  */
--
--  if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--    return;
--
--  offset += 4;
--
-- /*
--  * The length is in the upper 16 bits...
--  */
--
--  length = (data[0] << 8) | data[1];
--
-- /*
--  * Then read the directory...
--  */
--
--  while (length > 0)
--  {
--    if (raw1394_read(handle, 0xffc0 | node, offset, 4, (quadlet_t *)data) < 0)
--      return;
--
--    for (i = 0; i < indent; i ++)
--      putchar(' ');
--
--    printf("%02X %02X %02X %02X\n", data[0], data[1], data[2], data[3]);
--
--    value = (((data[1] << 8) | data[2]) << 8) | data[3];
--
--    switch (data[0] & 0xc0)
--    {
--      case 0x00 :
--        for (i = -4; i < indent; i ++)
--          putchar(' ');
--
--          printf("IMMEDIATE %d\n", value);
--        break;
--
--      case 0x40 :
--        for (i = -4; i < indent; i ++)
--          putchar(' ');
--
--          printf("CSR OFFSET +%06X\n", value);
--        break;
--
--      case 0x80 :
--          show_data(handle, node, offset + value * 4, indent + 4);
--        break;
--
--      case 0xc0 :
--          show_dir(handle, node, offset + value * 4, indent + 4);
--        break;
--    }
--
--    offset += 4;
--    length --;
--  }
--}
--#endif /* DEBUG */
--
--
--/*
-- * 'ieee1394_list()' - List the available printer devices.
-- */
--
--ieee1394_info_t       *                       /* O - Printer information */
--ieee1394_list(int *num_devices)               /* O - Number of printers */
--{
--  int                 i, j;           /* Looping vars */
--  raw1394handle_t     handle;         /* 1394 handle */
--  int                 num_ports;      /* Number of ports */
--  struct raw1394_portinfo ports[100]; /* Port data... */
--  unsigned char               guid[8];        /* Global unique ID */
--  int                 vendor;         /* Vendor portion of GUID */
--  int                 unit_type;      /* Unit type */
--  int                 addr;           /* Management address offset */
--  char                        id[1024],       /* Device ID string */
--                      *idptr,         /* Pointer into ID string */
--                      *idsep;         /* Pointer to separator */
--  ieee1394_info_t     *devices;       /* Device list */
--
--
-- /*
--  * Connect to the user-mode driver interface...
--  */
--
--  handle    = raw1394_new_handle();
--  num_ports = raw1394_get_port_info(handle, ports,
--                                    sizeof(ports) / sizeof(ports[0]));
--
--  DEBUG_printf(("num_ports = %d\n", num_ports));
--
-- /*
--  * Loop through the ports to discover what nodes are available.
--  */
--
--  num_nodes = 0;
--
--  for (i = 0; i < num_ports; i ++)
--  {
--    DEBUG_printf(("ports[%d] = { nodes = %d, name = \"%s\" }\n", i,
--                  ports[i].nodes, ports[i].name));
--
--    raw1394_set_port(handle, i);
--
--    for (j = 0; j < ports[i].nodes; j ++)
--    {
--      if (raw1394_read(handle, 0xffc0 | j,
--                       CSR_REGISTER_BASE + CSR_CONFIG_ROM + 12, 4,
--                     (quadlet_t *)guid) < 0)
--      {
--        DEBUG_printf(("    Node #%d: Unable to contact (%s)!\n", j,
--                    strerror(errno)));
--        continue;
--      }
--      else
--      {
--        raw1394_read(handle, 0xffc0 | j,
--                     CSR_REGISTER_BASE + CSR_CONFIG_ROM + 16, 4,
--                   (quadlet_t *)(guid + 4));
--
--        DEBUG_printf(("    Node #%d: GUID = %02X%02X%02X%02X%02X%02X%02X%02X\n",
--                    j, guid[0], guid[1], guid[2], guid[3], guid[4],
--                    guid[5], guid[6], guid[7]));
--
--        vendor    = (((guid[0] << 8) | guid[1]) << 8) | guid[2];
--        unit_type = get_unit_type(handle, j,
--                                CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
--
--        DEBUG_printf(("vendor = %x, unit_type = %d\n", vendor, unit_type));
--
--        if (unit_type == 2 && num_nodes < MAX_NODES)
--      {
--       /*
--        * Found a printer device; add it to the nodes list...
--        */
--
--#ifdef DEBUG
--          show_dir(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20, 0);
--#endif /* DEBUG */
--
--          memset(nodes + num_nodes, 0, sizeof(linux1394_node_t));
--
--          sprintf(nodes[num_nodes].uri, "ieee1394://%02X%02X%02X%02X%02X%02X%02X%02X",
--                guid[0], guid[1], guid[2], guid[3], guid[4],
--                guid[5], guid[6], guid[7]);
--
--          nodes[num_nodes].port = i;
--        nodes[num_nodes].node = j;
--
--          addr = get_man_addr(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20);
--
--          if (addr < 0)
--          continue;
--
--          nodes[num_nodes].addr = CSR_REGISTER_BASE + addr;
--
--          DEBUG_printf(("Node address = %llx\n", nodes[num_nodes].addr));
--
--          get_device_id(handle, j, CSR_REGISTER_BASE + CSR_CONFIG_ROM + 20,
--                      id, sizeof(id));
--
--          if (id[0])
--        {
--         /*
--          * Grab the manufacturer and model name from the device ID
--          * string...
--          */
--
--            idptr = id + 4;
--            idsep = strchr(id, ';');
--          if (idsep)
--            *idsep++ = '\0';
--          else
--            idsep = idptr;
--
--          snprintf(nodes[num_nodes].description,
--                   sizeof(nodes[num_nodes].description),
--                   "%s Firewire Printer", idptr);
--
--            if ((idptr = strstr(idsep, "DES:")) == NULL)
--            idptr = strstr(idsep, "MDL:");
--
--            if (idptr == NULL)
--              strcpy(nodes[num_nodes].make_model, "Unknown");
--          else
--          {
--           /*
--            * Grab the DES or MDL code...
--            */
--
--            idptr += 4;
--            idsep = strchr(idptr, ';');
--            if (idsep)
--              *idsep = '\0';
--
--              if (strncmp(id + 4, idptr, strlen(id + 4)) == 0)
--            {
--             /*
--              * Use the description directly...
--              */
--
--              strlcpy(nodes[num_nodes].make_model, idptr,
--                      sizeof(nodes[num_nodes].make_model));
--              }
--            else
--            {
--             /*
--              * Add the manufacturer to the front of the name...
--              */
--
--              snprintf(nodes[num_nodes].make_model,
--                       sizeof(nodes[num_nodes].make_model),
--                       "%s %s", id + 4, idptr);
--              }
--            }
--        }
--        else
--        {
--         /*
--          * Flag it as an unknown printer...
--          */
--
--          sprintf(nodes[num_nodes].description,
--                  "Unknown%06X Firewire Printer", vendor);
--            strcpy(nodes[num_nodes].make_model, "Unknown");
--        }
--
--        num_nodes ++;
--      }
--      }
--    }
--  }
--
-- /*
--  * Done querying the Firewire bus...
--  */
--
--  raw1394_destroy_handle(handle);
--
-- /*
--  * Build an array of device info structures as needed...
--  */
--
--  if (num_devices == NULL)
--    return (NULL);
--
--  *num_devices = num_nodes;
--
--  if (num_nodes)
--  {
--    if ((devices = calloc(sizeof(ieee1394_info_t), num_nodes)) != NULL)
--    {
--      for (i = 0; i < num_nodes; i ++)
--      {
--        strcpy(devices[i].uri, nodes[i].uri);
--      strcpy(devices[i].description, nodes[i].description);
--      strcpy(devices[i].make_model, nodes[i].make_model);
--      }
--    }
--
--    return (devices);
--  }
--  else
--    return (NULL);
--}
--
--
--/*
-- * 'ieee1394_open()' - Open a printer device.
-- */
--
--ieee1394_dev_t                                /* O - Printer device or NULL */
--ieee1394_open(const char *uri)                /* I - Device URI */
--{
--  int                 i;              /* Looping var */
--  linux1394_dev_t     *ldev;          /* Linux device */
--
--
-- /*
--  * Return early if we can't see any printers...
--  */
--
--  if (num_nodes == 0)
--    ieee1394_list(NULL);
--
--  if (num_nodes == 0)
--  {
--    strcpy(error_string, "No IEEE-1394 printers found!");
--    return (NULL);
--  }
--
-- /*
--  * Look for the URI...
--  */
--
--  for (i = 0; i < num_nodes; i ++)
--    if (strcmp(nodes[i].uri, uri) == 0)
--      break;
--
--  if (i >= num_nodes)
--  {
--    snprintf(error_string, sizeof(error_string), "Device %s not found!", uri);
--    return (NULL);
--  }
--
-- /*
--  * Now create a new device structure...
--  */
--
--  if ((ldev = calloc(sizeof(linux1394_dev_t), 1)) == NULL)
--  {
--    strcpy(error_string, "Out of memory!");
--    return (NULL);
--  }
--
--  ldev->handle = raw1394_new_handle();
--  ldev->node   = nodes[i].node;
--  ldev->addr   = nodes[i].addr;
--
--  raw1394_set_port(ldev->handle, nodes[i].port);
--
--  error_string[0] = '\0';
--
--  return ((ieee1394_dev_t)ldev);
--}
--
--
--/*
-- * 'ieee1394_close()' - Close a printer device.
-- */
--
--int                                   /* O - 0 on success, -1 on failure */
--ieee1394_close(ieee1394_dev_t dev)    /* I - Printer device */
--{
--  linux1394_dev_t     *ldev;          /* Linux device */
--
--
--  ldev = (linux1394_dev_t *)dev;
--
--  raw1394_destroy_handle(ldev->handle);
--
--  free(ldev);
--
--  return (0);
--}
--
--
--/*
-- * 'ieee1394_read()' - Read from a printer device.
-- */
--
--int                                   /* O - Number of bytes read or -1 */
--ieee1394_read(ieee1394_dev_t dev,     /* I - Printer device */
--              char           *buffer, /* I - Read buffer */
--            int            len)       /* I - Max bytes to read */
--{
--  linux1394_dev_t     *ldev;          /* Linux device */
--
--
--  ldev = (linux1394_dev_t *)dev;
--
--
--  return (0);
--}
--
--
--/*
-- * 'ieee1394_write()' - Write data to a printer device.
-- */
--
--int                                   /* O - Number of bytes written or -1 */
--ieee1394_write(ieee1394_dev_t dev,    /* I - Printer device */
--               char           *buffer,        /* I - Buffer to write */
--             int            len)      /* I - Number of bytes to write */
--{
--  linux1394_dev_t     *ldev;          /* Linux device */
--
--
--  ldev = (linux1394_dev_t *)dev;
--
--
--/*  if (raw1394_write(handle, 0xffc0 | j, 0, ,
--                     (quadlet_t *)guid) < 0)*/
--
--  return (len);
--}
--
--
--/*
-- * 'ieee1394_error()' - Return the last error.
-- */
--
--const char *                          /* O - Error string or NULL */
--ieee1394_error(void)
--{
--  if (error_string[0])
--    return (error_string);
--  else
--    return (NULL);
--}
--
--
--/*
-- * End of "$Id$".
-- */
-diff -durN release-1.2.1/backend/ipp.c cups-1.2.x/backend/ipp.c
---- release-1.2.1/backend/ipp.c        2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/ipp.c   2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   IPP backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -211,7 +211,8 @@
-   */
-   if ((content_type = getenv("FINAL_CONTENT_TYPE")) == NULL)
--    content_type = "application/octet-stream";
-+    if ((content_type = getenv("CONTENT_TYPE")) == NULL)
-+      content_type = "application/octet-stream";
-  /*
-   * Extract the hostname and printer name from the URI...
-@@ -1619,5 +1620,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/Makefile cups-1.2.x/backend/Makefile
---- release-1.2.1/backend/Makefile     2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/Makefile        2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Backend makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -28,7 +28,8 @@
- RBACKENDS =   ipp lpd
- UBACKENDS =   $(PAP) parallel scsi serial snmp socket usb
--TARGETS       =       betest test1284 $(RBACKENDS) $(UBACKENDS)
-+TARGETS       =       betest test1284 libbackend.a $(RBACKENDS) $(UBACKENDS)
-+LIBOBJS       =       ieee1284.o runloop.o
- OBJS  =       betest.o ipp.o lpd.o pap.o parallel.o scsi.o \
-               serial.o snmp.o socket.o test1284.o usb.o
-@@ -105,6 +106,17 @@
- #
-+# libbackend.a
-+#
-+
-+libbackend.a: $(LIBOBJS)
-+      echo Archiving $@...
-+      $(RM) $@
-+      $(AR) $(ARFLAGS) $@ $(LIBOBJS)
-+      $(RANLIB) $@
-+
-+
-+#
- # ieee1394
- #
-@@ -149,9 +161,9 @@
- # parallel
- #
--parallel:     parallel.o ../cups/$(LIBCUPS)
-+parallel:     parallel.o ../cups/$(LIBCUPS) libbackend.a
-       echo Linking $@...
--      $(CC) $(LDFLAGS) -o parallel parallel.o $(LIBS)
-+      $(CC) $(LDFLAGS) -o parallel parallel.o libbackend.a $(LIBS)
- #
-@@ -169,37 +181,37 @@
- # serial
- #
--serial:       serial.o ../cups/$(LIBCUPS)
-+serial:       serial.o ../cups/$(LIBCUPS) libbackend.a
-       echo Linking $@...
--      $(CC) $(LDFLAGS) -o serial serial.o $(BACKLIBS) $(LIBS)
-+      $(CC) $(LDFLAGS) -o serial serial.o libbackend.a $(BACKLIBS) $(LIBS)
- #
- # snmp
- #
--snmp: snmp.o ../cups/$(LIBCUPS)
-+snmp: snmp.o ../cups/$(LIBCUPS) libbackend.a
-       echo Linking $@...
--      $(CC) $(LDFLAGS) -o snmp snmp.o $(LIBS)
-+      $(CC) $(LDFLAGS) -o snmp snmp.o libbackend.a $(LIBS)
- #
- # socket
- #
--socket:       socket.o ../cups/$(LIBCUPS)
-+socket:       socket.o ../cups/$(LIBCUPS) libbackend.a
-       echo Linking $@...
--      $(CC) $(LDFLAGS) -o socket socket.o $(LIBS)
-+      $(CC) $(LDFLAGS) -o socket socket.o libbackend.a $(LIBS)
- #
- # usb
- #
--usb:  usb.o ../cups/$(LIBCUPS)
-+usb:  usb.o ../cups/$(LIBCUPS) libbackend.a
-       echo Linking $@...
--      $(CC) $(LDFLAGS) -o usb usb.o $(BACKLIBS) $(LIBS)
--usb.o:        usb.c usb-darwin.c usb-unix.c ieee1284.c
-+      $(CC) $(LDFLAGS) -o usb usb.o libbackend.a $(BACKLIBS) $(LIBS)
-+usb.o:        usb.c usb-darwin.c usb-unix.c
- #
-@@ -210,5 +222,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/backend/parallel.c cups-1.2.x/backend/parallel.c
---- release-1.2.1/backend/parallel.c   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/parallel.c      2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Parallel port backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -33,14 +33,7 @@
-  * Include necessary headers.
-  */
--#include <cups/backend.h>
--#include <cups/cups.h>
--#include <stdio.h>
--#include <stdlib.h>
--#include <errno.h>
--#include <cups/string.h>
--#include <signal.h>
--#include "ieee1284.c"
-+#include "backend-private.h"
- #ifdef __hpux
- #  include <sys/time.h>
-@@ -94,25 +87,18 @@
-               resource[1024],         /* Resource info (device and options) */
-               *options;               /* Pointer to options */
-   int         port;                   /* Port number (not used) */
--  int         fp;                     /* Print file */
-+  int         print_fd,               /* Print file */
-+              device_fd;              /* Parallel device */
-   int         copies;                 /* Number of copies to print */
--  int         fd;                     /* Parallel device */
--  int         rbytes;                 /* Number of bytes read */
--  int         wbytes;                 /* Number of bytes written */
--  size_t      nbytes,                 /* Number of bytes read */
--              tbytes;                 /* Total number of bytes written */
--  char                buffer[8192],           /* Output buffer */
--              *bufptr;                /* Pointer into buffer */
-+  size_t      tbytes;                 /* Total number of bytes written */
-   struct termios opts;                        /* Parallel port options */
--  fd_set      input,                  /* Input set for select() */
--              output;                 /* Output set for select() */
-+#if defined(__linux) && defined(LP_POUTPA)
-+  unsigned int        status;                 /* Port status (off-line, out-of-paper, etc.) */
-   int         paperout;               /* Paper out? */
-+#endif /* __linux && LP_POUTPA */
- #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-   struct sigaction action;            /* Actions for POSIX signals */
- #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
--#ifdef __linux
--  unsigned int        status;                 /* Port status (off-line, out-of-paper, etc.) */
--#endif /* __linux */
-  /*
-@@ -157,8 +143,8 @@
-   if (argc == 6)
-   {
--    fp     = 0;
--    copies = 1;
-+    print_fd = 0;
-+    copies   = 1;
-   }
-   else
-   {
-@@ -166,7 +152,7 @@
-     * Try to open the print file...
-     */
--    if ((fp = open(argv[6], O_RDONLY)) < 0)
-+    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
-     {
-       perror("ERROR: unable to open print file");
-       return (CUPS_BACKEND_FAILED);
-@@ -206,7 +192,7 @@
-   do
-   {
--    if ((fd = open(resource, O_WRONLY | O_EXCL)) == -1)
-+    if ((device_fd = open(resource, O_WRONLY | O_EXCL)) == -1)
-     {
-       if (getenv("CLASS") != NULL)
-       {
-@@ -217,8 +203,8 @@
-       * available printer in the class.
-       */
--        fputs("INFO: Unable to open parallel port, queuing on next printer in class...\n",
--            stderr);
-+        fputs("INFO: Unable to open parallel port, queuing on next printer "
-+            "in class...\n", stderr);
-        /*
-         * Sleep 5 seconds to keep the job from requeuing too rapidly...
-@@ -231,23 +217,26 @@
-       if (errno == EBUSY)
-       {
--        fputs("INFO: Parallel port busy; will retry in 30 seconds...\n", stderr);
-+        fputs("INFO: Parallel port busy; will retry in 30 seconds...\n",
-+            stderr);
-       sleep(30);
-       }
-       else if (errno == ENXIO || errno == EIO || errno == ENOENT)
-       {
--        fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
-+        fputs("INFO: Printer not connected; will retry in 30 seconds...\n",
-+            stderr);
-       sleep(30);
-       }
-       else
-       {
--      fprintf(stderr, "ERROR: Unable to open parallel port device file \"%s\": %s\n",
-+      fprintf(stderr,
-+              "ERROR: Unable to open parallel port device file \"%s\": %s\n",
-               resource, strerror(errno));
-       return (CUPS_BACKEND_FAILED);
-       }
-     }
-   }
--  while (fd < 0);
-+  while (device_fd < 0);
-   fputs("STATE: -connecting-to-device\n", stderr);
-@@ -255,25 +244,21 @@
-   * Set any options provided...
-   */
--  tcgetattr(fd, &opts);
-+  tcgetattr(device_fd, &opts);
-   opts.c_lflag &= ~(ICANON | ECHO | ISIG);    /* Raw mode */
-   /**** No options supported yet ****/
--  tcsetattr(fd, TCSANOW, &opts);
--
-- /*
--  * Check printer status...
--  */
--
--  paperout = 0;
-+  tcsetattr(device_fd, TCSANOW, &opts);
- #if defined(__linux) && defined(LP_POUTPA)
-  /*
-   * Show the printer status before we send the file...
-   */
-+  paperout = 0;
-+
-   while (!ioctl(fd, LPGETSTATUS, &status))
-   {
-     fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
-@@ -298,146 +283,38 @@
- #endif /* __linux && LP_POUTPA */
-  /*
--  * Now that we are "connected" to the port, ignore SIGTERM so that we
--  * can finish out any page data the driver sends (e.g. to eject the
--  * current page...  Only ignore SIGTERM if we are printing data from
--  * stdin (otherwise you can't cancel raw jobs...)
--  */
--
--  if (argc < 7)
--  {
--#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
--    sigset(SIGTERM, SIG_IGN);
--#elif defined(HAVE_SIGACTION)
--    memset(&action, 0, sizeof(action));
--
--    sigemptyset(&action.sa_mask);
--    action.sa_handler = SIG_IGN;
--    sigaction(SIGTERM, &action, NULL);
--#else
--    signal(SIGTERM, SIG_IGN);
--#endif /* HAVE_SIGSET */
--  }
--
-- /*
-   * Finally, send the print file...
-   */
--  wbytes = 0;
-+  tbytes = 0;
--  while (copies > 0)
-+  while (copies > 0 && tbytes >= 0)
-   {
-     copies --;
--    if (fp != 0)
-+    if (print_fd != 0)
-     {
-       fputs("PAGE: 1 1\n", stderr);
--      lseek(fp, 0, SEEK_SET);
-+      lseek(print_fd, 0, SEEK_SET);
-     }
--    tbytes = 0;
--    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
--    {
--     /*
--      * Write the print data to the printer...
--      */
--
--      tbytes += nbytes;
--      bufptr = buffer;
--
--      while (nbytes > 0)
--      {
--       /*
--        * See if we are ready to read or write...
--      */
--
--        do
--      {
--          FD_ZERO(&input);
--        FD_SET(fd, &input);
--        FD_ZERO(&output);
--        FD_SET(fd, &output);
--        }
--      while (select(fd + 1, &input, &output, NULL, NULL) < 0);
--
--        if (FD_ISSET(fd, &input))
--      {
--       /*
--        * Read backchannel data...
--        */
--
--        if ((rbytes = read(fd, resource, sizeof(resource))) > 0)
--        {
--          fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
--                  rbytes);
--            cupsBackChannelWrite(resource, rbytes, 1.0);
--          }
--      }
--
--        if (FD_ISSET(fd, &output))
--      {
--       /*
--        * Write print data...
--        */
--
--        if ((wbytes = write(fd, bufptr, nbytes)) < 0)
--          if (errno == ENOTTY)
--            wbytes = write(fd, bufptr, nbytes);
--
--        if (wbytes < 0)
--        {
--         /*
--          * Check for retryable errors...
--          */
--
--            if (errno == ENOSPC)
--          {
--            paperout = 1;
--            fputs("ERROR: Out of paper!\n", stderr);
--            fputs("STATUS: +media-tray-empty-error\n", stderr);
--          }
--          else if (errno != EAGAIN && errno != EINTR)
--          {
--            perror("ERROR: Unable to send print file to printer");
--            break;
--          }
--        }
--        else
--        {
--         /*
--          * Update count and pointer...
--          */
--
--            if (paperout)
--          {
--            fputs("STATUS: -media-tray-empty-error\n", stderr);
--            paperout = 0;
--          }
--
--          nbytes -= wbytes;
--          bufptr += wbytes;
--        }
--      }
--      }
--
--      if (wbytes < 0)
--        break;
-+    tbytes = backendRunLoop(print_fd, device_fd, 1);
--      if (argc > 6)
--      fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
--              (unsigned long)tbytes);
--    }
-+    if (print_fd != 0 && tbytes >= 0)
-+      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
-+            CUPS_LLCAST tbytes);
-   }
-  /*
-   * Close the socket connection and input file and return...
-   */
--  close(fd);
--  if (fp != 0)
--    close(fp);
-+  close(device_fd);
--  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
-+  if (print_fd != 0)
-+    close(print_fd);
-+
-+  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
- }
-@@ -485,9 +362,9 @@
-       * Now grab the IEEE 1284 device ID string...
-       */
--      if (!get_device_id(fd, device_id, sizeof(device_id),
--                         make_model, sizeof(make_model),
--                       NULL, NULL, 0))
-+      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
-+                              make_model, sizeof(make_model),
-+                            NULL, NULL, 0))
-       printf("direct parallel:%s \"%s\" \"%s LPT #%d\" \"%s\"\n", device,
-              make_model, make_model, i + 1, device_id);
-       else
-@@ -735,5 +612,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/runloop.c cups-1.2.x/backend/runloop.c
---- release-1.2.1/backend/runloop.c    1970-01-01 01:00:00.000000000 +0100
-+++ cups-1.2.x/backend/runloop.c       2006-06-26 12:42:40.000000000 +0100
-@@ -0,0 +1,218 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Common run loop API for the Common UNIX Printing System (CUPS).
-+ *
-+ *   Copyright 2006 by Easy Software Products, all rights reserved.
-+ *
-+ *   These coded instructions, statements, and computer programs are the
-+ *   property of Easy Software Products and are protected by Federal
-+ *   copyright law.  Distribution and use rights are outlined in the file
-+ *   "LICENSE" which should have been included with this file.  If this
-+ *   file is missing or damaged please contact Easy Software Products
-+ *   at:
-+ *
-+ *       Attn: CUPS Licensing Information
-+ *       Easy Software Products
-+ *       44141 Airport View Drive, Suite 204
-+ *       Hollywood, Maryland 20636 USA
-+ *
-+ *       Voice: (301) 373-9600
-+ *       EMail: cups-info@cups.org
-+ *         WWW: http://www.cups.org
-+ *
-+ *   This file is subject to the Apple OS-Developed Software exception.
-+ *
-+ * Contents:
-+ *
-+ *   backendRunLoop() - Read and write print and back-channel data.
-+ */
-+
-+/*
-+ * Include necessary headers.
-+ */
-+
-+#include "backend-private.h"
-+#include <sys/select.h>
-+
-+
-+/*
-+ * 'backendRunLoop()' - Read and write print and back-channel data.
-+ */
-+
-+ssize_t                                       /* O - Total bytes on success, -1 on error */
-+backendRunLoop(int print_fd,          /* I - Print file descriptor */
-+               int device_fd,         /* I - Device file descriptor */
-+             int use_bc)              /* I - Use back-channel? */
-+{
-+  int         nfds;                   /* Maximum file descriptor value + 1 */
-+  fd_set      input,                  /* Input set for reading */
-+              output;                 /* Output set for writing */
-+  ssize_t     print_bytes,            /* Print bytes read */
-+              bc_bytes,               /* Backchannel bytes read */
-+              total_bytes,            /* Total bytes written */
-+              bytes;                  /* Bytes written */
-+  int         paperout;               /* "Paper out" status */
-+  char                print_buffer[8192],     /* Print data buffer */
-+              *print_ptr,             /* Pointer into print data buffer */
-+              bc_buffer[1024];        /* Back-channel data buffer */
-+#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-+  struct sigaction action;            /* Actions for POSIX signals */
-+#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-+
-+
-+ /*
-+  * If we are printing data from a print driver on stdin, ignore SIGTERM
-+  * so that the driver can finish out any page data, e.g. to eject the
-+  * current page.  We only do this for stdin printing as otherwise there
-+  * is no way to cancel a raw print job...
-+  */
-+
-+  if (!print_fd)
-+  {
-+#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
-+    sigset(SIGTERM, SIG_IGN);
-+#elif defined(HAVE_SIGACTION)
-+    memset(&action, 0, sizeof(action));
-+
-+    sigemptyset(&action.sa_mask);
-+    action.sa_handler = SIG_IGN;
-+    sigaction(SIGTERM, &action, NULL);
-+#else
-+    signal(SIGTERM, SIG_IGN);
-+#endif /* HAVE_SIGSET */
-+  }
-+
-+ /*
-+  * Figure out the maximum file descriptor value to use with select()...
-+  */
-+
-+  nfds = (print_fd > device_fd ? print_fd : device_fd) + 1;
-+
-+ /*
-+  * Now loop until we are out of data from print_fd...
-+  */
-+
-+  for (print_bytes = 0, print_ptr = print_buffer, paperout = 0, total_bytes = 0;;)
-+  {
-+   /*
-+    * Use select() to determine whether we have data to copy around...
-+    */
-+
-+    FD_ZERO(&input);
-+    if (!print_bytes)
-+      FD_SET(print_fd, &input);
-+    if (use_bc)
-+      FD_SET(device_fd, &input);
-+
-+    FD_ZERO(&output);
-+    if (print_bytes)
-+      FD_SET(device_fd, &output);
-+
-+    if (select(nfds, &input, &output, NULL, NULL) < 0)
-+      continue;                               /* Ignore errors here */
-+
-+   /*
-+    * Check if we have back-channel data ready...
-+    */
-+
-+    if (FD_ISSET(device_fd, &input))
-+    {
-+      if ((bc_bytes = read(device_fd, bc_buffer, sizeof(bc_buffer))) > 0)
-+      {
-+      fprintf(stderr,
-+              "DEBUG: Received " CUPS_LLFMT " bytes of back-channel data!\n",
-+              CUPS_LLCAST bc_bytes);
-+        cupsBackChannelWrite(bc_buffer, bc_bytes, 1.0);
-+      }
-+    }
-+
-+   /*
-+    * Check if we have print data ready...
-+    */
-+
-+    if (FD_ISSET(print_fd, &input))
-+    {
-+      if ((print_bytes = read(print_fd, print_buffer,
-+                              sizeof(print_buffer))) < 0)
-+      {
-+       /*
-+        * Read error - bail if we don't see EAGAIN or EINTR...
-+      */
-+
-+      if (errno != EAGAIN || errno != EINTR)
-+      {
-+        perror("ERROR: Unable to read print data");
-+        return (-1);
-+      }
-+
-+        print_bytes = 0;
-+      }
-+      else if (print_bytes == 0)
-+      {
-+       /*
-+        * End of file, break out of the loop...
-+      */
-+
-+        break;
-+      }
-+
-+      print_ptr = print_buffer;
-+    }
-+
-+   /*
-+    * Check if the device is ready to receive data and we have data to
-+    * send...
-+    */
-+
-+    if (print_bytes && FD_ISSET(device_fd, &output))
-+    {
-+      if ((bytes = write(device_fd, print_ptr, print_bytes)) < 0)
-+      {
-+       /*
-+        * Write error - bail if we don't see an error we can retry...
-+      */
-+
-+        if (errno == ENOSPC)
-+      {
-+        if (!paperout)
-+        {
-+          fputs("ERROR: Out of paper!\n", stderr);
-+          fputs("STATUS: +media-tray-empty-error\n", stderr);
-+          paperout = 1;
-+        }
-+        }
-+      else if (errno != EAGAIN && errno != EINTR && errno != ENOTTY)
-+      {
-+        perror("ERROR: Unable to write print data");
-+        return (-1);
-+      }
-+      }
-+      else
-+      {
-+        if (paperout)
-+      {
-+        fputs("STATUS: -media-tray-empty-error\n", stderr);
-+        paperout = 0;
-+      }
-+
-+        fprintf(stderr, "DEBUG: Wrote %d bytes...\n", (int)bytes);
-+
-+        print_bytes -= bytes;
-+      print_ptr   += bytes;
-+      total_bytes += bytes;
-+      }
-+    }
-+  }
-+
-+ /*
-+  * Return with success...
-+  */
-+
-+  return (total_bytes);
-+}
-+
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -durN release-1.2.1/backend/serial.c cups-1.2.x/backend/serial.c
---- release-1.2.1/backend/serial.c     2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/serial.c        2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Serial port backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -33,13 +33,7 @@
-  * Include necessary headers.
-  */
--#include <cups/backend.h>
--#include <cups/cups.h>
--#include <stdio.h>
--#include <stdlib.h>
--#include <errno.h>
--#include <cups/string.h>
--#include <signal.h>
-+#include "backend-private.h"
- #ifdef __hpux
- #  include <sys/modem.h>
-@@ -121,21 +115,23 @@
-               value[255],             /* Value of option */
-               *ptr;                   /* Pointer into name or value */
-   int         port;                   /* Port number (not used) */
--  int         fp;                     /* Print file */
-   int         copies;                 /* Number of copies to print */
--  int         fd;                     /* Parallel device */
--  int         rbytes;                 /* Number of bytes read */
--  int         wbytes;                 /* Number of bytes written */
--  size_t      nbytes,                 /* Number of bytes read */
--              tbytes;                 /* Total number of bytes written */
-+  int         print_fd,               /* Print file */
-+              device_fd;              /* Serial device */
-+  int         nfds;                   /* Maximum file descriptor value + 1 */
-+  fd_set      input,                  /* Input set for reading */
-+              output;                 /* Output set for writing */
-+  ssize_t     print_bytes,            /* Print bytes read */
-+              bc_bytes,               /* Backchannel bytes read */
-+              total_bytes,            /* Total bytes written */
-+              bytes;                  /* Bytes written */
-   int         dtrdsr;                 /* Do dtr/dsr flow control? */
--  int         bufsize;                /* Size of output buffer for writes */
--  char                buffer[8192],           /* Output buffer */
--              *bufptr;                /* Pointer into buffer */
-+  int         print_size;             /* Size of output buffer for writes */
-+  char                print_buffer[8192],     /* Print data buffer */
-+              *print_ptr,             /* Pointer into print data buffer */
-+              bc_buffer[1024];        /* Back-channel data buffer */
-   struct termios opts;                        /* Serial port options */
-   struct termios origopts;            /* Original port options */
--  fd_set      input,                  /* Input set for select() */
--              output;                 /* Output set for select() */
- #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-   struct sigaction action;            /* Actions for POSIX signals */
- #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-@@ -183,8 +179,8 @@
-   if (argc == 6)
-   {
--    fp     = 0;
--    copies = 1;
-+    print_fd = 0;
-+    copies   = 1;
-   }
-   else
-   {
-@@ -192,7 +188,7 @@
-     * Try to open the print file...
-     */
--    if ((fp = open(argv[6], O_RDONLY)) < 0)
-+    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
-     {
-       perror("ERROR: unable to open print file");
-       return (CUPS_BACKEND_FAILED);
-@@ -232,7 +228,8 @@
-   do
-   {
--    if ((fd = open(resource, O_WRONLY | O_NOCTTY | O_EXCL | O_NDELAY)) == -1)
-+    if ((device_fd = open(resource, O_RDWR | O_NOCTTY | O_EXCL |
-+                                    O_NDELAY)) == -1)
-     {
-       if (getenv("CLASS") != NULL)
-       {
-@@ -268,7 +265,7 @@
-       }
-     }
-   }
--  while (fd < 0);
-+  while (device_fd < 0);
-   fputs("STATE: -connecting-to-device\n", stderr);
-@@ -276,16 +273,18 @@
-   * Set any options provided...
-   */
--  tcgetattr(fd, &origopts);
--  tcgetattr(fd, &opts);
-+  tcgetattr(device_fd, &origopts);
-+  tcgetattr(device_fd, &opts);
--  opts.c_lflag &= ~(ICANON | ECHO | ISIG);    /* Raw mode */
--  opts.c_oflag &= ~OPOST;                     /* Don't post-process */
-+  opts.c_lflag &= ~(ICANON | ECHO | ISIG);
-+                                      /* Raw mode */
-+  opts.c_oflag &= ~OPOST;             /* Don't post-process */
--  bufsize = 96;               /* 9600 baud / 10 bits/char / 10Hz */
--  dtrdsr  = 0;                /* No dtr/dsr flow control */
-+  print_size = 96;                    /* 9600 baud / 10 bits/char / 10Hz */
-+  dtrdsr     = 0;                     /* No dtr/dsr flow control */
--  if (options != NULL)
-+  if (options)
-+  {
-     while (*options)
-     {
-      /*
-@@ -326,7 +325,7 @@
-         * Set the baud rate...
-       */
--        bufsize = atoi(value) / 100;
-+        print_size = atoi(value) / 100;
- #if B19200 == 19200
-         cfsetispeed(&opts, atoi(value));
-@@ -488,9 +487,10 @@
-       }
-       }
-     }
-+  }
--  tcsetattr(fd, TCSANOW, &opts);
--  fcntl(fd, F_SETFL, 0);
-+  tcsetattr(device_fd, TCSANOW, &opts);
-+  fcntl(device_fd, F_SETFL, 0);
-  /*
-   * Now that we are "connected" to the port, ignore SIGTERM so that we
-@@ -499,7 +499,7 @@
-   * stdin (otherwise you can't cancel raw jobs...)
-   */
--  if (argc < 7)
-+  if (print_fd != 0)
-   {
- #ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
-     sigset(SIGTERM, SIG_IGN);
-@@ -515,133 +515,181 @@
-   }
-  /*
--  * Finally, send the print file...
-+  * Figure out the maximum file descriptor value to use with select()...
-   */
--  if (bufsize > sizeof(buffer))
--    bufsize = sizeof(buffer);
-+  nfds = (print_fd > device_fd ? print_fd : device_fd) + 1;
--  wbytes = 0;
-+ /*
-+  * Finally, send the print file.  Ordinarily we would just use the
-+  * backendRunLoop() function, however since we need to use smaller
-+  * writes and may need to do DSR/DTR flow control, we duplicate much
-+  * of the code here instead...
-+  */
-+
-+  if (print_size > sizeof(print_buffer))
-+    print_size = sizeof(print_buffer);
-+
-+  total_bytes = 0;
-   while (copies > 0)
-   {
-     copies --;
--    if (fp != 0)
-+    if (print_fd != 0)
-     {
-       fputs("PAGE: 1 1\n", stderr);
--      lseek(fp, 0, SEEK_SET);
-+      lseek(print_fd, 0, SEEK_SET);
-     }
--    if (dtrdsr)
-+   /*
-+    * Now loop until we are out of data from print_fd...
-+    */
-+
-+    for (print_bytes = 0, print_ptr = print_buffer;;)
-     {
-      /*
--      * Check the port and sleep until DSR is set...
-+      * Use select() to determine whether we have data to copy around...
-       */
--      int status;
-+      FD_ZERO(&input);
-+      if (!print_bytes)
-+      FD_SET(print_fd, &input);
-+      FD_SET(device_fd, &input);
-+      FD_ZERO(&output);
-+      if (print_bytes)
-+      FD_SET(device_fd, &output);
--      if (!ioctl(fd, TIOCMGET, &status))
--        if (!(status & TIOCM_DSR))
-+      if (select(nfds, &input, &output, NULL, NULL) < 0)
-+      continue;                       /* Ignore errors here */
-+
-+     /*
-+      * Check if we have back-channel data ready...
-+      */
-+
-+      if (FD_ISSET(device_fd, &input))
-+      {
-+      if ((bc_bytes = read(device_fd, bc_buffer, sizeof(bc_buffer))) > 0)
-+      {
-+        fprintf(stderr,
-+                "DEBUG: Received " CUPS_LLFMT " bytes of back-channel data!\n",
-+                CUPS_LLCAST bc_bytes);
-+          cupsBackChannelWrite(bc_buffer, bc_bytes, 1.0);
-+      }
-+      }
-+
-+     /*
-+      * Check if we have print data ready...
-+      */
-+
-+      if (FD_ISSET(print_fd, &input))
-+      {
-+      if ((print_bytes = read(print_fd, print_buffer, print_size)) < 0)
-       {
-        /*
--        * Wait for DSR to go high...
-+          * Read error - bail if we don't see EAGAIN or EINTR...
-         */
--        fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
--
--          do
-+        if (errno != EAGAIN || errno != EINTR)
-         {
--          sleep(1);
--          if (ioctl(fd, TIOCMGET, &status))
--            break;
--        }
--        while (!(status & TIOCM_DSR));
--
--        fputs("DEBUG: DSR is high; writing to device...\n", stderr);
--        }
--    }
-+          perror("ERROR: Unable to read print data");
--    tbytes = 0;
--    while ((nbytes = read(fp, buffer, bufsize)) > 0)
--    {
--     /*
--      * Write the print data to the printer...
--      */
-+            tcsetattr(device_fd, TCSADRAIN, &origopts);
--      tbytes += nbytes;
--      bufptr = buffer;
-+          close(device_fd);
--      while (nbytes > 0)
--      {
--       /*
--        * See if we are ready to read or write...
--      */
-+          if (print_fd != 0)
-+            close(print_fd);
--        do
--      {
--          FD_ZERO(&input);
--        FD_SET(fd, &input);
--        FD_ZERO(&output);
--        FD_SET(fd, &output);
--        }
--      while (select(fd + 1, &input, &output, NULL, NULL) < 0);
-+          return (CUPS_BACKEND_FAILED);
-+        }
--        if (FD_ISSET(fd, &input))
-+          print_bytes = 0;
-+      }
-+      else if (print_bytes == 0)
-       {
-        /*
--        * Read backchannel data...
-+          * End of file, break out of the loop...
-         */
--        if ((rbytes = read(fd, resource, sizeof(resource))) > 0)
--        {
--          fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
--                  rbytes);
--            cupsBackChannelWrite(resource, rbytes, 1.0);
--          }
-+          break;
-       }
--        if (FD_ISSET(fd, &output))
-+      print_ptr = print_buffer;
-+      }
-+
-+     /*
-+      * Check if the device is ready to receive data and we have data to
-+      * send...
-+      */
-+
-+      if (print_bytes && FD_ISSET(device_fd, &output))
-+      {
-+      if (dtrdsr)
-       {
-        /*
--        * Write print data...
-+        * Check the port and sleep until DSR is set...
-         */
--        if ((wbytes = write(fd, bufptr, nbytes)) < 0)
--          if (errno == ENOTTY)
--            wbytes = write(fd, bufptr, nbytes);
-+        int status;
--        if (wbytes < 0)
--        {
--         /*
--          * Check for retryable errors...
--          */
--          if (errno != EAGAIN && errno != EINTR)
-+        if (!ioctl(device_fd, TIOCMGET, &status))
-+            if (!(status & TIOCM_DSR))
-           {
--            perror("ERROR: Unable to send print file to printer");
--            break;
--          }
--        }
--        else
-+           /*
-+            * Wait for DSR to go high...
-+            */
-+
-+            fputs("DEBUG: DSR is low; waiting for device...\n", stderr);
-+
-+              do
-+            {
-+             /*
-+              * Poll every 100ms...
-+              */
-+
-+              usleep(100000);
-+
-+              if (ioctl(device_fd, TIOCMGET, &status))
-+                break;
-+            }
-+            while (!(status & TIOCM_DSR));
-+
-+            fputs("DEBUG: DSR is high; writing to device...\n", stderr);
-+            }
-+      }
-+
-+      if ((bytes = write(device_fd, print_ptr, print_bytes)) < 0)
-+      {
-+       /*
-+          * Write error - bail if we don't see an error we can retry...
-+        */
-+
-+        if (errno != EAGAIN && errno != EINTR && errno != ENOTTY)
-         {
--         /*
--          * Update count and pointer...
--          */
-+          perror("ERROR: Unable to write print data");
--          nbytes -= wbytes;
--          bufptr += wbytes;
-+            tcsetattr(device_fd, TCSADRAIN, &origopts);
-+
-+          close(device_fd);
-+
-+          if (print_fd != 0)
-+            close(print_fd);
-+
-+          return (CUPS_BACKEND_FAILED);
-         }
-       }
--      }
--
--      if (wbytes < 0)
--        break;
-+      else
-+      {
-+          fprintf(stderr, "DEBUG: Wrote %d bytes...\n", (int)bytes);
--      if (argc > 6)
--      fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
--              (unsigned long)tbytes);
-+          print_bytes -= bytes;
-+        print_ptr   += bytes;
-+        total_bytes += bytes;
-+      }
-+      }
-     }
-   }
-@@ -649,13 +697,14 @@
-   * Close the serial port and input file and return...
-   */
--  tcsetattr(fd, TCSADRAIN, &origopts);
-+  tcsetattr(device_fd, TCSADRAIN, &origopts);
--  close(fd);
--  if (fp != 0)
--    close(fp);
-+  close(device_fd);
--  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
-+  if (print_fd != 0)
-+    close(print_fd);
-+
-+  return (total_bytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
- }
-@@ -1169,5 +1218,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/snmp.c cups-1.2.x/backend/snmp.c
---- release-1.2.1/backend/snmp.c       2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/snmp.c  2006-06-28 09:59:03.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   SNMP discovery backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -77,17 +77,10 @@
-  * Include necessary headers.
-  */
--#include <cups/backend.h>
- #include <cups/http-private.h>
--#include <cups/cups.h>
--#include <cups/string.h>
-+#include "backend-private.h"
- #include <cups/array.h>
- #include <cups/file.h>
--#include <errno.h>
--#include <signal.h>
--
--#define SNMP_BACKEND
--#include "ieee1284.c"
- /*
-@@ -391,7 +384,7 @@
-   debug_printf("DEBUG: add_cache(addr=%p, addrname=\"%s\", uri=\"%s\", "
-                   "id=\"%s\", make_and_model=\"%s\")\n",
--               addr, addrname, uri, id ? id :  "(null)",
-+               addr, addrname, uri ? uri : "(null)", id ? id :  "(null)",
-              make_and_model ? make_and_model : "(null)");
-   temp = calloc(1, sizeof(snmp_cache_t));
-@@ -1648,6 +1641,14 @@
-         info = NULL;
-        /*
-+        * Don't use the printer-make-and-model if it contains a generic
-+      * string like "Ricoh IPP Printer"...
-+      */
-+
-+      if (model && strstr(model->values[0].string.text, "IPP Printer"))
-+        model = NULL;
-+
-+       /*
-         * If we don't have a printer-make-and-model string from the printer
-       * but do have the 1284 device ID string, generate a make-and-model
-       * string from the device ID info...
-@@ -1656,7 +1657,9 @@
-       if (model)
-           strlcpy(temp, model->values[0].string.text, sizeof(temp));
-       else if (info)
--        get_make_model(info->values[0].string.text, temp, sizeof(temp));
-+        backendGetMakeModel(info->values[0].string.text, temp, sizeof(temp));
-+        else
-+        temp[0] = '\0';
-         fix_make_model(make_model, temp, sizeof(make_model));
-@@ -1928,8 +1931,8 @@
-       * Description is the IEEE-1284 device ID...
-       */
--      get_make_model(packet.object_value.string, make_model,
--                     sizeof(make_model));
-+      backendGetMakeModel(packet.object_value.string, make_model,
-+                        sizeof(make_model));
-     }
-     else
-     {
-@@ -2212,5 +2215,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/socket.c cups-1.2.x/backend/socket.c
---- release-1.2.1/backend/socket.c     2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/socket.c        2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   AppSocket backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -32,17 +32,11 @@
-  * Include necessary headers.
-  */
--#include <cups/backend.h>
- #include <cups/http-private.h>
--#include <cups/cups.h>
--#include <stdio.h>
--#include <stdlib.h>
-+#include "backend-private.h"
- #include <stdarg.h>
--#include <cups/string.h>
--#include <errno.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <signal.h>
- #ifdef WIN32
- #  include <winsock.h>
-@@ -76,24 +70,19 @@
-               name[255],              /* Name of option */
-               value[255],             /* Value of option */
-               *ptr;                   /* Pointer into name or value */
--  int         fp;                     /* Print file */
-+  int         print_fd;               /* Print file */
-   int         copies;                 /* Number of copies to print */
-   int         waiteof;                /* Wait for end-of-file? */
-   int         port;                   /* Port number */
-   char                portname[255];          /* Port name */
-   int         delay;                  /* Delay for retries... */
--  int         fd;                     /* AppSocket */
-+  int         device_fd;              /* AppSocket */
-   int         error;                  /* Error code (if any) */
-   http_addrlist_t *addrlist;          /* Address list */
--  int         rbytes;                 /* Number of bytes read */
--  int         wbytes;                 /* Number of bytes written */
--  int         nbytes;                 /* Number of bytes read */
--  size_t      tbytes;                 /* Total number of bytes written */
--  char                buffer[8192],           /* Output buffer */
--              *bufptr;                /* Pointer into buffer */
-+  ssize_t     tbytes;                 /* Total number of bytes written */
-   struct timeval timeout;             /* Timeout for select() */
--  fd_set      input,                  /* Input set for select() */
--              output;                 /* Output set for select() */
-+  fd_set      input;                  /* Input set for select() */
-+  ssize_t     bc_bytes;               /* Number of back-channel bytes read */
- #if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
-   struct sigaction action;            /* Actions for POSIX signals */
- #endif /* HAVE_SIGACTION && !HAVE_SIGSET */
-@@ -142,8 +131,8 @@
-   if (argc == 6)
-   {
--    fp     = 0;
--    copies = 1;
-+    print_fd = 0;
-+    copies   = 1;
-   }
-   else
-   {
-@@ -151,7 +140,7 @@
-     * Try to open the print file...
-     */
--    if ((fp = open(argv[6], O_RDONLY)) < 0)
-+    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
-     {
-       perror("ERROR: unable to open print file");
-       return (CUPS_BACKEND_FAILED);
-@@ -252,228 +241,134 @@
-   fprintf(stderr, "INFO: Attempting to connect to host %s on port %d\n",
-           hostname, port);
--  wbytes = 0;
-+  fputs("STATE: +connecting-to-device\n", stderr);
--  while (copies > 0)
-+  for (delay = 5;;)
-   {
--    fputs("STATE: +connecting-to-device\n", stderr);
--
--    for (delay = 5;;)
-+    if (!httpAddrConnect(addrlist, &device_fd))
-     {
--      if (!httpAddrConnect(addrlist, &fd))
--      {
--      error = errno;
--      fd    = -1;
-+      error     = errno;
-+      device_fd = -1;
--      if (getenv("CLASS") != NULL)
--      {
--       /*
--          * If the CLASS environment variable is set, the job was submitted
--        * to a class and not to a specific queue.  In this case, we want
--        * to abort immediately so that the job can be requeued on the next
--        * available printer in the class.
--        */
-+      if (getenv("CLASS") != NULL)
-+      {
-+       /*
-+        * If the CLASS environment variable is set, the job was submitted
-+      * to a class and not to a specific queue.  In this case, we want
-+      * to abort immediately so that the job can be requeued on the next
-+      * available printer in the class.
-+      */
--          fprintf(stderr, "INFO: Unable to connect to \"%s\", queuing on next printer in class...\n",
--                hostname);
-+        fprintf(stderr, "INFO: Unable to connect to \"%s\", queuing on next printer in class...\n",
-+              hostname);
--       /*
--          * Sleep 5 seconds to keep the job from requeuing too rapidly...
--        */
-+       /*
-+        * Sleep 5 seconds to keep the job from requeuing too rapidly...
-+      */
--        sleep(5);
-+      sleep(5);
--          return (CUPS_BACKEND_FAILED);
--      }
-+        return (CUPS_BACKEND_FAILED);
-+      }
--      if (error == ECONNREFUSED || error == EHOSTDOWN ||
--            error == EHOSTUNREACH)
--      {
--        fprintf(stderr, "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
--                  hostname, delay);
--        sleep(delay);
-+      if (error == ECONNREFUSED || error == EHOSTDOWN ||
-+          error == EHOSTUNREACH)
-+      {
-+      fprintf(stderr,
-+              "INFO: Network host \'%s\' is busy; will retry in %d seconds...\n",
-+                hostname, delay);
-+      sleep(delay);
--        if (delay < 30)
--          delay += 5;
--      }
--      else
--      {
--        perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
--        sleep(30);
--      }
-+      if (delay < 30)
-+        delay += 5;
-       }
-       else
--      break;
-+      {
-+      perror("ERROR: Unable to connect to printer (retrying in 30 seconds)");
-+      sleep(30);
-+      }
-     }
-+    else
-+      break;
-+  }
--    fputs("STATE: -connecting-to-device\n", stderr);
--
--   /*
--    * Now that we are "connected" to the port, ignore SIGTERM so that we
--    * can finish out any page data the driver sends (e.g. to eject the
--    * current page...  Only ignore SIGTERM if we are printing data from
--    * stdin (otherwise you can't cancel raw jobs...)
--    */
--
--    if (argc < 7)
--    {
--#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
--      sigset(SIGTERM, SIG_IGN);
--#elif defined(HAVE_SIGACTION)
--      memset(&action, 0, sizeof(action));
-+  fputs("STATE: -connecting-to-device\n", stderr);
--      sigemptyset(&action.sa_mask);
--      action.sa_handler = SIG_IGN;
--      sigaction(SIGTERM, &action, NULL);
--#else
--      signal(SIGTERM, SIG_IGN);
--#endif /* HAVE_SIGSET */
--    }
-+ /*
-+  * Print everything...
-+  */
--   /*
--    * Finally, send the print file...
--    */
-+  tbytes = 0;
-+  while (copies > 0 && tbytes >= 0)
-+  {
-     copies --;
--    if (fp != 0)
-+    if (print_fd != 0)
-     {
-       fputs("PAGE: 1 1\n", stderr);
--      lseek(fp, 0, SEEK_SET);
-+      lseek(print_fd, 0, SEEK_SET);
-     }
--    fputs("INFO: Connected to host, sending print job...\n", stderr);
--
--    tbytes = 0;
--    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
--    {
--     /*
--      * Write the print data to the printer...
--      */
--
--      tbytes += nbytes;
--      bufptr = buffer;
--
--      while (nbytes > 0)
--      {
--       /*
--        * See if we are ready to read or write...
--      */
--
--        do
--      {
--          FD_ZERO(&input);
--        FD_SET(fd, &input);
--        FD_ZERO(&output);
--        FD_SET(fd, &output);
--        }
--      while (select(fd + 1, &input, &output, NULL, NULL) < 0);
--
--        if (FD_ISSET(fd, &input))
--      {
--       /*
--        * Read backchannel data...
--        */
--
--        if ((rbytes = recv(fd, resource, sizeof(resource), 0)) > 0)
--        {
--          fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
--                  rbytes);
--            cupsBackChannelWrite(resource, rbytes, 1.0);
--          }
--      }
--
--        if (FD_ISSET(fd, &output))
--      {
--       /*
--        * Write print data...
--        */
--
--        if ((wbytes = send(fd, bufptr, nbytes, 0)) < 0)
--        {
--         /*
--          * Check for retryable errors...
--          */
-+    tbytes = backendRunLoop(print_fd, device_fd, 1);
--          if (errno != EAGAIN && errno != EINTR)
--          {
--            perror("ERROR: Unable to send print file to printer");
--            break;
--          }
--        }
--        else
--        {
--         /*
--          * Update count and pointer...
--          */
-+    if (print_fd != 0 && tbytes >= 0)
-+      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
-+            CUPS_LLCAST tbytes);
-+  }
--          nbytes -= wbytes;
--          bufptr += wbytes;
--        }
--        }
--      }
-+  if (waiteof)
-+  {
-+   /*
-+    * Shutdown the socket and wait for the other end to finish...
-+    */
--      if (wbytes < 0)
--        break;
-+    fputs("INFO: Print file sent, waiting for printer to finish...\n", stderr);
--      if (argc > 6)
--      fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
--              (unsigned long)tbytes);
--    }
-+    shutdown(device_fd, 1);
--    if (waiteof)
-+    for (;;)
-     {
-      /*
--      * Shutdown the socket and wait for the other end to finish...
-+      * Wait a maximum of 90 seconds for backchannel data or a closed
-+      * connection...
-       */
--      fputs("INFO: Print file sent, waiting for printer to finish...\n", stderr);
-+      timeout.tv_sec  = 90;
-+      timeout.tv_usec = 0;
--      shutdown(fd, 1);
-+      FD_ZERO(&input);
-+      FD_SET(device_fd, &input);
--      for (;;)
-+#ifdef __hpux
-+      if (select(device_fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
-+#else
-+      if (select(device_fd + 1, &input, NULL, NULL, &timeout) > 0)
-+#endif /* __hpux */
-       {
-        /*
--      * Wait a maximum of 90 seconds for backchannel data or a closed
--      * connection...
-+      * Grab the data coming back and spit it out to stderr...
-       */
--      timeout.tv_sec  = 90;
--      timeout.tv_usec = 0;
--
--      FD_ZERO(&input);
--      FD_SET(fd, &input);
--
--  #ifdef __hpux
--      if (select(fd + 1, (int *)&input, NULL, NULL, &timeout) > 0)
--  #else
--      if (select(fd + 1, &input, NULL, NULL, &timeout) > 0)
--  #endif /* __hpux */
-+      if ((bc_bytes = read(device_fd, resource, sizeof(resource))) > 0)
-       {
--       /*
--        * Grab the data coming back and spit it out to stderr...
--        */
--
--        if ((rbytes = recv(fd, resource, sizeof(resource), 0)) > 0)
--        {
--          fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
--                  rbytes);
--          cupsBackChannelWrite(resource, rbytes, 1.0);
--        }
--        else
--          break;
-+        fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
-+                (int)bc_bytes);
-+        cupsBackChannelWrite(resource, bc_bytes, 1.0);
-       }
-       else
-         break;
-       }
-+      else
-+      break;
-     }
-+  }
--   /*
--    * Close the socket connection...
--    */
-+ /*
-+  * Close the socket connection...
-+  */
--    close(fd);
--  }
-+  close(device_fd);
-   httpAddrFreeList(addrlist);
-@@ -481,16 +376,16 @@
-   * Close the input file and return...
-   */
--  if (fp != 0)
--    close(fp);
-+  if (print_fd != 0)
-+    close(print_fd);
--  if (wbytes >= 0)
-+  if (tbytes >= 0)
-     fputs("INFO: Ready to print.\n", stderr);
--  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
-+  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
- }
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/test1284.c cups-1.2.x/backend/test1284.c
---- release-1.2.1/backend/test1284.c   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/test1284.c      2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   IEEE-1284 support functions test program for the Common UNIX Printing
-  *   System (CUPS).
-@@ -41,6 +41,7 @@
- #  include <unistd.h>
- #  include <fcntl.h>
- #endif /* WIN32 */
-+
- #define DEBUG
- #include "ieee1284.c"
-@@ -76,8 +77,8 @@
-     printf("%s:\n", argv[i]);
--    get_device_id(fd, device_id, sizeof(device_id), make_model,
--                  sizeof(make_model), "test", uri, sizeof(uri));
-+    backendGetDeviceID(fd, device_id, sizeof(device_id), make_model,
-+                       sizeof(make_model), "test", uri, sizeof(uri));
-     printf("    device_id=\"%s\"\n", device_id);
-     printf("    make_model=\"%s\"\n", make_model);
-@@ -91,5 +92,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/usb.c cups-1.2.x/backend/usb.c
---- release-1.2.1/backend/usb.c        2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/usb.c   2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   USB port backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -63,7 +63,7 @@
- void  list_devices(void);
- int   print_device(const char *uri, const char *hostname,
-                    const char *resource, const char *options,
--                   int fp, int copies, int argc, char *argv[]);
-+                   int print_fd, int copies, int argc, char *argv[]);
- /*
-@@ -108,7 +108,7 @@
-              const char *hostname,    /* I - Hostname/manufacturer */
-              const char *resource,    /* I - Resource/modelname */
-            const char *options,       /* I - Device options/serial number */
--           int        fp,             /* I - File descriptor to print */
-+           int        print_fd,       /* I - File descriptor to print */
-            int        copies,         /* I - Copies to print */
-            int        argc,           /* I - Number of command-line arguments (6 or 7) */
-            char       *argv[])        /* I - Command-line arguments */
-@@ -124,7 +124,7 @@
-   (void)hostname;
-   (void)resource;
-   (void)options;
--  (void)fp;
-+  (void)print_fd;
-   (void)copies;
-   (void)argc;
-   (void)argv;
-@@ -146,7 +146,7 @@
- main(int  argc,                               /* I - Number of command-line arguments (6 or 7) */
-      char *argv[])                    /* I - Command-line arguments */
- {
--  int         fp;                     /* Print file */
-+  int         print_fd;               /* Print file */
-   int         copies;                 /* Number of copies to print */
-   int         status;                 /* Exit status */
-   int         port;                   /* Port number (not used) */
-@@ -232,8 +232,8 @@
-   if (argc == 6)
-   {
--    fp     = 0;
--    copies = 1;
-+    print_fd = 0;
-+    copies   = 1;
-   }
-   else
-   {
-@@ -241,7 +241,7 @@
-     * Try to open the print file...
-     */
--    if ((fp = open(argv[6], O_RDONLY)) < 0)
-+    if ((print_fd = open(argv[6], O_RDONLY)) < 0)
-     {
-       fprintf(stderr, "ERROR: unable to open print file %s - %s\n",
-               argv[6], strerror(errno));
-@@ -255,19 +255,20 @@
-   * Finally, send the print file...
-   */
--  status = print_device(uri, hostname, resource, options, fp, copies, argc, argv);
-+  status = print_device(uri, hostname, resource, options, print_fd, copies,
-+                        argc, argv);
-  /*
-   * Close the input file and return...
-   */
--  if (fp != 0)
--    close(fp);
-+  if (print_fd != 0)
-+    close(print_fd);
-   return (status);
- }
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/usb-darwin.c cups-1.2.x/backend/usb-darwin.c
---- release-1.2.1/backend/usb-darwin.c 2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/usb-darwin.c    2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  * Â© Copyright 2005-2006 Apple Computer, Inc. All rights reserved.
-  *
-@@ -1310,7 +1310,7 @@
-      */
-     start = mach_absolute_time();
--    rbytes = sizeof(readbuffer) - 1;
-+    rbytes = sizeof(readbuffer);
-     readstatus = (*classdriver)->ReadPipe( classdriver, readbuffer, &rbytes );
-     if ( kIOReturnSuccess == readstatus && rbytes > 0 ) {
-@@ -1346,5 +1346,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/backend/usb-unix.c cups-1.2.x/backend/usb-unix.c
---- release-1.2.1/backend/usb-unix.c   2006-07-04 17:32:11.000000000 +0100
-+++ cups-1.2.x/backend/usb-unix.c      2006-06-26 12:42:40.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   USB port backend for the Common UNIX Printing System (CUPS).
-  *
-@@ -27,8 +27,9 @@
-  *
-  * Contents:
-  *
-- *   main()         - Send a file to the specified USB port.
-+ *   print_device() - Print a file to a USB device.
-  *   list_devices() - List all USB devices.
-+ *   open_device()  - Open a USB device...
-  */
- /*
-@@ -55,30 +56,20 @@
-              const char *hostname,    /* I - Hostname/manufacturer */
-              const char *resource,    /* I - Resource/modelname */
-            const char *options,       /* I - Device options/serial number */
--           int        fp,             /* I - File descriptor to print */
-+           int        print_fd,       /* I - File descriptor to print */
-            int        copies,         /* I - Copies to print */
-            int        argc,           /* I - Number of command-line arguments (6 or 7) */
-            char       *argv[])        /* I - Command-line arguments */
- {
--  int         usebc;                  /* Use backchannel path? */
--  int         fd;                     /* USB device */
--  int         rbytes;                 /* Number of bytes read */
--  int         wbytes;                 /* Number of bytes written */
--  size_t      nbytes,                 /* Number of bytes read */
--              tbytes;                 /* Total number of bytes written */
--  char                buffer[8192],           /* Output buffer */
--              *bufptr,                /* Pointer into buffer */
--              backbuf[1024];          /* Backchannel buffer */
-+  int         use_bc;                 /* Use backchannel path? */
-+  int         device_fd;              /* USB device */
-+  size_t      tbytes;                 /* Total number of bytes written */
-   struct termios opts;                        /* Parallel port options */
--  fd_set      input,                  /* Input set for select() */
--              output;                 /* Output set for select() */
--  int         paperout;               /* Paper out? */
--#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
--  struct sigaction action;            /* Actions for POSIX signals */
--#endif /* HAVE_SIGACTION && !HAVE_SIGSET */
--#ifdef __linux
-+#if defined(__linux) && defined(LP_POUTPA)
-   unsigned int        status;                 /* Port status (off-line, out-of-paper, etc.) */
--#endif /* __linux */
-+  int         paperout;               /* Paper out? */
-+#endif /* __linux && LP_POUTPA */
-+
-   (void)argc;
-   (void)argv;
-@@ -89,7 +80,7 @@
-   * when they get a read request...
-   */
--  usebc = strcasecmp(hostname, "Canon") != 0;
-+  use_bc = strcasecmp(hostname, "Canon") != 0;
-  /*
-   * Open the USB port device...
-@@ -99,7 +90,7 @@
-   do
-   {
--    if ((fd = open_device(uri)) == -1)
-+    if ((device_fd = open_device(uri)) == -1)
-     {
-       if (getenv("CLASS") != NULL)
-       {
-@@ -127,7 +118,8 @@
-         fputs("INFO: USB port busy; will retry in 30 seconds...\n", stderr);
-       sleep(30);
-       }
--      else if (errno == ENXIO || errno == EIO || errno == ENOENT || errno == ENODEV)
-+      else if (errno == ENXIO || errno == EIO || errno == ENOENT ||
-+               errno == ENODEV)
-       {
-         fputs("INFO: Printer not connected; will retry in 30 seconds...\n", stderr);
-       sleep(30);
-@@ -140,7 +132,7 @@
-       }
-     }
-   }
--  while (fd < 0);
-+  while (device_fd < 0);
-   fputs("STATE: -connecting-to-device\n", stderr);
-@@ -148,28 +140,25 @@
-   * Set any options provided...
-   */
--  tcgetattr(fd, &opts);
-+  tcgetattr(device_fd, &opts);
-   opts.c_lflag &= ~(ICANON | ECHO | ISIG);    /* Raw mode */
-   /**** No options supported yet ****/
--  tcsetattr(fd, TCSANOW, &opts);
--
-- /*
--  * Check printer status...
--  */
--
--  paperout = 0;
-+  tcsetattr(device_fd, TCSANOW, &opts);
- #if defined(__linux) && defined(LP_POUTPA)
-  /*
-   * Show the printer status before we send the file...
-   */
--  while (!ioctl(fd, LPGETSTATUS, &status))
-+  paperout = 0;
-+
-+  while (!ioctl(device_fd, LPGETSTATUS, &status))
-   {
--    fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n", status);
-+    fprintf(stderr, "DEBUG: LPGETSTATUS returned a port status of %02X...\n",
-+            status);
-     if (status & LP_POUTPA)
-     {
-@@ -191,146 +180,35 @@
- #endif /* __linux && LP_POUTPA */
-  /*
--  * Now that we are "connected" to the port, ignore SIGTERM so that we
--  * can finish out any page data the driver sends (e.g. to eject the
--  * current page...  Only ignore SIGTERM if we are printing data from
--  * stdin (otherwise you can't cancel raw jobs...)
--  */
--
--  if (!fp)
--  {
--#ifdef HAVE_SIGSET /* Use System V signals over POSIX to avoid bugs */
--    sigset(SIGTERM, SIG_IGN);
--#elif defined(HAVE_SIGACTION)
--    memset(&action, 0, sizeof(action));
--
--    sigemptyset(&action.sa_mask);
--    action.sa_handler = SIG_IGN;
--    sigaction(SIGTERM, &action, NULL);
--#else
--    signal(SIGTERM, SIG_IGN);
--#endif /* HAVE_SIGSET */
--  }
--
-- /*
-   * Finally, send the print file...
-   */
--  wbytes = 0;
-+  tbytes = 0;
--  while (copies > 0)
-+  while (copies > 0 && tbytes >= 0)
-   {
-     copies --;
--    if (fp != 0)
-+    if (print_fd != 0)
-     {
-       fputs("PAGE: 1 1\n", stderr);
--      lseek(fp, 0, SEEK_SET);
-+      lseek(print_fd, 0, SEEK_SET);
-     }
--    tbytes = 0;
--    while ((nbytes = read(fp, buffer, sizeof(buffer))) > 0)
--    {
--     /*
--      * Write the print data to the printer...
--      */
--
--      tbytes += nbytes;
--      bufptr = buffer;
--
--      while (nbytes > 0)
--      {
--       /*
--        * See if we are ready to read or write...
--      */
--
--        do
--      {
--          FD_ZERO(&input);
--        if (usebc)
--          FD_SET(fd, &input);
--
--        FD_ZERO(&output);
--        FD_SET(fd, &output);
--        }
--      while (select(fd + 1, &input, &output, NULL, NULL) < 0);
--
--        if (FD_ISSET(fd, &input))
--      {
--       /*
--        * Read backchannel data...
--        */
--
--        if ((rbytes = read(fd, backbuf, sizeof(backbuf))) > 0)
--        {
--          fprintf(stderr, "DEBUG: Received %d bytes of back-channel data!\n",
--                  rbytes);
--            cupsBackChannelWrite(backbuf, rbytes, 1.0);
--          }
--      }
--
--        if (FD_ISSET(fd, &output))
--      {
--       /*
--        * Write print data...
--        */
--
--        if ((wbytes = write(fd, bufptr, nbytes)) < 0)
--          if (errno == ENOTTY)
--            wbytes = write(fd, bufptr, nbytes);
--
--        if (wbytes < 0)
--        {
--         /*
--          * Check for retryable errors...
--          */
--
--          if (errno == ENOSPC)
--          {
--            paperout = 1;
--            fputs("ERROR: Out of paper!\n", stderr);
--            fputs("STATUS: +media-tray-empty-error\n", stderr);
--          }
--          else if (errno != EAGAIN && errno != EINTR)
--          {
--            perror("ERROR: Unable to send print file to printer");
--            break;
--          }
--        }
--        else
--        {
--         /*
--          * Update count and pointer...
--          */
--
--            if (paperout)
--          {
--            fputs("STATUS: -media-tray-empty-error\n", stderr);
--            paperout = 0;
--          }
--
--          nbytes -= wbytes;
--          bufptr += wbytes;
--        }
--      }
--      }
--
--      if (wbytes < 0)
--        break;
-+    tbytes = backendRunLoop(print_fd, device_fd, 1);
--      if (fp)
--      fprintf(stderr, "INFO: Sending print file, %lu bytes...\n",
--              (unsigned long)tbytes);
--    }
-+    if (print_fd != 0 && tbytes >= 0)
-+      fprintf(stderr, "INFO: Sent print file, " CUPS_LLFMT " bytes...\n",
-+            CUPS_LLCAST tbytes);
-   }
-  /*
-   * Close the USB port and return...
-   */
--  close(fd);
-+  close(device_fd);
--  return (wbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
-+  return (tbytes < 0 ? CUPS_BACKEND_FAILED : CUPS_BACKEND_OK);
- }
-@@ -372,9 +250,9 @@
-     if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
-     {
--      if (!get_device_id(fd, device_id, sizeof(device_id),
--                         make_model, sizeof(make_model),
--                       "usb", device_uri, sizeof(device_uri)))
-+      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
-+                              make_model, sizeof(make_model),
-+                            "usb", device_uri, sizeof(device_uri)))
-       printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
-              make_model, make_model, i + 1, device_id);
-@@ -401,9 +279,9 @@
-     if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
-     {
--      if (!get_device_id(fd, device_id, sizeof(device_id),
--                         make_model, sizeof(make_model),
--                       "usb", device_uri, sizeof(device_uri)))
-+      if (!backendGetDeviceID(fd, device_id, sizeof(device_id),
-+                              make_model, sizeof(make_model),
-+                            "usb", device_uri, sizeof(device_uri)))
-       printf("direct %s \"%s\" \"%s USB #%d\" \"%s\"\n", device_uri,
-              make_model, make_model, i + 1, device_id);
-@@ -446,7 +324,14 @@
-   if (!strncmp(uri, "usb:/dev/", 9))
- #ifdef __linux
--    return (-1); /* Do not allow direct devices anymore */
-+  {
-+   /*
-+    * Do not allow direct devices anymore...
-+    */
-+
-+    errno = ENODEV;
-+    return (-1);
-+  }
-   else if (!strncmp(uri, "usb://", 6))
-   {
-    /*
-@@ -486,9 +371,9 @@
-       if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
-       {
--        get_device_id(fd, device_id, sizeof(device_id),
--                        make_model, sizeof(make_model),
--                      "usb", device_uri, sizeof(device_uri));
-+        backendGetDeviceID(fd, device_id, sizeof(device_id),
-+                             make_model, sizeof(make_model),
-+                           "usb", device_uri, sizeof(device_uri));
-       }
-       else
-       {
-@@ -545,7 +430,14 @@
-     return (-1);
-   }
- #elif defined(__sun) && defined(ECPPIOC_GETDEVID)
--    return (-1); /* Do not allow direct devices anymore */
-+  {
-+   /*
-+    * Do not allow direct devices anymore...
-+    */
-+
-+    errno = ENODEV;
-+    return (-1);
-+  }
-   else if (!strncmp(uri, "usb://", 6))
-   {
-    /*
-@@ -572,9 +464,9 @@
-       sprintf(device, "/dev/usb/printer%d", i);
-       if ((fd = open(device, O_RDWR | O_EXCL)) >= 0)
--        get_device_id(fd, device_id, sizeof(device_id),
--                        make_model, sizeof(make_model),
--                      "usb", device_uri, sizeof(device_uri));
-+        backendGetDeviceID(fd, device_id, sizeof(device_id),
-+                             make_model, sizeof(make_model),
-+                           "usb", device_uri, sizeof(device_uri));
-       else
-       {
-        /*
-@@ -633,5 +525,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/berkeley/lpq.c cups-1.2.x/berkeley/lpq.c
---- release-1.2.1/berkeley/lpq.c       2006-07-04 17:32:18.000000000 +0100
-+++ cups-1.2.x/berkeley/lpq.c  2006-06-26 12:42:47.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   "lpq" command for the Common UNIX Printing System (CUPS).
-  *
-@@ -79,8 +79,6 @@
-   cups_lang_t *language;              /* Language */
--
--
-  /*
-   * Check for command-line options...
-   */
-@@ -677,5 +675,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/berkeley/lprm.c cups-1.2.x/berkeley/lprm.c
---- release-1.2.1/berkeley/lprm.c      2006-07-04 17:32:18.000000000 +0100
-+++ cups-1.2.x/berkeley/lprm.c 2006-06-28 09:59:03.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   "lprm" command for the Common UNIX Printing System (CUPS).
-  *
-@@ -57,7 +57,8 @@
-   ipp_op_t    op;             /* Operation */
-   cups_lang_t *language;      /* Language */
-   int         num_dests;      /* Number of destinations */
--  cups_dest_t *dests;         /* Destinations */
-+  cups_dest_t *dests,         /* Destinations */
-+              *defdest;       /* Default destination */
-   http_encryption_t encryption;       /* Encryption? */
-@@ -72,11 +73,6 @@
-   http       = NULL;
-   encryption = cupsEncryption();
-   language   = cupsLangDefault();
--  num_dests  = cupsGetDests(&dests);
--
--  for (i = 0; i < num_dests; i ++)
--    if (dests[i].is_default)
--      dest = dests[i].name;
-  /*
-   * Open a connection to the server...
-@@ -89,6 +85,10 @@
-     return (1);
-   }
-+  num_dests  = cupsGetDests2(http, &dests);
-+  defdest    = cupsGetDest(NULL, NULL, num_dests, dests);
-+  dest       = defdest ? defdest->name : NULL;
-+
-  /*
-   * Process command-line arguments...
-   */
-@@ -102,6 +102,7 @@
-           encryption = HTTP_ENCRYPT_REQUIRED;
-           httpEncryption(http, encryption);
-+          cupsSetEncryption(encryption);
- #else
-             _cupsLangPrintf(stderr,
-                           _("%s: Sorry, no encryption support compiled in!\n"),
-@@ -152,9 +153,6 @@
-           break;
-           
-         case 'h' : /* Connect to host */
--          if (http != NULL)
--            httpClose(http);
--
-           if (argv[i][2] != '\0')
-               cupsSetServer(argv[i] + 2);
-           else
-@@ -172,6 +170,21 @@
-             else
-                 cupsSetServer(argv[i]);
-           }
-+
-+            httpClose(http);
-+            cupsFreeDests(num_dests, dests);
-+
-+          if ((http = httpConnectEncrypt(cupsServer(), ippPort(),
-+                                         encryption)) == NULL)
-+          {
-+            _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n"));
-+            cupsFreeDests(num_dests, dests);
-+            return (1);
-+          }
-+
-+          num_dests  = cupsGetDests2(http, &dests);
-+          defdest    = cupsGetDest(NULL, NULL, num_dests, dests);
-+          dest       = defdest ? defdest->name : NULL;
-           break;
-       default :
-@@ -283,5 +296,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cgi-bin/help-index.c cups-1.2.x/cgi-bin/help-index.c
---- release-1.2.1/cgi-bin/help-index.c 2006-07-04 17:35:24.000000000 +0100
-+++ cups-1.2.x/cgi-bin/help-index.c    2006-06-26 12:45:33.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   On-line help index routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -842,7 +842,7 @@
-       if (isspace(*ptr & 255))
-       {
-         while (isspace(*ptr & 255))
--          *ptr ++;
-+          ptr ++;
-         *text++ = ' ';
-         }
-@@ -979,5 +979,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/CHANGES.txt cups-1.2.x/CHANGES.txt
---- release-1.2.1/CHANGES.txt  2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/CHANGES.txt     2006-06-28 09:59:05.000000000 +0100
-@@ -1,8 +1,102 @@
--CHANGES.txt - 2006-05-22
-+CHANGES.txt - 2006-06-26
- ------------------------
-+CHANGES IN CUPS V1.2.2
-+
-+      - The scheduler used up the CPU if BrowseRemoteProtocols
-+        was empty (STR #1792)
-+      - Custom page sizes did not work (STR #1787)
-+      - The SNMP backend could crash on some systems when SNMP
-+        logging was enabled (STR #1789)
-+      - Browsing could produce some funny printer names when
-+        ServerName was set to an IP address (STR #1799)
-+      - Fixed the log message for BrowseRelay (STR #1798)
-+      - Fixes to allow CUPS to compile on MirBSD (STR #1796)
-+      - The scheduler incorrectly set the FINAL_CONTENT_TYPE
-+        environment variable (STR #1795)
-+      - The pdftops filter incorrectly embedded a "produced by"
-+        comment, causing PDF printing not to work on some
-+        operating systems (STR #1801)
-+      - Sending raw jobs from a client system could cause the
-+        client's scheduler to eventually crash (STR #1786)
-+      - The scheduler now checks that the notifier exists prior
-+        to accepting a new subscription request.
-+      - The scheduler now reports the supported
-+        notify-recipient schemes based on the contents of the
-+        ServerBin/notifier directory.
-+      - Event notifications did not include the
-+        notify-sequence-number or other required attributes
-+        (STR #1747)
-+      - Allow/Deny addresses of the form "11.22.33.*" did not
-+        work on Linux (STR #1769)
-+      - cupsGetPPD() did not work if the scheduler was only
-+        listening on a domain socket (STR #1766)
-+      - The scheduler could crash advertising a class (STR
-+        #1768)
-+      - The scheduler could crash if the default printer was
-+        deleted (STR #1776)
-+      - Added a new default CUPS raster format (v3) which does
-+        not compress the raster stream in order to provide the
-+        same cupsRasterReadPixels() and cupsRasterWritePixels()
-+        performance as CUPS 1.1.x.
-+      - The cupsaddsmb man page listed the wrong files for the
-+        CUPS driver.
-+      - Some configure --with options did not work (STR #1746)
-+      - "Allow @IF(name)" didn't work if "name" wasn't the
-+        first network interface (STR #1758)
-+      - The lpstat command did not use the correct character
-+        set when reporting the date and time (STR #1751)
-+      - The cupsaddsmb command and web interface did not update
-+        the Windows PPD files properly, resulting in corrupt
-+        PPD files for the Windows client to use (STR #1750)
-+      - The cupsd.conf man page didn't describe the Listen
-+        domain socket syntax (STR #1753)
-+      - The scheduler no longer tries to support more than
-+        FD_SETSIZE file descriptors.
-+      - CDSA (encryption) support fixes for MacOS X.
-+      - The lppasswd program needs to be setuid to root to
-+        create and update the /etc/cups/passwd.md5 file (STR
-+        #1735)
-+      - 32/64-bit library installation was broken (STR #1741)
-+      - The USB backend now reports a "no such device" error
-+        when using the old filename-based USB URIs instead of
-+        the "success" error.
-+      - Increased the HTTP and IPP read timeouts to 10 seconds,
-+        as 1 second was too short on congested networks (STR
-+        #1719)
-+      - The SNMP backend now uses the device description over
-+        the printer-make-and-model attribute when the attribute
-+        contains a generic name (STR #1728)
-+      - Fixed another file descriptor leak when printing raw
-+        files (STR #1736)
-+      - Raw queues were not shared via LDAP (STR #1739)
-+      - The pstops filter didn't always embed PageSetup
-+        commands from the PPD file (STR #1740)
-+      - "make install" didn't work if you disabled all of the
-+        localizations.
-+      - The scheduler didn't always choose the least costly
-+        filter.
-+      - Fixed parsing of IPv6 addresses in Allow, Deny,
-+        BrowseAllow, BrowseDeny, and BrowseRelay directives
-+        (STR #1713)
-+      - Printers that were shared via LDAP did not get added to
-+        the LDAP server properly (STR #1733)
-+      - LDAP browsing would crash the scheduler if a required
-+        value was missing (STR #1731)
-+      - Special cases for the "localhost" hostname did not
-+        work, causing printing to not work when the /etc/hosts
-+        file did not contain a localhost entry (STR #1723)
-+      - Updated the Spanish translation (STR #1720, STR #1770)
-+      - Reverse-order page output was broken when N-up or
-+        landscape orientations were used (STR #1725)
-+      - The parallel, serial, socket, and USB backends needed
-+        print data before they would report back-channel data,
-+        causing problems with several new drivers (STR #1724)
-+
-+
- CHANGES IN CUPS V1.2.1
-+      - "lprm -h hostname" did not work (STR #1800)
-       - The web interface did not handle reloads properly for
-         MSIE (STR #1716)
-       - The configure script no longer adds linker rpath
-diff -durN release-1.2.1/config.h.in cups-1.2.x/config.h.in
---- release-1.2.1/config.h.in  2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/config.h.in     2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Configuration file for the Common UNIX Printing System (CUPS).
-  *
-@@ -261,6 +261,13 @@
- /*
-+ * Do we have <Security/SecBasePriv.h>?
-+ */
-+
-+#undef HAVE_SECBASEPRIV_H
-+
-+
-+/*
-  * Do we have the SLP library?
-  */
-@@ -439,5 +446,5 @@
- #endif /* !_CUPS_CONFIG_H_ */
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/config-scripts/cups-compiler.m4 cups-1.2.x/config-scripts/cups-compiler.m4
---- release-1.2.1/config-scripts/cups-compiler.m4      2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-compiler.m4 2006-07-04 17:28:24.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Compiler stuff for the Common UNIX Printing System (CUPS).
- dnl
-@@ -24,22 +24,31 @@
- dnl Clear the debugging and non-shared library options unless the user asks
- dnl for them...
--ARCHFLAGS=""
- OPTIM=""
--AC_SUBST(ARCHFLAGS)
- AC_SUBST(OPTIM)
- AC_ARG_WITH(optim, [  --with-optim="flags"    set optimization flags ])
--AC_ARG_WITH(archflags, [  --with-arch="flags"     set default architecture flags ])
--
- AC_ARG_ENABLE(debug, [  --enable-debug          turn on debugging, default=no],
-       [if test x$enable_debug = xyes; then
-               OPTIM="-g"
-       fi])
-+dnl Setup general architecture flags...
-+AC_ARG_WITH(archflags, [  --with-archflags="flags"
-+                          set default architecture flags ])
-+
-+if test -z "$with_archflags"; then
-+      ARCHFLAGS=""
-+else
-+      ARCHFLAGS="$with_archflags"
-+fi
-+
-+AC_SUBST(ARCHFLAGS)
-+
- dnl Setup support for separate 32/64-bit library generation...
- AC_ARG_ENABLE(32bit, [  --enable-32bit          generate 32-bit libraries on 32/64-bit systems, default=no])
--AC_ARG_WITH(arch32flags, [  --with-arch32="flags"   specifies 32-bit architecture flags])
-+AC_ARG_WITH(arch32flags, [  --with-arch32flags="flags"
-+                          specifies 32-bit architecture flags])
- ARCH32FLAGS=""
- INSTALL32=""
-@@ -56,7 +65,8 @@
- AC_SUBST(UNINSTALL32)
- AC_ARG_ENABLE(64bit, [  --enable-64bit          generate 64-bit libraries on 32/64-bit systems, default=no])
--AC_ARG_WITH(arch64flags, [  --with-arch64="flags"   specifies 64-bit architecture flags])
-+AC_ARG_WITH(arch64flags, [  --with-arch64flags="flags"
-+                          specifies 64-bit architecture flags])
- ARCH64FLAGS=""
- INSTALL64=""
-@@ -118,17 +128,6 @@
-       fi
-       case "$uname" in
--              Darwin*)
--                      if test -z "$with_archflags"; then
--                              if test "x`uname -m`" = xi386; then
--                                      # Build universal binaries for OSX on Intel...
--                                      ARCHFLAGS="-arch i386 -arch ppc"
--                              fi
--                      else
--                              ARCHFLAGS="$with_archflags"
--                      fi
--                      ;;
--
-               IRIX)
-                       if test "x$enable_32bit" = xyes; then
-                               # Build 32-bit libraries, 64-bit base...
-@@ -149,8 +148,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch64flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-@@ -173,8 +170,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch32flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-                       ;;
-@@ -202,8 +197,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch64flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-@@ -229,8 +222,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch32flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-                       ;;
-@@ -255,8 +246,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch64flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-@@ -279,8 +268,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch32flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-                       ;;
-@@ -310,13 +297,6 @@
-                       # Warning 829 is passing constant string as char *
-                       CXXFLAGS="+W336,829 $CXXFLAGS"
--                      if test -z "$with_archflags"; then
--                              # Build portable binaries for all HP systems...
--                              ARCHFLAGS="+DAportable"
--                      else
--                              ARCHFLAGS="$with_archflags"
--                      fi
--
-                       if test $PICFLAG = 1; then
-                               OPTIM="+z $OPTIM"
-                       fi
-@@ -353,8 +333,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch64flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-@@ -377,8 +355,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch32flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-                       ;;
-@@ -386,7 +362,7 @@
-                       # Solaris
-                       if test -z "$OPTIM"; then
-                               if test "x$with_optim" = x; then
--                                      OPTIM="-xO4"
-+                                      OPTIM="-xO2"
-                               else
-                                       OPTIM="$with_optim $OPTIM"
-                               fi
-@@ -419,8 +395,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch64flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       else
-                               if test "x$enable_64bit" = xyes; then
-@@ -446,8 +420,6 @@
-                                       else
-                                               ARCHFLAGS="$with_arch32flags"
-                                       fi
--                              else
--                                      ARCHFLAGS="$with_archflags"
-                               fi
-                       fi
-                       ;;
-@@ -488,5 +460,5 @@
- fi
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-defaults.m4 cups-1.2.x/config-scripts/cups-defaults.m4
---- release-1.2.1/config-scripts/cups-defaults.m4      2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-defaults.m4 2006-06-26 12:42:46.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Default cupsd configuration settings for the Common UNIX Printing System
- dnl   (CUPS).
-@@ -30,7 +30,7 @@
- AC_SUBST(LANGUAGES)
- dnl Default ConfigFilePerm
--AC_ARG_WITH(config_perm, [  --with-config-file-perm set default ConfigFilePerm value, default=0640],
-+AC_ARG_WITH(config_file_perm, [  --with-config-file-perm set default ConfigFilePerm value, default=0640],
-       CUPS_CONFIG_FILE_PERM="$withval",
-       if test "x$uname" = xDarwin; then
-               CUPS_CONFIG_FILE_PERM="644"
-@@ -41,7 +41,7 @@
- AC_DEFINE_UNQUOTED(CUPS_DEFAULT_CONFIG_FILE_PERM, 0$CUPS_CONFIG_FILE_PERM)
- dnl Default LogFilePerm
--AC_ARG_WITH(log_perm, [  --with-log-file-perm    set default LogFilePerm value, default=0644],
-+AC_ARG_WITH(log_file_perm, [  --with-log-file-perm    set default LogFilePerm value, default=0644],
-       CUPS_LOG_FILE_PERM="$withval",
-       CUPS_LOG_FILE_PERM="644")
- AC_SUBST(CUPS_LOG_FILE_PERM)
-@@ -59,7 +59,7 @@
- AC_SUBST(CUPS_BROWSING)
- dnl Default BrowseLocalProtocols
--AC_ARG_WITH(browse_local, [  --with-local-protocols  set default BrowseLocalProtocols, default="CUPS"],
-+AC_ARG_WITH(local_protocols, [  --with-local-protocols  set default BrowseLocalProtocols, default="CUPS"],
-       CUPS_BROWSE_LOCAL_PROTOCOLS="$withval",
-       CUPS_BROWSE_LOCAL_PROTOCOLS="CUPS")
- AC_SUBST(CUPS_BROWSE_LOCAL_PROTOCOLS)
-@@ -67,7 +67,7 @@
-       "$CUPS_BROWSE_LOCAL_PROTOCOLS")
- dnl Default BrowseRemoteProtocols
--AC_ARG_WITH(browse_remote, [  --with-remote-protocols set default BrowseRemoteProtocols, default="CUPS"],
-+AC_ARG_WITH(remote_protocols, [  --with-remote-protocols set default BrowseRemoteProtocols, default="CUPS"],
-       CUPS_BROWSE_REMOTE_PROTOCOLS="$withval",
-       CUPS_BROWSE_REMOTE_PROTOCOLS="CUPS")
- AC_SUBST(CUPS_BROWSE_REMOTE_PROTOCOLS)
-@@ -130,7 +130,7 @@
- AC_SUBST(CUPS_USE_NETWORK_DEFAULT)
- dnl Determine the correct username and group for this OS...
--AC_ARG_WITH(cups-user, [  --with-cups-user        set default user for CUPS],
-+AC_ARG_WITH(cups_user, [  --with-cups-user        set default user for CUPS],
-       CUPS_USER="$withval",
-       AC_MSG_CHECKING(for default print user)
-       if test -f /etc/passwd; then
-@@ -152,7 +152,7 @@
-               AC_MSG_RESULT(no password file, using "$CUPS_USER")
-       fi)
--AC_ARG_WITH(cups-group, [  --with-cups-group       set default group for CUPS],
-+AC_ARG_WITH(cups_group, [  --with-cups-group       set default group for CUPS],
-       CUPS_GROUP="$withval",
-       AC_MSG_CHECKING(for default print group)
-       if test -f /etc/group; then
-@@ -175,7 +175,7 @@
-               AC_MSG_RESULT(no group file, using "$CUPS_GROUP")
-       fi)
--AC_ARG_WITH(system-groups, [  --with-system-groups    set default system groups for CUPS],
-+AC_ARG_WITH(system_groups, [  --with-system-groups    set default system groups for CUPS],
-       CUPS_SYSTEM_GROUPS="$withval",
-       if test x$uname = xDarwin; then
-               GROUP_LIST="admin"
-@@ -221,13 +221,25 @@
- dnl Default printcap file...
- AC_ARG_WITH(printcap, [  --with-printcap         set default printcap file],
-       default_printcap="$withval",
--      default_printcap="/etc/printcap")
-+      default_printcap="default")
- if test x$enable_printcap != xno -a x$default_printcap != xno; then
--      if test "x$default_printcap" = "x/etc/printcap" -a "$uname" = "Darwin" -a $uversion -ge 90; then
--              CUPS_DEFAULT_PRINTCAP=""
--      else
--              CUPS_DEFAULT_PRINTCAP="$default_printcap"
-+      if test "x$default_printcap" = "xdefault"; then
-+              case $uname in
-+                      Darwin*)
-+                              if test $uversion -ge 90; then
-+                                      CUPS_DEFAULT_PRINTCAP=""
-+                              else
-+                                      CUPS_DEFAULT_PRINTCAP="/etc/printcap"
-+                              fi
-+                              ;;
-+                      SunOS*)
-+                              CUPS_DEFAULT_PRINTCAP="/etc/printers.conf"
-+                              ;;
-+                      *)
-+                              CUPS_DEFAULT_PRINTCAP="/etc/printcap"
-+                              ;;
-+              esac
-       fi
- else
-       CUPS_DEFAULT_PRINTCAP=""
-@@ -236,5 +248,5 @@
- AC_DEFINE_UNQUOTED(CUPS_DEFAULT_PRINTCAP, "$CUPS_DEFAULT_PRINTCAP")
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-directories.m4 cups-1.2.x/config-scripts/cups-directories.m4
---- release-1.2.1/config-scripts/cups-directories.m4   2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-directories.m4      2006-06-28 09:59:03.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Directory stuff for the Common UNIX Printing System (CUPS).
- dnl
-@@ -115,7 +115,7 @@
- if test x$rcdir = x; then
-       case "$uname" in
--              FreeBSD* | OpenBSD*)
-+              FreeBSD* | OpenBSD* | MirBsD* | ekkoBSD*)
-                       # FreeBSD and OpenBSD
-                       INITDIR=""
-                       INITDDIR=""
-@@ -302,5 +302,5 @@
- AC_SUBST(CUPS_STATEDIR)
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-image.m4 cups-1.2.x/config-scripts/cups-image.m4
---- release-1.2.1/config-scripts/cups-image.m4 2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-image.m4    2006-06-26 12:42:46.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Image library/filter stuff for the Common UNIX Printing System (CUPS).
- dnl
-@@ -38,10 +38,6 @@
- AC_SUBST(IMGFILTERS)
--dnl Save the current libraries since we don't want the image libraries
--dnl included with every program...
--SAVELIBS="$LIBS"
--
- dnl Check for image libraries...
- AC_ARG_ENABLE(jpeg, [  --enable-jpeg           turn on JPEG support, default=yes])
- AC_ARG_ENABLE(png, [  --enable-png            turn on PNG support, default=yes])
-@@ -57,6 +53,14 @@
- AC_SUBST(LIBTIFF)
- AC_SUBST(LIBZ)
-+dnl Image libraries use math library functions...
-+AC_SEARCH_LIBS(pow, m)
-+
-+dnl Save the current libraries since we don't want the image libraries
-+dnl included with every program...
-+SAVELIBS="$LIBS"
-+
-+dnl JPEG library...
- if test x$enable_jpeg != xno; then
-     AC_CHECK_HEADER(jpeglib.h,
-       AC_CHECK_LIB(jpeg, jpeg_destroy_decompress,
-@@ -67,24 +71,24 @@
-     AC_MSG_NOTICE([JPEG support disabled with --disable-jpeg.])
- fi
-+dnl ZLIB library...
- AC_CHECK_HEADER(zlib.h,
-     AC_CHECK_LIB(z, gzgets,
-       AC_DEFINE(HAVE_LIBZ)
-       LIBZ="-lz"
-       LIBS="$LIBS -lz"))
--dnl PNG library uses math library functions...
--AC_CHECK_LIB(m, pow)
--
-+dnl PNG library...
- if test x$enable_png != xno; then
-     AC_CHECK_HEADER(png.h,
-       AC_CHECK_LIB(png, png_create_read_struct,
-           AC_DEFINE(HAVE_LIBPNG)
--          LIBPNG="-lpng -lm"))
-+          LIBPNG="-lpng"))
- else
-     AC_MSG_NOTICE([PNG support disabled with --disable-png.])
- fi
-+dnl TIFF library...
- if test x$enable_tiff != xno; then
-     AC_CHECK_HEADER(tiff.h,
-       AC_CHECK_LIB(tiff, TIFFReadScanline,
-@@ -110,5 +114,5 @@
- AC_CHECK_HEADER(stdlib.h,AC_DEFINE(HAVE_STDLIB_H))
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-network.m4 cups-1.2.x/config-scripts/cups-network.m4
---- release-1.2.1/config-scripts/cups-network.m4       2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-network.m4  2006-06-26 12:42:46.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Networking stuff for the Common UNIX Printing System (CUPS).
- dnl
-@@ -46,7 +46,7 @@
-       maxfiles=4096
- fi
--AC_ARG_WITH(maxfiles, [  --with-maxfiles=N       set maximum number of file descriptors for scheduler ],
-+AC_ARG_WITH(maxfiles, [  --with-maxfiles=N       set maximum number of file descriptors for scheduler (deprecated) ],
-       maxfiles=$withval)
- AC_DEFINE_UNQUOTED(CUPS_MAX_FDS, $maxfiles)
-@@ -85,5 +85,5 @@
- AC_SUBST(CUPS_LISTEN_DOMAINSOCKET)
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-sharedlibs.m4 cups-1.2.x/config-scripts/cups-sharedlibs.m4
---- release-1.2.1/config-scripts/cups-sharedlibs.m4    2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-sharedlibs.m4       2006-06-26 12:42:46.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Shared library support for the Common UNIX Printing System (CUPS).
- dnl
-@@ -117,7 +117,7 @@
-       # rather than to the executables.  This makes things smaller if you
-       # are using any static libraries, and it also allows us to distribute
-       # a single DSO rather than a bunch...
--      DSOLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
-+      DSOLIBS="\$(LIBTIFF) \$(LIBPNG) \$(LIBJPEG) \$(LIBZ)"
-       IMGLIBS=""
-       # Tell the run-time linkers where to find a DSO.  Some platforms
-@@ -126,46 +126,46 @@
-       case $uname in
-                 HP-UX*)
-                       # HP-UX needs the path, even for /usr/lib...
--                      DSOFLAGS="+s +b \$(libdir) $DSOFLAGS"
--                      DSO32FLAGS="+s +b \$(LIB32DIR) $DSO32FLAGS"
--                      DSO64FLAGS="+s +b \$(LIB64DIR) $DSO64FLAGS"
--                      LDFLAGS="$LDFLAGS -Wl,+s,+b,\$(libdir)"
--                      EXPORT_LDFLAGS="-Wl,+s,+b,\$(libdir)"
-+                      DSOFLAGS="+s +b $libdir $DSOFLAGS"
-+                      DSO32FLAGS="+s +b $LIB32DIR $DSO32FLAGS"
-+                      DSO64FLAGS="+s +b $LIB64DIR $DSO64FLAGS"
-+                      LDFLAGS="$LDFLAGS -Wl,+s,+b,$libdir"
-+                      EXPORT_LDFLAGS="-Wl,+s,+b,$libdir"
-                       ;;
-                 SunOS*)
-                       # Solaris...
-                       if test $exec_prefix != /usr; then
--                              DSOFLAGS="-R\$(libdir) $DSOFLAGS"
--                              DSO32FLAGS="-R\$(LIB32DIR) $DSO32FLAGS"
--                              DSO64FLAGS="-R\$(LIB64DIR) $DSO64FLAGS"
--                              LDFLAGS="$LDFLAGS -R\$(libdir)"
--                              EXPORT_LDFLAGS="-R\$(libdir)"
-+                              DSOFLAGS="-R$libdir $DSOFLAGS"
-+                              DSO32FLAGS="-R$LIB32DIR $DSO32FLAGS"
-+                              DSO64FLAGS="-R$LIB64DIR $DSO64FLAGS"
-+                              LDFLAGS="$LDFLAGS -R$libdir"
-+                              EXPORT_LDFLAGS="-R$libdir"
-                       fi
-                       ;;
-                 *BSD*)
-                         # *BSD...
-                       if test $exec_prefix != /usr; then
--                              DSOFLAGS="-Wl,-R\$(libdir) $DSOFLAGS"
--                              DSO32FLAGS="-Wl,-R\$(LIB32DIR) $DSO32FLAGS"
--                              DSO64FLAGS="-Wl,-R\$(LIB64DIR) $DSO64FLAGS"
--                              LDFLAGS="$LDFLAGS -Wl,-R\$(libdir)"
--                              EXPORT_LDFLAGS="-Wl,-R\$(libdir)"
-+                              DSOFLAGS="-Wl,-R$libdir $DSOFLAGS"
-+                              DSO32FLAGS="-Wl,-R$LIB32DIR $DSO32FLAGS"
-+                              DSO64FLAGS="-Wl,-R$LIB64DIR $DSO64FLAGS"
-+                              LDFLAGS="$LDFLAGS -Wl,-R$libdir"
-+                              EXPORT_LDFLAGS="-Wl,-R$libdir"
-                       fi
-                       ;;
-                 IRIX | Linux | GNU)
-                         # IRIX, Linux, and HURD...
-                       if test $exec_prefix != /usr; then
--                              DSOFLAGS="-Wl,-rpath,\$(libdir) $DSOFLAGS"
--                              DSO32FLAGS="-Wl,-rpath,\$(LIB32DIR) $DSO32FLAGS"
--                              DSO64FLAGS="-Wl,-rpath,\$(LIB64DIR) $DSO64FLAGS"
--                              LDFLAGS="$LDFLAGS -Wl,-rpath,\$(libdir)"
--                              EXPORT_LDFLAGS="-Wl,-rpath,\$(libdir)"
-+                              DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS"
-+                              DSO32FLAGS="-Wl,-rpath,$LIB32DIR $DSO32FLAGS"
-+                              DSO64FLAGS="-Wl,-rpath,$LIB64DIR $DSO64FLAGS"
-+                              LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir"
-+                              EXPORT_LDFLAGS="-Wl,-rpath,$libdir"
-                       fi
-                       ;;
-       esac
- else
-       DSOLIBS=""
--      IMGLIBS="\$(LIBPNG) \$(LIBTIFF) \$(LIBJPEG) \$(LIBZ)"
-+      IMGLIBS="\$(LIBTIFF) \$(LIBPNG) \$(LIBJPEG) \$(LIBZ)"
- fi
- AC_SUBST(DSOLIBS)
-@@ -173,5 +173,5 @@
- AC_SUBST(EXPORT_LDFLAGS)
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/config-scripts/cups-ssl.m4 cups-1.2.x/config-scripts/cups-ssl.m4
---- release-1.2.1/config-scripts/cups-ssl.m4   2006-07-04 17:32:16.000000000 +0100
-+++ cups-1.2.x/config-scripts/cups-ssl.m4      2006-06-26 12:42:46.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   OpenSSL/GNUTLS stuff for the Common UNIX Printing System (CUPS).
- dnl
-@@ -48,6 +48,7 @@
-                # certificates for CUPS, so don't enable encryption on
-                # /admin just yet...
-                #ENCRYPTION_REQUIRED="  Encryption Required"
-+               AC_CHECK_HEADER(Security/SecBasePriv.h,AC_DEFINE(HAVE_SECBASEPRIV_H))
-                AC_DEFINE(HAVE_SSL)
-                AC_DEFINE(HAVE_CDSASSL)])
-       fi
-@@ -114,5 +115,5 @@
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/configure.in cups-1.2.x/configure.in
---- release-1.2.1/configure.in 2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/configure.in    2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- dnl
--dnl "$Id$"
-+dnl "$Id$"
- dnl
- dnl   Configuration script for the Common UNIX Printing System (CUPS).
- dnl
-@@ -47,8 +47,12 @@
- sinclude(config-scripts/cups-pdf.m4)
- sinclude(config-scripts/cups-scripting.m4)
-+INSTALL_LANGUAGES=""
-+UNINSTALL_LANGUAGES=""
- LANGFILES=""
- if test "x$LANGUAGES" != x; then
-+      INSTALL_LANGUAGES="install-languages"
-+      UNINSTALL_LANGUAGES="uninstall-languages"
-       for lang in $LANGUAGES; do
-               LANGFILES="$LANGFILES doc/$lang/index.html"
-               LANGFILES="$LANGFILES templates/$lang/edit-config.tmpl"
-@@ -56,6 +60,9 @@
-       done
- fi
-+AC_SUBST(INSTALL_LANGUAGES)
-+AC_SUBST(UNINSTALL_LANGUAGES)
-+
- AC_OUTPUT(Makedefs packaging/cups.list init/cups.sh init/cups-lpd cups-config
-         conf/cupsd.conf conf/pam.std doc/index.html
-         doc/help/standard.html man/client.conf.man
-@@ -68,5 +75,5 @@
- chmod +x cups-config
- dnl
--dnl End of "$Id$".
-+dnl End of "$Id$".
- dnl
-diff -durN release-1.2.1/cups/adminutil.c cups-1.2.x/cups/adminutil.c
---- release-1.2.1/cups/adminutil.c     2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/adminutil.c        2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Administration utility API definitions for the Common UNIX Printing
-  *   System (CUPS).
-@@ -222,18 +222,18 @@
-       */
-       cupsFilePrintf(dstfp, "*%% Commented out for CUPS Windows Driver...\n"
--                            "*%%%s", line + 1);
-+                            "*%%%s\n", line + 1);
-       continue;
-     }
-     else if (!strncmp(line, "*JCLOpenUI", 10))
-     {
-       jcloption = 1;
--      cupsFilePuts(dstfp, line);
-+      cupsFilePrintf(dstfp, "%s\n", line);
-     }
-     else if (!strncmp(line, "*JCLCloseUI", 11))
-     {
-       jcloption = 0;
--      cupsFilePuts(dstfp, line);
-+      cupsFilePrintf(dstfp, "%s\n", line);
-     }
-     else if (jcloption &&
-              strncmp(line, "*End", 4) &&
-@@ -312,12 +312,13 @@
-       }
-       snprintf(ptr + 1, sizeof(line) - (ptr - line + 1),
--               "%%cupsJobTicket: %s=%s\n\"\n*End\n", option, choice);
-+               "%%cupsJobTicket: %s=%s\n\"\n*End", option, choice);
--      cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s", line);
-+      cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s\n",
-+                     line);
-     }
-     else
--      cupsFilePuts(dstfp, line);
-+      cupsFilePrintf(dstfp, "%s\n", line);
-   }
-   cupsFileClose(srcfp);
-@@ -1927,5 +1928,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/emit.c cups-1.2.x/cups/emit.c
---- release-1.2.1/cups/emit.c  2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/emit.c     2006-06-28 09:59:04.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   PPD code emission routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -50,6 +50,7 @@
- #include <stdlib.h>
- #include "string.h"
- #include <errno.h>
-+#include "debug.h"
- #if defined(WIN32) || defined(__EMX__)
- #  include <io.h>
-@@ -111,6 +112,9 @@
-   ppd_choice_t        **collect;              /* Collected choices */
-+  DEBUG_printf(("ppdCollect2(ppd=%p, section=%d, min_order=%f, choices=%p)\n",
-+                ppd, section, min_order, choices));
-+
-   if (ppd == NULL)
-     return (0);
-@@ -132,6 +136,8 @@
-       for (k = o->num_choices, c = o->choices; k > 0; k --, c ++)
-         if (c->marked && count < 1000)
-         {
-+          DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
-+                        c->choice));
-             collect[count] = c;
-           count ++;
-         }
-@@ -142,6 +148,8 @@
-         for (m = o->num_choices, c = o->choices; m > 0; m --, c ++)
-           if (c->marked && count < 1000)
-           {
-+            DEBUG_printf(("ppdCollect2: %s=%s marked...\n", o->keyword,
-+                          c->choice));
-               collect[count] = c;
-             count ++;
-           }
-@@ -155,6 +163,8 @@
-     qsort(collect, count, sizeof(ppd_choice_t *),
-           (int (*)(const void *, const void *))ppd_sort);
-+  DEBUG_printf(("ppdCollect2: %d marked choices...\n", count));
-+
-  /*
-   * Return the array and number of choices; if 0, free the array since
-   * it isn't needed.
-@@ -492,6 +502,9 @@
-   struct lconv        *loc;                   /* Locale data */
-+  DEBUG_printf(("ppdEmitString(ppd=%p, section=%d, min_order=%f)\n",
-+                ppd, section, min_order));
-+
-  /*
-   * Range check input...
-   */
-@@ -527,6 +540,8 @@
-            !strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
-           !strcasecmp(choices[i]->choice, "Custom"))
-       {
-+        DEBUG_puts("ppdEmitString: Custom size set!");
-+
-         bufsize += 37;                        /* %%BeginFeature: *CustomPageSize True\n */
-         bufsize += 50;                        /* Five 9-digit numbers + newline */
-       }
-@@ -580,6 +595,8 @@
-   * Allocate memory...
-   */
-+  DEBUG_printf(("ppdEmitString: Allocating %d bytes for string...\n", bufsize));
-+
-   if ((buffer = calloc(1, bufsize)) == NULL)
-   {
-     free(choices);
-@@ -608,6 +625,9 @@
-       * Send DSC comments with option...
-       */
-+      DEBUG_printf(("Adding code for %s=%s...\n", choices[i]->option->keyword,
-+                    choices[i]->choice));
-+
-       if ((!strcasecmp(choices[i]->option->keyword, "PageSize") ||
-            !strcasecmp(choices[i]->option->keyword, "PageRegion")) &&
-           !strcasecmp(choices[i]->choice, "Custom"))
-@@ -800,6 +820,9 @@
-       strlcpy(bufptr, "%%EndFeature\n"
-                     "} stopped cleartomark\n", bufend - bufptr + 1);
-       bufptr += strlen(bufptr);
-+
-+      DEBUG_printf(("ppdEmitString: Offset in string is %d...\n",
-+                    bufptr - buffer));
-     }
-     else
-     {
-@@ -917,5 +940,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/http-addrlist.c cups-1.2.x/cups/http-addrlist.c
---- release-1.2.1/cups/http-addrlist.c 2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/http-addrlist.c    2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   HTTP address list routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -412,7 +412,7 @@
-           if (host->h_addrtype == AF_INET6)
-         {
-             temp->addr.ipv6.sin6_family = AF_INET6;
--          memcpy(&(temp->addr.ipv6), host->h_addr_list[i],
-+          memcpy(&(temp->addr.ipv6.sin6_addr), host->h_addr_list[i],
-                  sizeof(temp->addr.ipv6));
-             temp->addr.ipv6.sin6_port = htons(portnum);
-         }
-@@ -420,7 +420,7 @@
- #  endif /* AF_INET6 */
-         {
-             temp->addr.ipv4.sin_family = AF_INET;
--          memcpy(&(temp->addr.ipv4), host->h_addr_list[i],
-+          memcpy(&(temp->addr.ipv4.sin_addr), host->h_addr_list[i],
-                  sizeof(temp->addr.ipv4));
-             temp->addr.ipv4.sin_port = htons(portnum);
-           }
-@@ -506,6 +506,9 @@
-       temp->addr.ipv6.sin6_addr.s6_addr32[3] = htonl(1);
- #  endif /* WIN32 */
-+        if (!first)
-+          first = temp;
-+
-         addr = temp;
-       }
-@@ -527,6 +530,9 @@
-       temp->addr.ipv4.sin_port        = htons(portnum);
-       temp->addr.ipv4.sin_addr.s_addr = htonl(0x7f000001);
-+        if (!first)
-+          first = temp;
-+
-         if (addr)
-         addr->next = temp;
-       else
-@@ -556,6 +562,9 @@
-         temp->addr.ipv6.sin6_family = AF_INET6;
-       temp->addr.ipv6.sin6_port   = htons(portnum);
-+        if (!first)
-+          first = temp;
-+
-         addr = temp;
-       }
-@@ -576,6 +585,9 @@
-         temp->addr.ipv4.sin_family = AF_INET;
-       temp->addr.ipv4.sin_port   = htons(portnum);
-+        if (!first)
-+          first = temp;
-+
-         if (addr)
-         addr->next = temp;
-       else
-@@ -593,5 +605,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/http.c cups-1.2.x/cups/http.c
---- release-1.2.1/cups/http.c  2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/http.c     2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   HTTP routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -866,7 +866,7 @@
-       * No newline; see if there is more data to be read...
-       */
--      if (!http->blocking && !http_wait(http, 1000))
-+      if (!http->blocking && !http_wait(http, 10000))
-       {
-         DEBUG_puts("httpGets: Timed out!");
-         http->error = ETIMEDOUT;
-@@ -1222,7 +1222,7 @@
-     * Buffer small reads for better performance...
-     */
--    if (!http->blocking && !httpWait(http, 1000))
-+    if (!http->blocking && !httpWait(http, 10000))
-       return (0);
-     if (http->data_remaining > sizeof(http->buffer))
-@@ -1285,7 +1285,7 @@
- #ifdef HAVE_SSL
-   else if (http->tls)
-   {
--    if (!http->blocking && !httpWait(http, 1000))
-+    if (!http->blocking && !httpWait(http, 10000))
-       return (0);
-     bytes = http_read_ssl(http, buffer, length);
-@@ -1293,7 +1293,7 @@
- #endif /* HAVE_SSL */
-   else
-   {
--    if (!http->blocking && !httpWait(http, 1000))
-+    if (!http->blocking && !httpWait(http, 10000))
-       return (0);
-     DEBUG_printf(("httpRead2: reading %d bytes from socket...\n", length));
-@@ -1415,13 +1415,11 @@
-     *dataLength = 0;
-     if (bytes == 0)
--      result = errSSLClosedAbort;
-+      result = errSSLClosedGraceful;
-     else if (errno == EAGAIN)
-       result = errSSLWouldBlock;
--    else if (errno == EPIPE)
--      result = errSSLClosedAbort;
-     else
--      result = errSSLInternal;
-+      result = errSSLClosedAbort;
-   }
-   return result;
-@@ -1994,10 +1992,8 @@
-   
-     if (errno == EAGAIN)
-       result = errSSLWouldBlock;
--    else if (errno == EPIPE)
--      result = errSSLClosedAbort;
-     else
--      result = errSSLInternal;
-+      result = errSSLClosedAbort;
-   }
-   return result;
-@@ -2338,6 +2334,9 @@
-     error = SSLSetAllowsAnyRoot(conn->session, true);
-   if (!error)
-+    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
-+
-+  if (!error)
-   {
-     while ((error = SSLHandshake(conn->session)) == errSSLWouldBlock)
-       usleep(1000);
-@@ -2802,5 +2801,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/http.h cups-1.2.x/cups/http.h
---- release-1.2.1/cups/http.h  2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/http.h     2006-06-28 09:59:04.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Hyper-Text Transport Protocol definitions for the Common UNIX Printing
-  *   System (CUPS).
-@@ -98,7 +98,7 @@
- #if defined(AF_INET6) && !defined(s6_addr32)
- #  if defined(__sun)
- #    define s6_addr32 _S6_un._S6_u32
--#  elif defined(__FreeBSD__) || defined(__APPLE__)
-+#  elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__)
- #    define s6_addr32 __u6_addr.__u6_addr32
- #  elif defined(__osf__)
- #    define s6_addr32 s6_un.sa6_laddr
-@@ -322,6 +322,14 @@
- typedef struct _http_s                        /**** HTTP connection structure. ****/
- {
-+ /*
-+  * DO NOT ACCESS MEMBERS OF THIS STRUCTURE DIRECTLY; INSTEAD, USE THE
-+  * PROVIDED APIS FOR ACCESSING THE VALUES INSTEAD.
-+  *
-+  * This structure definition will be removed from the public headers in
-+  * CUPS 1.3.
-+  */
-+
-   int                 fd;             /* File descriptor for this socket */
-   int                 blocking;       /* To block or not to block */
-   int                 error;          /* Last error on read */
-@@ -496,5 +504,5 @@
- #endif /* !_CUPS_HTTP_H_ */
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/ipp.c cups-1.2.x/cups/ipp.c
---- release-1.2.1/cups/ipp.c   2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/ipp.c      2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Internet Printing Protocol support functions for the Common UNIX
-  *   Printing System (CUPS).
-@@ -2742,10 +2742,10 @@
-       if (!http->blocking)
-       {
-        /*
--        * Wait up to 1 second for more data on non-blocking sockets...
-+        * Wait up to 10 seconds for more data on non-blocking sockets...
-       */
--      if (!httpWait(http, 1000))
-+      if (!httpWait(http, 10000))
-       {
-        /*
-           * Signal no data...
-@@ -2824,5 +2824,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/Makefile cups-1.2.x/cups/Makefile
---- release-1.2.1/cups/Makefile        2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/Makefile   2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   API library Makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -138,7 +138,7 @@
- clean:
-       $(RM) $(OBJS) $(TARGETS)
-       $(RM) libcups.so libcups.sl libcups.dylib
--      $(RM) -r 32bit 64it
-+      $(RM) -r 32bit 64bit
- #
-@@ -186,12 +186,12 @@
- install32bit:
-       $(INSTALL_DIR) -m 755 $(LIB32DIR)
-       $(INSTALL_LIB) 32bit/libcups.so.2 $(LIB32DIR)/libcups.so.2
--      $(LN) libcups.so $(LIB32DIR)/libcups.so.2
-+      $(LN) libcups.so.2 $(LIB32DIR)/libcups.so
- install64bit:
-       $(INSTALL_DIR) -m 755 $(LIB64DIR)
-       $(INSTALL_LIB) 64bit/libcups.so.2 $(LIB64DIR)/libcups.so.2
--      $(LN) libcups.so $(LIB64DIR)/libcups.so.2
-+      $(LN) libcups.so.2 $(LIB64DIR)/libcups.so
- #
-@@ -449,5 +449,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/cups/mark.c cups-1.2.x/cups/mark.c
---- release-1.2.1/cups/mark.c  2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/mark.c     2006-06-28 09:59:04.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Option marking routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -407,6 +407,7 @@
-       ppd_cparam_t    *cparam;        /* Custom parameter */
-       char            *units;         /* Custom points units */
-+
-       if ((coption = ppdFindCustomOption(ppd, option)) != NULL)
-       {
-         if ((cparam = (ppd_cparam_t *)cupsArrayFirst(coption->params)) == NULL)
-@@ -455,6 +456,12 @@
-       }
-       }
-     }
-+
-+   /*
-+    * Make sure that we keep the option marked below...
-+    */
-+
-+    choice = "Custom";
-   }
-   else if (choice[0] == '{')
-   {
-@@ -679,5 +686,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/testhttp.c cups-1.2.x/cups/testhttp.c
---- release-1.2.1/cups/testhttp.c      2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/testhttp.c 2006-06-26 12:43:29.000000000 +0100
-@@ -1,9 +1,9 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   HTTP test program for the Common UNIX Printing System (CUPS).
-  *
-- *   Copyright 1997-2005 by Easy Software Products.
-+ *   Copyright 1997-2006 by Easy Software Products.
-  *
-  *   These coded instructions, statements, and computer programs are the
-  *   property of Easy Software Products and are protected by Federal
-@@ -311,9 +311,21 @@
-     addrlist = httpAddrGetList(hostname, AF_UNSPEC, NULL);
-     if (addrlist)
-     {
--      for (i = 0, addr = addrlist; addr; i ++, addr = addr->next);
-+      for (i = 0, addr = addrlist; addr; i ++, addr = addr->next)
-+      {
-+        char  numeric[1024];          /* Numeric IP address */
-+
-+
-+      httpAddrString(&(addr->addr), numeric, sizeof(numeric));
-+      if (!strcmp(numeric, "UNKNOWN"))
-+        break;
-+      }
-+
-+      if (addr)
-+        printf("FAIL (bad address for %s)\n", hostname);
-+      else
-+        printf("PASS (%d address(es) for %s)\n", i, hostname);
--      printf("PASS (%d address(es) for %s)\n", i, hostname);
-       httpAddrFreeList(addrlist);
-     }
-     else
-@@ -519,5 +531,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/testppd.c cups-1.2.x/cups/testppd.c
---- release-1.2.1/cups/testppd.c       2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/testppd.c  2006-06-28 09:59:04.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   PPD test program for the Common UNIX Printing System (CUPS).
-  *
-@@ -59,6 +59,39 @@
-                       "%%BeginFeature: *InputSlot Tray\n"
-                       "InputSlot=Tray\n"
-                       "%%EndFeature\n"
-+                      "} stopped cleartomark\n"
-+                      "[{\n"
-+                      "%%BeginFeature: *IntOption None\n"
-+                      "%%EndFeature\n"
-+                      "} stopped cleartomark\n"
-+                      "[{\n"
-+                      "%%BeginFeature: *StringOption None\n"
-+                      "%%EndFeature\n"
-+                      "} stopped cleartomark\n";
-+
-+static const char     *custom_code =
-+                      "[{\n"
-+                      "%%BeginFeature: *CustomPageSize True\n"
-+                      "400\n"
-+                      "500\n"
-+                      "0\n"
-+                      "0\n"
-+                      "0\n"
-+                      "PageSize=Custom\n"
-+                      "%%EndFeature\n"
-+                      "} stopped cleartomark\n"
-+                      "[{\n"
-+                      "%%BeginFeature: *InputSlot Tray\n"
-+                      "InputSlot=Tray\n"
-+                      "%%EndFeature\n"
-+                      "} stopped cleartomark\n"
-+                      "[{\n"
-+                      "%%BeginFeature: *IntOption None\n"
-+                      "%%EndFeature\n"
-+                      "} stopped cleartomark\n"
-+                      "[{\n"
-+                      "%%BeginFeature: *StringOption None\n"
-+                      "%%EndFeature\n"
-                       "} stopped cleartomark\n";
-@@ -107,7 +140,7 @@
-       printf("FAIL (%d conflicts)\n", conflicts);
-     }
--    fputs("ppdEmitString: ", stdout);
-+    fputs("ppdEmitString (defaults): ", stdout);
-     if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
-       !strcmp(s, default_code))
-       puts("PASS");
-@@ -123,6 +156,24 @@
-     if (s)
-       free(s);
-+    fputs("ppdEmitString (custom size): ", stdout);
-+    ppdMarkOption(ppd, "PageSize", "Custom.400x500");
-+
-+    if ((s = ppdEmitString(ppd, PPD_ORDER_ANY, 0.0)) != NULL &&
-+      !strcmp(s, custom_code))
-+      puts("PASS");
-+    else
-+    {
-+      printf("FAIL (%d bytes instead of %d)\n", s ? (int)strlen(s) : 0,
-+           (int)strlen(custom_code));
-+
-+      if (s)
-+      puts(s);
-+    }
-+
-+    if (s)
-+      free(s);
-+
-     ppdClose(ppd);
-   }
-   else
-@@ -172,5 +223,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups/util.c cups-1.2.x/cups/util.c
---- release-1.2.1/cups/util.c  2006-07-04 17:32:59.000000000 +0100
-+++ cups-1.2.x/cups/util.c     2006-06-26 12:43:29.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Printing utilities for the Common UNIX Printing System (CUPS).
-  *
-@@ -800,6 +800,8 @@
-             const char *name)         /* I - Printer name */
- {
-   int         http_port;              /* Port number */
-+  char                http_hostname[HTTP_MAX_HOST];
-+                                      /* Hostname associated with connection */
-   http_t      *http2;                 /* Alternate HTTP connection */
-   int         fd;                     /* PPD file */
-   char                localhost[HTTP_MAX_URI],/* Local hostname */
-@@ -845,9 +847,11 @@
-     strcpy(hostname, "localhost");
-  /*
--  * Get the port number we are connected to...
-+  * Get the hostname and port number we are connected to...
-   */
-+  httpGetHostname(http, http_hostname, sizeof(http_hostname));
-+
- #ifdef AF_INET6
-   if (http->hostaddr->addr.sa_family == AF_INET6)
-     http_port = ntohs(http->hostaddr->ipv6.sin6_port);
-@@ -862,7 +866,7 @@
-   * Reconnect to the correct server as needed...
-   */
--  if (!strcasecmp(http->hostname, hostname) && port == http_port)
-+  if (!strcasecmp(http_hostname, hostname) && port == http_port)
-     http2 = http;
-   else if ((http2 = httpConnectEncrypt(hostname, port,
-                                        cupsEncryption())) == NULL)
-@@ -1394,7 +1398,8 @@
-            char       *printer,       /* O - Printer name [HTTP_MAX_URI] */
-              char       *hostname)    /* O - Hostname [HTTP_MAX_URI] */
- {
--  char        hostbuf[HTTP_MAX_URI];          /* Name of host */
-+  char        hostbuf[HTTP_MAX_URI],          /* Name of host */
-+      http_hostname[HTTP_MAX_HOST];   /* Hostname associated with connection */
-   _cups_globals_t  *cg = _cupsGlobals();/* Pointer to library globals */
-@@ -1415,6 +1420,8 @@
-   strlcpy(hostbuf, cupsServer(), sizeof(hostbuf));
-+  httpGetHostname(cg->http, http_hostname, sizeof(http_hostname));
-+
-   if (hostname != NULL)
-     strlcpy(hostname, hostbuf, HTTP_MAX_URI);
-   else
-@@ -1427,7 +1434,7 @@
-   if (cg->http != NULL)
-   {
--    if (!strcasecmp(cg->http->hostname, hostname))
-+    if (!strcasecmp(http_hostname, hostname))
-       return (printer);
-     httpClose(cg->http);
-@@ -1473,7 +1480,9 @@
-   char                uri[HTTP_MAX_URI],      /* printer-uri attribute */
-               scheme[HTTP_MAX_URI],   /* Scheme name */
-               username[HTTP_MAX_URI], /* Username:password */
--              classname[255];         /* Temporary class name */
-+              classname[255],         /* Temporary class name */
-+              http_hostname[HTTP_MAX_HOST];
-+                                      /* Hostname associated with connection */
-   static const char * const requested_attrs[] =
-               {                       /* Requested attributes */
-                 "printer-uri-supported",
-@@ -1505,9 +1514,11 @@
-   DEBUG_printf(("cups_get_printer_uri: printer-uri=\"%s\"\n", uri));
-  /*
--  * Get the port number we are connected to...
-+  * Get the hostname and port number we are connected to...
-   */
-+  httpGetHostname(http, http_hostname, sizeof(http_hostname));
-+
- #ifdef AF_INET6
-   if (http->hostaddr->addr.sa_family == AF_INET6)
-     http_port = ntohs(http->hostaddr->ipv6.sin6_port);
-@@ -1585,7 +1596,7 @@
-           * Found a class!  Connect to the right server...
-           */
--          if (!strcasecmp(http->hostname, host) && *port == http_port)
-+          if (!strcasecmp(http_hostname, host) && *port == http_port)
-             http2 = http;
-           else if ((http2 = httpConnectEncrypt(host, *port,
-                                                cupsEncryption())) == NULL)
-@@ -1641,5 +1652,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/cups-config.in cups-1.2.x/cups-config.in
---- release-1.2.1/cups-config.in       2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/cups-config.in  2006-06-26 12:45:38.000000000 +0100
-@@ -1,6 +1,6 @@
- #! /bin/sh
- #
--# "$Id$"
-+# "$Id$"
- # 
- #   CUPS configuration utility.
- #
-@@ -42,8 +42,8 @@
- # flags for C++ compiler:
- CFLAGS=""
- LDFLAGS="@EXPORT_LDFLAGS@"
--LIBS="@EXPORT_SSLLIBS@ @LIBS@"
--IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@ @EXPORT_LIBZ@"
-+LIBS="@EXPORT_SSLLIBS@ @EXPORT_LIBZ@ @LIBS@"
-+IMGLIBS="@EXPORT_LIBTIFF@ @EXPORT_LIBJPEG@ @EXPORT_LIBPNG@"
- # Check for local invocation...
- selfdir=`dirname $0`
-@@ -53,7 +53,7 @@
-     LDFLAGS="-L$selfdir/cups -L$selfdir/filter $LDFLAGS"
-     libdir="$selfdir/cups"
-     imagelibdir="$selfdir/filter"
--    if test ! -e "$selfdir/cups/raster.h"; then
-+    if test ! -f "$selfdir/cups/raster.h"; then
-         ln -s ../filter/raster.h "$selfdir/cups"
-     fi
- else
-@@ -115,13 +115,13 @@
-               if test $image = no; then
-                   echo -lcups $LIBS
-               else
--                  echo -lcupsimage $IMGLIBS -lcups $LIBS
-+                  echo -lcupsimage -lcups $IMGLIBS $LIBS
-               fi
-           else
-               if test $image = no; then
-                   echo $libdir/libcups.a $LIBS
-               else
--                  echo $imagelibdir/libcupsimage.a $IMGLIBS $libdir/libcups.a $LIBS
-+                  echo $imagelibdir/libcupsimage.a $libdir/libcups.a $IMGLIBS $LIBS
-               fi
-           fi
-           ;;
-@@ -150,5 +150,5 @@
- done
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/doc/help/spec-raster.html cups-1.2.x/doc/help/spec-raster.html
---- release-1.2.1/doc/help/spec-raster.html    2006-07-04 17:32:27.000000000 +0100
-+++ cups-1.2.x/doc/help/spec-raster.html       2006-06-26 12:42:55.000000000 +0100
-@@ -14,9 +14,10 @@
- a printable format.</P>
- <P>CUPS 1.0 and 1.1 used a version 1 raster format. CUPS 1.2
--introduces a version 2 format that is a superset of the version 1
--format. Applications using the CUPS Imaging API (the cupsRaster*
--functions) can read both formats without code changes.</P>
-+introduces version 2 (compressed) and version 3 (uncompressed)
-+formats that are a superset of the version 1 format. Applications
-+using the CUPS Imaging API (the cupsRaster* functions) can read
-+all formats without code changes.</P>
- <P>The registered MIME media type for CUPS raster files is
- <CODE>application/vnd.cups-raster</CODE>.</P>
-@@ -485,6 +486,22 @@
- followed by the color value bytes.</P>
-+<H2 CLASS="title"><A NAME="V3">Version 3 Raster File Format</A></H2>
-+
-+<P>A version 3 raster file begins with a 32-bit synchronization
-+word: 0x52615333 ("RaS3") for big-endian architectures and
-+0x33536152 ("3SaR") for little-endian architectures. The writer
-+of the raster file will use the native word order, and the reader
-+is responsible for detecting a reversed word order file and
-+swapping bytes as needed. The CUPS Imaging API raster functions
-+perform this function automatically.</P>
-+
-+<P>Following the synchronization word are a series of raster
-+pages. Each page starts with a version 2 page device dictionary
-+header and is followed immediately by the uncompressed raster data
-+for that page.</P>
-+
-+
- <H2 CLASS="title"><A NAME="ENCODING">Pixel Value Coding</A></H2>
- <P>The following sections describe the encoding and decoding of
-@@ -673,6 +690,15 @@
- <H2 CLASS="title"><A NAME="HISTORY">Change History</A></H2>
-+<H3>Changes in CUPS 1.2.2</H3>
-+
-+<ul>
-+
-+      <li>Added version 3 (uncompressed) format.</li>
-+
-+</ul>
-+
-+
- <H3>Changes in CUPS 1.2.1</H3>
- <ul>
-cups-1.2.x/doc/ja/.svn/wcprops/index.html.in.svn-work
-diff -durN release-1.2.1/doc/Makefile cups-1.2.x/doc/Makefile
---- release-1.2.1/doc/Makefile 2006-07-04 17:32:35.000000000 +0100
-+++ cups-1.2.x/doc/Makefile    2006-06-26 12:43:01.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Documentation makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -200,7 +200,7 @@
- # Install all documentation files...
- #
--install:      all
-+install:      all $(INSTALL_LANGUAGES)
-       $(INSTALL_DIR) -m 755 $(DOCDIR)
-       for file in $(WEBPAGES); do \
-               $(INSTALL_MAN) $$file $(DOCDIR); \
-@@ -213,6 +213,8 @@
-       for file in $(WEBIMAGES) $(WEBBUTTONS); do \
-               $(INSTALL_MAN) $$file $(DOCDIR)/images; \
-       done
-+
-+install-languages:
-       for lang in $(LANGUAGES); do \
-               $(INSTALL_DIR) -m 755 $(DOCDIR)/$$lang/images; \
-               if test -f $$lang/index.html; then \
-@@ -230,7 +232,7 @@
- # Unnstall all documentation files...
- #
--uninstall:
-+uninstall: $(UNINSTALL_LANGUAGES)
-       for file in $(WEBPAGES); do \
-               $(RM) $(DOCDIR)/$$file; \
-       done
-@@ -240,6 +242,11 @@
-       for file in $(WEBIMAGES) $(WEBBUTTONS); do \
-               $(INSTALL_MAN) $(DOCDIR)/images/$$file; \
-       done
-+      -$(RMDIR) $(DOCDIR)/images
-+      -$(RMDIR) $(DOCDIR)/help
-+      -$(RMDIR) $(DOCDIR)
-+
-+uninstall-languages:
-       -for lang in $(LANGUAGES); do \
-               $(RM) $(DOCDIR)/$$lang/index.html; \
-               for file in $(WEBBUTTONS); do \
-@@ -248,9 +255,6 @@
-               $(RMDIR) $(DOCDIR)/$$lang/images; \
-               $(RMDIR) $(DOCDIR)/$$lang; \
-       done
--      -$(RMDIR) $(DOCDIR)/images
--      -$(RMDIR) $(DOCDIR)/help
--      -$(RMDIR) $(DOCDIR)
- #
-diff -durN release-1.2.1/filter/Makefile cups-1.2.x/filter/Makefile
---- release-1.2.1/filter/Makefile      2006-07-04 17:35:19.000000000 +0100
-+++ cups-1.2.x/filter/Makefile 2006-06-26 12:45:28.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Filter makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -33,6 +33,7 @@
-               libcupsimage.a \
-               $(LIB32CUPSIMAGE) \
-               $(LIB64CUPSIMAGE) \
-+              rasterbench \
-               testimage \
-               testraster
-@@ -47,7 +48,7 @@
- FORMOBJS =    form-attr.o form-main.o form-ps.o form-text.o form-tree.o
- OBJS  =       $(HPGLOBJS) $(IMAGEOBJS) $(FORMOBJS) \
-               gziptoany.o imagetops.o imagetoraster.o common.o pstops.o \
--              raster.o rastertoepson.o rastertohp.o rastertolabel.o \
-+              rasterbench.o rastertoepson.o rastertohp.o rastertolabel.o \
-               testimage.o testraster.o textcommon.o texttops.o
-@@ -118,12 +119,12 @@
- install32bit:
-       $(INSTALL_DIR) -m 755 $(LIB32DIR)
-       $(INSTALL_LIB) 32bit/libcupsimage.so.2 $(LIB32DIR)/libcupsimage.so.2
--      $(LN) libcupsimage.so $(LIB32DIR)/libcupsimage.so.2
-+      $(LN) libcupsimage.so.2 $(LIB32DIR)/libcupsimage.so
- install64bit:
-       $(INSTALL_DIR) -m 755 $(LIB64DIR)
-       $(INSTALL_LIB) 64bit/libcupsimage.so.2 $(LIB64DIR)/libcupsimage.so.2
--      $(LN) libcupsimage.so $(LIB64DIR)/libcupsimage.so.2
-+      $(LN) libcupsimage.so.2 $(LIB64DIR)/libcupsimage.so
- #
-@@ -360,6 +361,15 @@
- #
-+# rasterbench
-+#
-+
-+rasterbench:  rasterbench.o raster.o
-+      echo Linking $@...
-+      $(CC) $(LDFLAGS) -o $@ rasterbench.o raster.o
-+
-+
-+#
- # texttops
- #
-@@ -377,5 +387,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/filter/pstops.c cups-1.2.x/filter/pstops.c
---- release-1.2.1/filter/pstops.c      2006-07-04 17:35:19.000000000 +0100
-+++ cups-1.2.x/filter/pstops.c 2006-06-26 12:45:28.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   PostScript filter for the Common UNIX Printing System (CUPS).
-  *
-@@ -49,6 +49,7 @@
-  *   set_pstops_options() - Set pstops options...
-  *   skip_page()          - Skip past a page that won't be printed...
-  *   start_nup()          - Start processing for N-up printing...
-+ *   write_labels()       - Write the actual page labels.
-  */
- /*
-@@ -204,6 +205,7 @@
-                                 size_t linesize);
- static void           start_nup(pstops_doc_t *doc, int number,
-                                 int show_border, const int *bounding_box);
-+static void           write_labels(pstops_doc_t *doc, int orient);
- /*
-@@ -1305,6 +1307,9 @@
-   if (first_page)
-   {
-+    char      *page_setup;            /* PageSetup commands to send */
-+
-+
-     doc_puts(doc, "%%BeginPageSetup\n");
-     if (pageinfo->num_options > 0)
-@@ -1344,20 +1349,28 @@
-       */
-       if (doc_setup)
-+      {
-       doc_puts(doc, doc_setup);
-+      free(doc_setup);
-+      }
-       if (any_setup)
-+      {
-       doc_puts(doc, any_setup);
-+      free(any_setup);
-+      }
-+    }
--     /*
--      * Free the command strings...
--      */
-+   /*
-+    * Output commands for the current page...
-+    */
--      if (doc_setup)
--      free(doc_setup);
-+    page_setup = ppdEmitString(ppd, PPD_ORDER_PAGE, 0);
--      if (any_setup)
--      free(any_setup);
-+    if (page_setup)
-+    {
-+      doc_puts(doc, page_setup);
-+      free(page_setup);
-     }
-   }
-@@ -1856,15 +1869,15 @@
-         int          number)          /* I - Page number */
- {
-   if (doc->mirror || Orientation || doc->number_up > 1)
--    puts("userdict/ESPsave get restore");
-+    doc_puts(doc, "userdict/ESPsave get restore\n");
-   switch (doc->number_up)
-   {
-     case 1 :
-       if (doc->use_ESPshowpage)
-       {
--        WriteLabels(Orientation);
--          puts("ESPshowpage");
-+        write_labels(doc, Orientation);
-+          doc_puts(doc, "ESPshowpage\n");
-       }
-       break;
-@@ -1878,7 +1891,7 @@
-           * Rotate the labels back to portrait...
-           */
--          WriteLabels(Orientation - 1);
-+          write_labels(doc, Orientation - 1);
-         }
-         else if (Orientation == 0)
-         {
-@@ -1886,7 +1899,7 @@
-           * Rotate the labels to landscape...
-           */
--          WriteLabels(doc->normal_landscape ? 1 : 3);
-+          write_labels(doc, doc->normal_landscape ? 1 : 3);
-         }
-         else
-         {
-@@ -1894,18 +1907,18 @@
-           * Rotate the labels to landscape...
-           */
--          WriteLabels(doc->normal_landscape ? 3 : 1);
-+          write_labels(doc, doc->normal_landscape ? 3 : 1);
-         }
--          puts("ESPshowpage");
-+          doc_puts(doc, "ESPshowpage\n");
-       }
-         break;
-     default :
-       if (is_last_page(number) && doc->use_ESPshowpage)
-       {
--        WriteLabels(Orientation);
--          puts("ESPshowpage");
-+        write_labels(doc, Orientation);
-+          doc_puts(doc, "ESPshowpage\n");
-       }
-         break;
-   }
-@@ -2935,5 +2948,51 @@
- /*
-- * End of "$Id$".
-+ * 'write_labels()' - Write the actual page labels.
-+ *
-+ * This function is a copy of the one in common.c since we need to
-+ * use doc_puts/doc_printf instead of puts/printf...
-+ */
-+
-+static void
-+write_labels(pstops_doc_t *doc,               /* I - Document information */
-+             int          orient)     /* I - Orientation of the page */
-+{
-+  float       width,                          /* Width of page */
-+      length;                         /* Length of page */
-+
-+
-+  doc_puts(doc, "gsave\n");
-+
-+  if ((orient ^ Orientation) & 1)
-+  {
-+    width  = PageLength;
-+    length = PageWidth;
-+  }
-+  else
-+  {
-+    width  = PageWidth;
-+    length = PageLength;
-+  }
-+
-+  switch (orient & 3)
-+  {
-+    case 1 : /* Landscape */
-+        doc_printf(doc, "%.1f 0.0 translate 90 rotate\n", length);
-+        break;
-+    case 2 : /* Reverse Portrait */
-+        doc_printf(doc, "%.1f %.1f translate 180 rotate\n", width, length);
-+        break;
-+    case 3 : /* Reverse Landscape */
-+        doc_printf(doc, "0.0 %.1f translate -90 rotate\n", width);
-+        break;
-+  }
-+
-+  doc_puts(doc, "ESPwl\n");
-+  doc_puts(doc, "grestore\n");
-+}
-+
-+
-+/*
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/filter/rasterbench.c cups-1.2.x/filter/rasterbench.c
---- release-1.2.1/filter/rasterbench.c 1970-01-01 01:00:00.000000000 +0100
-+++ cups-1.2.x/filter/rasterbench.c    2006-06-26 12:45:28.000000000 +0100
-@@ -0,0 +1,355 @@
-+/*
-+ * "$Id$"
-+ *
-+ *   Raster benchmark program for the Common UNIX Printing System (CUPS).
-+ *
-+ *   Copyright 1997-2006 by Easy Software Products.
-+ *
-+ *   These coded instructions, statements, and computer programs are the
-+ *   property of Easy Software Products and are protected by Federal
-+ *   copyright law.  Distribution and use rights for the CUPS Raster source
-+ *   files are outlined in the GNU Library General Public License, located
-+ *   in the "pstoraster" directory.  If this file is missing or damaged
-+ *   please contact Easy Software Products at:
-+ *
-+ *       Attn: CUPS Licensing Information
-+ *       Easy Software Products
-+ *       44141 Airport View Drive, Suite 204
-+ *       Hollywood, Maryland 20636 USA
-+ *
-+ *       Voice: (301) 373-9600
-+ *       EMail: cups-info@cups.org
-+ *         WWW: http://www.cups.org
-+ *
-+ *   This code and any derivative of it may be used and distributed
-+ *   freely under the terms of the GNU General Public License when
-+ *   used with GNU Ghostscript or its derivatives.  Use of the code
-+ *   (or any derivative of it) with software other than GNU
-+ *   GhostScript (or its derivatives) is governed by the CUPS license
-+ *   agreement.
-+ *
-+ *   This file is subject to the Apple OS-Developed Software exception.
-+ *
-+ * Contents:
-+ *
-+ *   main()           - Benchmark the raster read/write functions.
-+ *   compute_median() - Compute the median time for a test.
-+ *   read_test()      - Benchmark the raster read functions.
-+ *   write_test()     - Benchmark the raster write functions.
-+ */
-+
-+/*
-+ * Include necessary headers...
-+ */
-+
-+#include "raster.h"
-+#include <stdlib.h>
-+#include <sys/time.h>
-+#include <signal.h>
-+#include <unistd.h>
-+#include <sys/wait.h>
-+
-+
-+/*
-+ * Constants...
-+ */
-+
-+#define TEST_WIDTH    1024
-+#define TEST_HEIGHT   1024
-+#define TEST_PAGES    16
-+#define TEST_PASSES   20
-+
-+
-+/*
-+ * Local functions...
-+ */
-+
-+static double compute_median(double *secs);
-+static double get_time(void);
-+static void   read_test(int fd);
-+static int    run_read_test(void);
-+static void   write_test(int fd);
-+
-+
-+/*
-+ * 'main()' - Benchmark the raster read/write functions.
-+ */
-+
-+int                                   /* O - Exit status */
-+main(void)
-+{
-+  int         i;                      /* Looping var */
-+  int         ras_fd,                 /* File descriptor for read process */
-+              status;                 /* Exit status of read process */
-+  double      start_secs,             /* Start time */
-+              write_secs,             /* Write time */
-+              read_secs,              /* Read time */
-+              pass_secs[TEST_PASSES]; /* Total test times */
-+
-+
-+ /*
-+  * Ignore SIGPIPE...
-+  */
-+
-+  signal(SIGPIPE, SIG_IGN);
-+
-+ /*
-+  * Run the tests several times to get a good average...
-+  */
-+
-+  printf("Test read/write speed of %d pages, %dx%d pixels...\n\n",
-+         TEST_PAGES, TEST_WIDTH, TEST_HEIGHT);
-+  for (i = 0; i < TEST_PASSES; i ++)
-+  {
-+    printf("PASS %2d: ", i + 1);
-+    fflush(stdout);
-+
-+    ras_fd     = run_read_test();
-+    start_secs = get_time();
-+
-+    write_test(ras_fd);
-+
-+    write_secs = get_time();
-+    printf(" %.3f write,", write_secs - start_secs);
-+    fflush(stdout);
-+
-+    close(ras_fd);
-+    wait(&status);
-+
-+    read_secs    = get_time();
-+    pass_secs[i] = read_secs - start_secs;
-+    printf(" %.3f read, %.3f total\n", read_secs - write_secs, pass_secs[i]);
-+  }
-+
-+  printf("\nMedian Total Time: %.3f seconds per document\n",
-+         compute_median(pass_secs));
-+
-+  return (0);
-+}
-+
-+
-+/*
-+ * 'compute_median()' - Compute the median time for a test.
-+ */
-+
-+static double                         /* O - Median time in seconds */
-+compute_median(double *secs)          /* I - Array of time samples */
-+{
-+  int         i, j;                   /* Looping vars */
-+  double      temp;                   /* Swap variable */
-+
-+
-+ /*
-+  * Sort the array into ascending order using a quicky bubble sort...
-+  */
-+
-+  for (i = 0; i < (TEST_PASSES - 1); i ++)
-+    for (j = i + 1; j < TEST_PASSES; j ++)
-+      if (secs[i] > secs[j])
-+      {
-+        temp    = secs[i];
-+      secs[i] = secs[j];
-+      secs[j] = temp;
-+      }
-+
-+ /*
-+  * Return the average of the middle two samples...
-+  */
-+
-+  return (0.5 * (secs[TEST_PASSES / 2 - 1] + secs[TEST_PASSES / 2]));
-+}
-+
-+
-+/*
-+ * 'get_time()' - Get the current time in seconds.
-+ */
-+
-+static double                         /* O - Time in seconds */
-+get_time(void)
-+{
-+  struct timeval      curtime;        /* Current time */
-+
-+
-+  gettimeofday(&curtime, NULL);
-+  return (curtime.tv_sec + 0.000001 * curtime.tv_usec);
-+}
-+
-+
-+/*
-+ * 'read_test()' - Benchmark the raster read functions.
-+ */
-+
-+static void
-+read_test(int fd)                     /* I - File descriptor to read from */
-+{
-+  int                 y;              /* Looping var */
-+  cups_raster_t               *r;             /* Raster stream */
-+  cups_page_header_t  header;         /* Page header */
-+  unsigned char               buffer[8 * TEST_WIDTH];
-+                                      /* Read buffer */
-+
-+
-+ /*
-+  * Test read speed...
-+  */
-+
-+  if ((r = cupsRasterOpen(fd, CUPS_RASTER_READ)) == NULL)
-+  {
-+    perror("Unable to create raster input stream");
-+    return;
-+  }
-+
-+  while (cupsRasterReadHeader(r, &header))
-+  {
-+    for (y = 0; y < header.cupsHeight; y ++)
-+      cupsRasterReadPixels(r, buffer, header.cupsBytesPerLine);
-+  }
-+
-+  cupsRasterClose(r);
-+}
-+
-+
-+/*
-+ * 'run_read_test()' - Run the read test as a child process via pipes.
-+ */
-+
-+static int                            /* O - Standard input of child */
-+run_read_test(void)
-+{
-+  int ras_pipes[2];                   /* Raster data pipes */
-+  int pid;                            /* Child process ID */
-+
-+
-+  if (pipe(ras_pipes))
-+    return (-1);
-+
-+  if ((pid = fork()) < 0)
-+  {
-+   /*
-+    * Fork error - return -1 on error...
-+    */
-+
-+    close(ras_pipes[0]);
-+    close(ras_pipes[1]);
-+
-+    return (-1);
-+  }
-+  else if (pid == 0)
-+  {
-+   /*
-+    * Child comes here - read data from the input pipe...
-+    */
-+
-+    close(ras_pipes[1]);
-+    read_test(ras_pipes[0]);
-+    exit(0);
-+  }
-+  else
-+  {
-+   /*
-+    * Parent comes here - return the output pipe...
-+    */
-+
-+    close(ras_pipes[0]);
-+    return (ras_pipes[1]);
-+  }
-+}
-+
-+
-+/*
-+ * 'write_test()' - Benchmark the raster write functions.
-+ */
-+
-+static void
-+write_test(int fd)                    /* I - File descriptor to write to */
-+{
-+  int                 page, x, y;     /* Looping vars */
-+  int                 count;          /* Number of bytes to set */
-+  cups_raster_t               *r;             /* Raster stream */
-+  cups_page_header_t  header;         /* Page header */
-+  unsigned char               data[32][8 * TEST_WIDTH];
-+                                      /* Raster data to write */
-+
-+
-+ /*
-+  * Create a combination of random data and repeated data to simulate
-+  * text with some whitespace.
-+  */
-+
-+  srand(time(NULL));
-+
-+  memset(data, 0, sizeof(data));
-+
-+  for (y = 0; y < 28; y ++)
-+  {
-+    for (x = rand() & 127, count = (rand() & 15) + 1;
-+         x < sizeof(data[0]);
-+         x ++, count --)
-+    {
-+      if (count <= 0)
-+      {
-+      x     += (rand() & 15) + 1;
-+      count = (rand() & 15) + 1;
-+
-+        if (x >= sizeof(data[0]))
-+        break;
-+      }
-+
-+      data[y][x] = rand();
-+    }
-+  }
-+
-+ /*
-+  * Test write speed...
-+  */
-+
-+  if ((r = cupsRasterOpen(fd, CUPS_RASTER_WRITE)) == NULL)
-+  {
-+    perror("Unable to create raster output stream");
-+    return;
-+  }
-+
-+  for (page = 0; page < TEST_PAGES; page ++)
-+  {
-+    memset(&header, 0, sizeof(header));
-+    header.cupsWidth        = TEST_WIDTH;
-+    header.cupsHeight       = TEST_HEIGHT;
-+    header.cupsBytesPerLine = TEST_WIDTH;
-+
-+    if (page & 1)
-+    {
-+      header.cupsBytesPerLine *= 4;
-+      header.cupsColorSpace = CUPS_CSPACE_CMYK;
-+      header.cupsColorOrder = CUPS_ORDER_CHUNKED;
-+    }
-+    else
-+    {
-+      header.cupsColorSpace = CUPS_CSPACE_K;
-+      header.cupsColorOrder = CUPS_ORDER_BANDED;
-+    }
-+
-+    if (page & 2)
-+    {
-+      header.cupsBytesPerLine *= 2;
-+      header.cupsBitsPerColor = 16;
-+      header.cupsBitsPerPixel = (page & 1) ? 64 : 16;
-+    }
-+    else
-+    {
-+      header.cupsBitsPerColor = 8;
-+      header.cupsBitsPerPixel = (page & 1) ? 32 : 8;
-+    }
-+
-+    cupsRasterWriteHeader(r, &header);
-+
-+    for (y = 0; y < TEST_HEIGHT; y ++)
-+      cupsRasterWritePixels(r, data[y & 31], header.cupsBytesPerLine);
-+  }
-+
-+  cupsRasterClose(r);
-+}
-+
-+
-+/*
-+ * End of "$Id$".
-+ */
-diff -durN release-1.2.1/filter/raster.c cups-1.2.x/filter/raster.c
---- release-1.2.1/filter/raster.c      2006-07-04 17:35:19.000000000 +0100
-+++ cups-1.2.x/filter/raster.c 2006-06-26 12:45:28.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Raster file routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -34,23 +34,25 @@
-  *
-  * Contents:
-  *
-- *   cupsRasterClose()        - Close a raster stream.
-- *   cupsRasterOpen()         - Open a raster stream.
-- *   cupsRasterReadHeader()   - Read a raster page header and store it in a
-- *                              V1 page header structure.
-- *   cupsRasterReadHeader2()  - Read a raster page header and store it in a
-- *                              V2 page header structure.
-- *   cupsRasterReadPixels()   - Read raster pixels.
-- *   cupsRasterWriteHeader()  - Write a raster page header from a V1 page
-- *                              header structure.
-- *   cupsRasterWriteHeader2() - Write a raster page header from a V2 page
-- *                              header structure.
-- *   cupsRasterWritePixels()  - Write raster pixels.
-- *   cups_raster_update()     - Update the raster header and row count for the
-- *                              current page.
-- *   cups_raster_write()      - Write a row of raster data...
-- *   cups_read()              - Read bytes from a file.
-- *   cups_write()             - Write bytes to a file.
-+ *   cupsRasterClose()         - Close a raster stream.
-+ *   cupsRasterOpen()          - Open a raster stream.
-+ *   cupsRasterReadHeader()    - Read a raster page header and store it in a
-+ *                               V1 page header structure.
-+ *   cupsRasterReadHeader2()   - Read a raster page header and store it in a
-+ *                               V2 page header structure.
-+ *   cupsRasterReadPixels()    - Read raster pixels.
-+ *   cupsRasterWriteHeader()   - Write a raster page header from a V1 page
-+ *                               header structure.
-+ *   cupsRasterWriteHeader2()  - Write a raster page header from a V2 page
-+ *                               header structure.
-+ *   cupsRasterWritePixels()   - Write raster pixels.
-+ *   cups_raster_read()        - Read through the raster buffer.
-+ *   cups_raster_read_header() - Read a raster page header.
-+ *   cups_raster_update()      - Update the raster header and row count for the
-+ *                               current page.
-+ *   cups_read()               - Read bytes from a file.
-+ *   cups_swap()               - Swap bytes in raster data...
-+ *   cups_write()              - Write bytes to a file.
-  */
- /*
-@@ -58,7 +60,7 @@
-  */
- #include "raster.h"
--#include <stdio.h>
-+#include <cups/debug.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <cups/string.h>
-@@ -86,16 +88,25 @@
-   unsigned char               *pixels,        /* Pixels for current row */
-                       *pend,          /* End of pixel buffer */
-                       *pcurrent;      /* Current byte in pixel buffer */
-+  int                 compressed,     /* Non-zero if data is compressed */
-+                      swapped;        /* Non-zero if data is byte-swapped */
-+  unsigned char               *buffer,        /* Read/write buffer */
-+                      *bufptr,        /* Current (read) position in buffer */
-+                      *bufend;        /* End of current (read) buffer */
-+  int                 bufsize;        /* Buffer size */
- };
-+
- /*
-  * Local functions...
-  */
- static unsigned       cups_raster_read_header(cups_raster_t *r);
-+static int    cups_raster_read(cups_raster_t *r, unsigned char *buf,
-+                               int bytes);
- static void   cups_raster_update(cups_raster_t *r);
--static int    cups_raster_write(cups_raster_t *r);
- static int    cups_read(int fd, unsigned char *buf, int bytes);
-+static void   cups_swap(unsigned char *buf, int bytes);
- static int    cups_write(int fd, const unsigned char *buf, int bytes);
-@@ -108,6 +119,9 @@
- {
-   if (r != NULL)
-   {
-+    if (r->buffer)
-+      free(r->buffer);
-+
-     if (r->pixels)
-       free(r->pixels);
-@@ -139,8 +153,7 @@
-     * Open for read - get sync word...
-     */
--    if (cups_read(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync))
--            < sizeof(r->sync))
-+    if (!cups_read(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync)))
-     {
-       free(r);
-       return (NULL);
-@@ -149,11 +162,22 @@
-     if (r->sync != CUPS_RASTER_SYNC &&
-         r->sync != CUPS_RASTER_REVSYNC &&
-         r->sync != CUPS_RASTER_SYNCv1 &&
--        r->sync != CUPS_RASTER_REVSYNCv1)
-+        r->sync != CUPS_RASTER_REVSYNCv1 &&
-+        r->sync != CUPS_RASTER_SYNCv2 &&
-+        r->sync != CUPS_RASTER_REVSYNCv2)
-     {
-       free(r);
-       return (NULL);
-     }
-+
-+    if (r->sync == CUPS_RASTER_SYNCv2 ||
-+        r->sync == CUPS_RASTER_REVSYNCv2)
-+      r->compressed = 1;
-+
-+    if (r->sync == CUPS_RASTER_REVSYNC ||
-+        r->sync == CUPS_RASTER_REVSYNCv1 ||
-+        r->sync == CUPS_RASTER_REVSYNCv2)
-+      r->swapped = 1;
-   }
-   else
-   {
-@@ -162,6 +186,7 @@
-     */
-     r->sync = CUPS_RASTER_SYNC;
-+
-     if (cups_write(r->fd, (unsigned char *)&(r->sync), sizeof(r->sync))
-             < sizeof(r->sync))
-     {
-@@ -240,15 +265,51 @@
-                    unsigned      len) /* I - Number of bytes to read */
- {
-   int         bytes;                  /* Bytes read */
-+  unsigned    cupsBytesPerLine;       /* cupsBytesPerLine value */
-   unsigned    remaining;              /* Bytes remaining */
-   unsigned char       *ptr,                   /* Pointer to read buffer */
--              byte;                   /* Byte from file */
-+              byte,                   /* Byte from file */
-+              *temp;                  /* Pointer into buffer */
-+  int         count;                  /* Repetition count */
-   if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0)
-     return (0);
--  remaining = len;
-+  if (!r->compressed)
-+  {
-+   /*
-+    * Read without compression...
-+    */
-+
-+    r->remaining -= len / r->header.cupsBytesPerLine;
-+
-+    if (!cups_read(r->fd, p, len))
-+      return (0);
-+
-+   /*
-+    * Swap bytes as needed...
-+    */
-+
-+    if ((r->header.cupsBitsPerColor == 16 ||
-+         r->header.cupsBitsPerPixel == 12 ||
-+         r->header.cupsBitsPerPixel == 16) &&
-+        r->swapped)
-+      cups_swap(p, len);
-+
-+   /*
-+    * Return...
-+    */
-+
-+    return (len);
-+  }
-+
-+ /*
-+  * Read compressed data...
-+  */
-+
-+  remaining        = len;
-+  cupsBytesPerLine = r->header.cupsBytesPerLine;
-   while (remaining > 0 && r->remaining > 0)
-   {
-@@ -258,127 +319,99 @@
-       * Need to read a new row...
-       */
--      if (remaining == r->header.cupsBytesPerLine)
-+      if (remaining == cupsBytesPerLine)
-       ptr = p;
-       else
-       ptr = r->pixels;
--      if (r->sync == CUPS_RASTER_SYNCv1 || r->sync == CUPS_RASTER_REVSYNCv1)
--      {
--       /*
--      * Read without compression...
--      */
-+     /*
-+      * Read using a modified TIFF "packbits" compression...
-+      */
--        if (cups_read(r->fd, ptr, r->header.cupsBytesPerLine) <
--              r->header.cupsBytesPerLine)
--        return (0);
-+      if (!cups_raster_read(r, &byte, 1))
-+      return (0);
--        r->count = 1;
--      }
--      else
-+      r->count = byte + 1;
-+
-+      if (r->count > 1)
-+      ptr = r->pixels;
-+
-+      temp  = ptr;
-+      bytes = cupsBytesPerLine;
-+
-+      while (bytes > 0)
-       {
-        /*
--        * Read using a modified TIFF "packbits" compression...
-+      * Get a new repeat count...
-       */
--        unsigned char *temp;          /* Pointer into buffer */
--      int             count;          /* Repetition count */
--
--
--        if (cups_read(r->fd, &byte, 1) < 1)
-+        if (!cups_raster_read(r, &byte, 1))
-         return (0);
--        r->count = byte + 1;
--
--        if (r->count > 1)
--        ptr = r->pixels;
--
--        temp  = ptr;
--      bytes = r->header.cupsBytesPerLine;
--
--      while (bytes > 0)
-+      if (byte & 128)
-       {
-        /*
--        * Get a new repeat count...
-+        * Copy N literal pixels...
-         */
--          if (cups_read(r->fd, &byte, 1) < 1)
--          return (0);
--
--        if (byte & 128)
--        {
--         /*
--          * Copy N literal pixels...
--          */
-+        count = (257 - byte) * r->bpp;
--          count = (257 - byte) * r->bpp;
-+          if (count > bytes)
-+          count = bytes;
--            if (count > bytes)
--            count = bytes;
-+          if (!cups_raster_read(r, temp, count))
-+          return (0);
--            if (cups_read(r->fd, temp, count) < count)
--            return (0);
-+        temp  += count;
-+        bytes -= count;
-+      }
-+      else
-+      {
-+       /*
-+        * Repeat the next N bytes...
-+        */
--          temp  += count;
--          bytes -= count;
--        }
--        else
--        {
--         /*
--          * Repeat the next N bytes...
--          */
-+          count = (byte + 1) * r->bpp;
-+          if (count > bytes)
-+          count = bytes;
--            count = (byte + 1) * r->bpp;
--            if (count > bytes)
--            count = bytes;
-+          if (count < r->bpp)
-+          break;
--            if (count < r->bpp)
--            break;
-+        bytes -= count;
--          bytes -= count;
-+          if (!cups_raster_read(r, temp, r->bpp))
-+          return (0);
--            if (cups_read(r->fd, temp, r->bpp) < r->bpp)
--            return (0);
-+        temp  += r->bpp;
-+        count -= r->bpp;
-+        while (count > 0)
-+        {
-+          memcpy(temp, temp - r->bpp, r->bpp);
-           temp  += r->bpp;
-           count -= r->bpp;
--
--          while (count > 0)
--          {
--            memcpy(temp, temp - r->bpp, r->bpp);
--            temp  += r->bpp;
--            count -= r->bpp;
--            }
--        }
-+          }
-       }
-       }
-+     /*
-+      * Swap bytes as needed...
-+      */
-+
-       if ((r->header.cupsBitsPerColor == 16 ||
-            r->header.cupsBitsPerPixel == 12 ||
-            r->header.cupsBitsPerPixel == 16) &&
--          (r->sync == CUPS_RASTER_REVSYNC || r->sync == CUPS_RASTER_REVSYNCv1))
--      {
--       /*
--      * Swap bytes in the pixel data...
--      */
--
--        unsigned char *temp;
--      int             count;
--
-+          r->swapped)
-+        cups_swap(ptr, bytes);
--        for (temp = ptr, count = r->header.cupsBytesPerLine;
--           count > 0;
--           temp += 2, count -= 2)
--      {
--        byte    = temp[0];
--        temp[0] = temp[1];
--        temp[1] = byte;
--      }
--      }
-+     /*
-+      * Update pointers...
-+      */
--      if (remaining >= r->header.cupsBytesPerLine)
-+      if (remaining >= cupsBytesPerLine)
-       {
--      bytes       = r->header.cupsBytesPerLine;
-+      bytes       = cupsBytesPerLine;
-         r->pcurrent = r->pixels;
-       r->count --;
-       r->remaining --;
-@@ -389,6 +422,10 @@
-         r->pcurrent = r->pixels + bytes;
-       }
-+     /*
-+      * Copy data as needed...
-+      */
-+
-       if (ptr != p)
-         memcpy(p, ptr, bytes);
-     }
-@@ -494,10 +531,6 @@
-                       unsigned char *p,       /* I - Bytes to write */
-                     unsigned      len)/* I - Number of bytes to write */
- {
--  int         bytes;                  /* Bytes read */
--  unsigned    remaining;              /* Bytes remaining */
--
--
- #ifdef DEBUG
-   fprintf(stderr, "cupsRasterWritePixels(r=%p, p=%p, len=%u), remaining=%u\n",
-           r, p, len, r->remaining);
-@@ -506,99 +539,13 @@
-   if (r == NULL || r->mode != CUPS_RASTER_WRITE || r->remaining == 0)
-     return (0);
--  for (remaining = len; remaining > 0; remaining -= bytes, p += bytes)
--
--  {
--   /*
--    * Figure out the number of remaining bytes on the current line...
--    */
--
--    if ((bytes = remaining) > (r->pend - r->pcurrent))
--      bytes = r->pend - r->pcurrent;
--
--    if (r->count > 0)
--    {
--     /*
--      * Check to see if this line is the same as the previous line...
--      */
--
--      if (memcmp(p, r->pcurrent, bytes))
--      {
--        if (!cups_raster_write(r))
--        return (0);
--
--      r->count = 0;
--      }
--      else
--      {
--       /*
--        * Mark more bytes as the same...
--      */
--
--        r->pcurrent += bytes;
--
--      if (r->pcurrent >= r->pend)
--      {
--       /*
--          * Increase the repeat count...
--        */
--
--        r->count ++;
--        r->pcurrent = r->pixels;
--
--       /*
--          * Flush out this line if it is the last one...
--        */
--
--        r->remaining --;
--
--        if (r->remaining == 0)
--          return (cups_raster_write(r));
--        else if (r->count == 256)
--        {
--          if (cups_raster_write(r) == 0)
--            return (0);
--
--          r->count = 0;
--        }
--      }
--
--      continue;
--      }
--    }
--
--    if (r->count == 0)
--    {
--     /*
--      * Copy the raster data to the buffer...
--      */
--
--      memcpy(r->pcurrent, p, bytes);
--
--      r->pcurrent += bytes;
--
--      if (r->pcurrent >= r->pend)
--      {
--       /*
--        * Increase the repeat count...
--      */
--
--      r->count ++;
--      r->pcurrent = r->pixels;
--
--       /*
--        * Flush out this line if it is the last one...
--      */
--
--      r->remaining --;
-+ /*
-+  * No write compression, just write the raster data raw...
-+  */
--      if (r->remaining == 0)
--        return (cups_raster_write(r));
--      }
--    }
--  }
-+  r->remaining -= len / r->header.cupsBytesPerLine;
--  return (len);
-+  return (cups_write(r->fd, p, len));
- }
-@@ -636,14 +583,14 @@
-   memset(&(r->header), 0, sizeof(r->header));
--  if (cups_read(r->fd, (unsigned char *)&(r->header), len) < len)
-+  if (cups_raster_read(r, (unsigned char *)&(r->header), len) < len)
-     return (0);
-  /*
-   * Swap bytes as needed...
-   */
--  if (r->sync == CUPS_RASTER_REVSYNC || r->sync == CUPS_RASTER_REVSYNCv1)
-+  if (r->swapped)
-     for (len = 81, s = (union swap_s *)&(r->header.AdvanceDistance);
-        len > 0;
-        len --, s ++)
-@@ -660,6 +607,144 @@
- /*
-+ * 'cups_raster_read()' - Read through the raster buffer.
-+ */
-+
-+static int                            /* O - Number of bytes read */
-+cups_raster_read(cups_raster_t *r,    /* I - Raster stream */
-+                 unsigned char *buf,  /* I - Buffer */
-+                 int           bytes) /* I - Number of bytes to read */
-+{
-+  int         count,                  /* Number of bytes read */
-+              remaining,              /* Remaining bytes in buffer */
-+              total;                  /* Total bytes read */
-+
-+
-+  DEBUG_printf(("cups_raster_read(r=%p, buf=%p, bytes=%d)\n", r, buf, bytes));
-+
-+  if (!r->compressed)
-+    return (cups_read(r->fd, buf, bytes));
-+
-+ /*
-+  * Allocate a read buffer as needed...
-+  */
-+
-+  count = 2 * r->header.cupsBytesPerLine;
-+
-+  if (count > r->bufsize)
-+  {
-+    int offset = r->bufptr - r->buffer;       /* Offset to current start of buffer */
-+    int end = r->bufend - r->buffer;  /* Offset to current end of buffer */
-+    unsigned char *rptr;              /* Pointer in read buffer */
-+
-+    if (r->buffer)
-+      rptr = realloc(r->buffer, count);
-+    else
-+      rptr = malloc(count);
-+
-+    if (!rptr)
-+      return (0);
-+
-+    r->buffer  = rptr;
-+    r->bufptr  = rptr + offset;
-+    r->bufend  = rptr + end;
-+    r->bufsize = count;
-+  }
-+
-+ /*
-+  * Loop until we have read everything...
-+  */
-+
-+  for (total = 0, remaining = r->bufend - r->bufptr;
-+       total < bytes;
-+       total += count, buf += count)
-+  {
-+    count = bytes - total;
-+
-+    DEBUG_printf(("count=%d, remaining=%d, buf=%p, bufptr=%p, bufend=%p...\n",
-+                  count, remaining, buf, r->bufptr, r->bufend));
-+
-+    if (remaining == 0)
-+    {
-+      if (count < 16)
-+      {
-+       /*
-+        * Read into the raster buffer and then copy...
-+      */
-+
-+        remaining = cups_read(r->fd, r->buffer, r->bufsize);
-+      if (remaining <= 0)
-+        return (0);
-+
-+      r->bufptr = r->buffer;
-+      r->bufend = r->buffer + remaining;
-+      }
-+      else
-+      {
-+       /*
-+        * Read directly into "buf"...
-+      */
-+
-+      count = cups_read(r->fd, buf, count);
-+
-+      if (count <= 0)
-+        return (0);
-+
-+      continue;
-+      }
-+    }
-+
-+   /*
-+    * Copy bytes from raster buffer to "buf"...
-+    */
-+
-+    if (count > remaining)
-+      count = remaining;
-+
-+    if (count == 1)
-+    {
-+     /*
-+      * Copy 1 byte...
-+      */
-+
-+      *buf = *(r->bufptr)++;
-+      remaining --;
-+    }
-+    else if (count < 128)
-+    {
-+     /*
-+      * Copy up to 127 bytes without using memcpy(); this is
-+      * faster because it avoids an extra function call and is
-+      * often further optimized by the compiler...
-+      */
-+
-+      unsigned char   *bufptr;        /* Temporary buffer pointer */
-+
-+
-+      remaining -= count;
-+
-+      for (bufptr = r->bufptr; count > 0; count --, total ++)
-+      *buf++ = *bufptr++;
-+
-+      r->bufptr = bufptr;
-+    }
-+    else
-+    {
-+     /*
-+      * Use memcpy() for a large read...
-+      */
-+
-+      memcpy(buf, r->bufptr, count);
-+      r->bufptr += count;
-+      remaining -= count;
-+    }
-+  }
-+
-+  return (total);
-+}
-+
-+
-+/*
-  * 'cups_raster_update()' - Update the raster header and row count for the
-  *                          current page.
-  */
-@@ -745,159 +830,19 @@
-     r->remaining = r->header.cupsHeight;
-  /*
--  * Allocate the read/write buffer...
--  */
--
--  if (r->pixels != NULL)
--    free(r->pixels);
--
--  r->pixels   = calloc(r->header.cupsBytesPerLine, 1);
--  r->pcurrent = r->pixels;
--  r->pend     = r->pixels + r->header.cupsBytesPerLine;
--  r->count    = 0;
--}
--
--
--/*
-- * 'cups_raster_write()' - Write a row of raster data...
-- */
--
--static int                            /* O - Number of bytes written */
--cups_raster_write(cups_raster_t *r)   /* I - Raster stream */
--{
--  unsigned char       *start,                 /* Start of sequence */
--              *ptr,                   /* Current pointer in sequence */
--              byte;                   /* Byte to write */
--  int         count;                  /* Count */
--
--
--#ifdef DEBUG
--  fprintf(stderr, "cups_raster_write(r=%p)\n", r);
--#endif /* DEBUG */
--
-- /*
--  * Write the row repeat count...
--  */
--
--  byte = r->count - 1;
--
--  if (cups_write(r->fd, &byte, 1) < 1)
--  {
--#ifdef DEBUG
--    fputs("cups_raster_write: Unable to write row repeat count...\n",
--          stderr);
--#endif /* DEBUG */
--
--    return (0);
--  }
--
-- /*
--  * Write using a modified TIFF "packbits" compression...
-+  * Allocate the compression buffer...
-   */
--  for (ptr = r->pixels; ptr < r->pend;)
-+  if (r->compressed)
-   {
--    start = ptr;
--    ptr += r->bpp;
--
--    if (ptr == r->pend)
--    {
--     /*
--      * Encode a single pixel at the end...
--      */
--
--      byte = 0;
--      if (cups_write(r->fd, &byte, 1) < 1)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write last pixel count...\n", stderr);
--#endif /* DEBUG */
--
--        return (0);
--      }
--
--      if (cups_write(r->fd, start, r->bpp) < r->bpp)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write last pixel data...\n", stderr);
--#endif /* DEBUG */
--
--        return (0);
--      }
--    }
--    else if (!memcmp(start, ptr, r->bpp))
--    {
--     /*
--      * Encode a sequence of repeating pixels...
--      */
--
--      for (count = 2; count < 128 && ptr < (r->pend - r->bpp); count ++, ptr += r->bpp)
--        if (memcmp(ptr, ptr + r->bpp, r->bpp) != 0)
--        break;
--
--      ptr += r->bpp;
--
--      byte = count - 1;
--
--      if (cups_write(r->fd, &byte, 1) < 1)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write repeated pixel count...\n", stderr);
--#endif /* DEBUG */
--
--        return (0);
--      }
--
--      if (cups_write(r->fd, start, r->bpp) < r->bpp)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write repeated pixel data...\n", stderr);
--#endif /* DEBUG */
--
--        return (0);
--      }
--    }
--    else
--    {
--     /*
--      * Encode a sequence of non-repeating pixels...
--      */
--
--      for (count = 1; count < 127 && ptr < (r->pend - r->bpp); count ++, ptr += r->bpp)
--        if (!memcmp(ptr, ptr + r->bpp, r->bpp))
--        break;
--
--      if (ptr >= (r->pend - r->bpp) && count < 128)
--      {
--        count ++;
--      ptr += r->bpp;
--      }
-- 
--      byte = 257 - count;
--
--      if (cups_write(r->fd, &byte, 1) < 1)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write non-repeating pixel count...\n", stderr);
--#endif /* DEBUG */
--
--        return (0);
--      }
--
--      count *= r->bpp;
--
--      if (cups_write(r->fd, start, count) < count)
--      {
--#ifdef DEBUG
--        fputs("cups_raster_write: Unable to write non-repeating pixel data...\n", stderr);
--#endif /* DEBUG */
-+    if (r->pixels != NULL)
-+      free(r->pixels);
--        return (0);
--      }
--    }
-+    r->pixels   = calloc(r->header.cupsBytesPerLine, 1);
-+    r->pcurrent = r->pixels;
-+    r->pend     = r->pixels + r->header.cupsBytesPerLine;
-+    r->count    = 0;
-   }
--
--  return (r->header.cupsBytesPerLine);
- }
-@@ -934,6 +879,32 @@
- /*
-+ * 'cups_swap()' - Swap bytes in raster data...
-+ */
-+
-+static void
-+cups_swap(unsigned char *buf,         /* I - Buffer to swap */
-+          int           bytes)                /* I - Number of bytes to swap */
-+{
-+  unsigned char       even, odd;              /* Temporary variables */
-+
-+
-+  bytes /= 2;
-+
-+  while (bytes > 0)
-+  {
-+    even   = buf[0];
-+    odd    = buf[1];
-+    buf[0] = odd;
-+    buf[1] = even;
-+
-+    buf += 2;
-+    bytes --;
-+  }
-+}
-+
-+
-+/*
-  * 'cups_write()' - Write bytes to a file.
-  */
-@@ -964,5 +935,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/filter/raster.h cups-1.2.x/filter/raster.h
---- release-1.2.1/filter/raster.h      2006-07-04 17:35:19.000000000 +0100
-+++ cups-1.2.x/filter/raster.h 2006-06-26 12:45:28.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Raster file definitions for the Common UNIX Printing System (CUPS).
-  *
-@@ -60,12 +60,15 @@
-  * Constants...
-  */
--#  define CUPS_RASTER_SYNC    0x52615332      /* RaS2 */
--#  define CUPS_RASTER_REVSYNC 0x32536152      /* 2SaR */
-+#  define CUPS_RASTER_SYNC    0x52615333      /* RaS3 */
-+#  define CUPS_RASTER_REVSYNC 0x33536152      /* 3SaR */
- #  define CUPS_RASTER_SYNCv1  0x52615374      /* RaSt */
- #  define CUPS_RASTER_REVSYNCv1       0x74536152      /* tSaR */
-+#  define CUPS_RASTER_SYNCv2  0x52615332      /* RaS2 */
-+#  define CUPS_RASTER_REVSYNCv2       0x32536152      /* 2SaR */
-+
- /*
-  * The following definition can be used to determine if the
-@@ -342,5 +345,5 @@
- #endif /* !_CUPS_RASTER_H_ */
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/filter/rastertolabel.c cups-1.2.x/filter/rastertolabel.c
---- release-1.2.1/filter/rastertolabel.c       2006-07-04 17:35:19.000000000 +0100
-+++ cups-1.2.x/filter/rastertolabel.c  2006-07-04 17:28:24.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Label printer filter for the Common UNIX Printing System (CUPS).
-  *
-@@ -352,6 +352,8 @@
-         printf("! 0 %u %u %u %u\r\n", header->HWResolution[0],
-              header->HWResolution[1], header->cupsHeight,
-              header->NumCopies);
-+      printf("PAGE-WIDTH %d\r\n", header->cupsWidth);
-+      printf("PAGE-HEIGHT %d\r\n", header->cupsWidth);
-         break;
-   }
-@@ -588,7 +590,10 @@
-         * Print the label...
-       */
--        puts("FORM\r");
-+      if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL ||
-+          strcmp(choice->choice, "Continuous"))
-+          puts("FORM\r");
-+
-       puts("PRINT\r");
-       break;
-   }
-@@ -647,7 +652,7 @@
- {
-   int         i;                      /* Looping var */
-   unsigned char       *ptr;                   /* Pointer into buffer */
--  char                *compptr;               /* Pointer into compression buffer */
-+  unsigned char       *compptr;               /* Pointer into compression buffer */
-   char                repeat_char;            /* Repeated character */
-   int         repeat_count;           /* Number of repeated characters */
-   static const char *hex = "0123456789ABCDEF";
-@@ -1003,5 +1008,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/locale/cups_es.po cups-1.2.x/locale/cups_es.po
---- release-1.2.1/locale/cups_es.po    2006-07-04 17:32:18.000000000 +0100
-+++ cups-1.2.x/locale/cups_es.po       2006-06-26 12:42:47.000000000 +0100
-@@ -1,29 +1,32 @@
-+#
- # "$Id$"
--# Message catalog template for the Common UNIX Printing System (CUPS).
--# Copyright 2005-2006 by Easy Software Products.
--# These coded instructions, statements, and computer programs are the
--# property of Easy Software Products and are protected by Federal
--# copyright law.  Distribution and use rights are outlined in the file
--# "LICENSE.txt" which should have been included with this file.  If this
--# file is missing or damaged please contact Easy Software Products
--# at:
--# Attn: CUPS Licensing Information
--# Easy Software Products
--# 44141 Airport View Drive, Suite 204
--# Hollywood, Maryland 20636 USA
--# Voice: (301) 373-9600
--# EMail: cups-info@cups.org
--# WWW: http://www.cups.org
--# , fuzzy
--# <>, 2006.
--# 
--# 
-+#
-+#   Spanish message catalog for the Common UNIX Printing System (CUPS).
-+#
-+#   Copyright 2005-2006 by Easy Software Products.
-+#
-+#   These coded instructions, statements, and computer programs are the
-+#   property of Easy Software Products and are protected by Federal
-+#   copyright law.  Distribution and use rights are outlined in the file
-+#   "LICENSE.txt" which should have been included with this file.  If this
-+#   file is missing or damaged please contact Easy Software Products
-+#   at:
-+#
-+#       Attn: CUPS Licensing Information
-+#       Easy Software Products
-+#       44141 Airport View Drive, Suite 204
-+#       Hollywood, Maryland 20636 USA
-+#
-+#       Voice: (301) 373-9600
-+#       EMail: cups-info@cups.org
-+#         WWW: http://www.cups.org
-+#
- msgid ""
- msgstr ""
- "Project-Id-Version: CUPS 1.2\n"
- "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
--"POT-Creation-Date: 2006-05-21 10:08-0400\n"
--"PO-Revision-Date: 2006-03-25 21:48+0100\n"
-+"POT-Creation-Date: 2006-05-21 10:07-0400\n"
-+"PO-Revision-Date: 2006-06-12 19:01+0100\n"
- "Last-Translator: Juan Pablo González Riopedre <riopedre@tiscali.es>\n"
- "Language-Team: Spanish\n"
- "MIME-Version: 1.0\n"
-@@ -72,19 +75,15 @@
- msgid "Auto"
- msgstr "Auto"
--msgid ""
--"Enter your username and password or the root username and password to access "
--"this page."
--msgstr ""
--"Introduzca su nombre de usuario y contraseña o el nombre de usuario y "
--"contraseña de root para poder acceder a esta página."
-+msgid "Enter your username and password or the root username and password to access this page."
-+msgstr "Introduzca su nombre de usuario y contraseña o el nombre de usuario y contraseña de root para poder acceder a esta página."
- msgid "You must use a https: URL to access this page."
- msgstr "Debe escribir un URL https para acceder a esta página."
- #, c-format
- msgid "Bad request version number %d.%d!"
--msgstr "Petición incorrecta de número de versión %d %d."
-+msgstr "Petición incorrecta de número de versión %d.%d."
- msgid "No attributes in request!"
- msgstr "No hay atributos en la solicitud."
-@@ -103,11 +102,8 @@
- msgid "The printer or class was not found."
- msgstr "No se ha encontrado la impresora o la clase."
--msgid ""
--"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
--msgstr ""
--"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/"
--"NOMBRE_CLASE\"."
-+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"."
-+msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/classes/NOMBRE_CLASE\"."
- #, c-format
- msgid "The printer-uri \"%s\" contains invalid characters."
-@@ -119,9 +115,7 @@
- #, c-format
- msgid "Attempt to set %s printer-state to bad value %d!"
--msgstr ""
--"Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %"
--"d."
-+msgstr "Se ha intentado cambiar el valor printer-state de %s a un valor incorrecto %d."
- #, c-format
- msgid "add_class: Unknown printer-op-policy \"%s\"."
-@@ -146,29 +140,19 @@
- msgid "The notify-user-data value is too large (%d > 63 octets)!"
- msgstr "El valor notify-user-data es demasiado grande (%d > 63 octetos)."
--msgid ""
--"The notify-lease-duration attribute cannot be used with job subscriptions."
--msgstr ""
--"El atributo notify-lease-duration no puede ser usado con subscripciones de "
--"trabajos."
-+msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
-+msgstr "El atributo notify-lease-duration no puede ser usado con subscripciones de trabajos."
--msgid ""
--"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
--msgstr ""
--"El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/"
--"NOMBRE_IMPRESORA\"."
-+msgid "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"."
-+msgstr "El printer-uri debe ser de la forma \"ipp://NOMBRE_ORDENADOR/printers/NOMBRE_IMPRESORA\"."
- #, c-format
- msgid "A class named \"%s\" already exists!"
- msgstr "Ya existe una clase llamada \"%s\"."
- #, c-format
--msgid ""
--"File device URIs have been disabled! To enable, see the FileDevice directive "
--"in \"%s/cupsd.conf\"."
--msgstr ""
--"Los URIs del dispositivo de archivo han sido deshabilitados. Para "
--"habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
-+msgid "File device URIs have been disabled! To enable, see the FileDevice directive in \"%s/cupsd.conf\"."
-+msgstr "Los URIs del dispositivo de archivo han sido deshabilitados. Para habilitarlos, vea la directiva FileDevice en \"%s/cupsd.conf\"."
- #, c-format
- msgid "Bad device-uri \"%s\"!"
-@@ -218,8 +202,7 @@
- #, c-format
- msgid "You are not authorized to authenticate job #%d owned by \"%s\"!"
--msgstr ""
--"No tiene permiso para autentificar el trabajo #%d que pertenece a \"%s\"."
-+msgstr "No tiene permiso para autentificar el trabajo #%d que pertenece a \"%s\"."
- msgid "The printer-uri attribute is required!"
- msgstr "Se necesita el atributo printer-uri."
-@@ -360,14 +343,11 @@
- #, c-format
- msgid "You are not authorized to restart job id %d owned by \"%s\"!"
--msgstr ""
--"No tiene permiso para reiniciar el trabajo id %d que pertenece a \"%s\"."
-+msgstr "No tiene permiso para reiniciar el trabajo id %d que pertenece a \"%s\"."
- #, c-format
- msgid "You are not authorized to send document for job #%d owned by \"%s\"!"
--msgstr ""
--"No tiene permiso para enviar el documento para el trabajo #%d que pertenece "
--"a \"%s\"."
-+msgstr "No tiene permiso para enviar el documento para el trabajo #%d que pertenece a \"%s\"."
- #, c-format
- msgid "Bad document-format \"%s\"!"
-@@ -465,11 +445,8 @@
- msgstr "lpq: Destino desconocido \"%s\".\n"
- #, c-format
--msgid ""
--"lp: error - %s environment variable names non-existent destination \"%s\"!\n"
--msgstr ""
--"lp: error - los nombres de la variable de entorno %s no existentes en el "
--"destino \"%s\".\n"
-+msgid "lp: error - %s environment variable names non-existent destination \"%s\"!\n"
-+msgstr "lp: error - los nombres de la variable de entorno %s no existentes en el destino \"%s\".\n"
- msgid "lpq: error - no default destination available.\n"
- msgstr "lpq: error - no está disponible el destino predeterminado.\n"
-@@ -478,10 +455,8 @@
- msgid "lpq: get-jobs failed: %s\n"
- msgstr "lpq: get-jobs ha fallado: %s\n"
--msgid ""
--"Rank   Owner      Pri  Job        Files                       Total Size\n"
--msgstr ""
--"Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
-+msgid "Rank   Owner      Pri  Job        Files                       Total Size\n"
-+msgstr "Rango  Propiet.   Pri  Trabajo    Archivos                    Tamaño total\n"
- msgid "Rank    Owner   Job     File(s)                         Total Size\n"
- msgstr "Rango  Propiet. Trabajo Archivo(s)                      Tamaño total\n"
-@@ -492,15 +467,15 @@
- #, c-format
- msgid "        %-39.39s %.0f bytes\n"
--msgstr "        %-39.39s %.de bytes\n"
-+msgstr "        %-39.39s %.0f bytes\n"
- #, c-format
- msgid "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
--msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.de bytes\n"
-+msgstr "%-6s %-10.10s %-4d %-10d %-27.27s %.0f bytes\n"
- #, c-format
- msgid "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
--msgstr "%-7s %-7.7s %-7d %-31.31s %.de bytes\n"
-+msgstr "%-7s %-7.7s %-7d %-31.31s %.0f bytes\n"
- msgid "no entries\n"
- msgstr "no hay entradas\n"
-@@ -529,20 +504,14 @@
- msgstr "lpr: error - se esperaba un valor tras la opción %c\n"
- #, c-format
--msgid ""
--"lpr: warning - '%c' format modifier not supported - output may not be "
--"correct!\n"
--msgstr ""
--"lpr: advertencia - no admite el uso del modificador de formato '%c' - la "
--"salida puede que no sea correcta.\n"
-+msgid "lpr: warning - '%c' format modifier not supported - output may not be correct!\n"
-+msgstr "lpr: advertencia - no admite el uso del modificador de formato '%c' - la salida puede que no sea correcta.\n"
- msgid "lpr: error - expected option=value after -o option!\n"
- msgstr "lpr: error - se esperaba opción=valor tras la opción -o.\n"
- msgid "lpr: warning - email notification is not currently supported!\n"
--msgstr ""
--"lpr: advertencia - actualmente no admite el uso de la notificación por "
--"email.\n"
-+msgstr "lpr: advertencia - actualmente no admite el uso de la notificación por email.\n"
- msgid "lpr: error - expected destination after -P option!\n"
- msgstr "lpr: error - se esperaba un destino tras la opción -P.\n"
-@@ -563,18 +532,15 @@
- #, c-format
- msgid "lpr: error - unable to access \"%s\" - %s\n"
--msgstr "lpr: error - no se ha podido acceder a \"%s\" - \"s\n"
-+msgstr "lpr: error - no se ha podido acceder a \"%s\" - %s\n"
- #, c-format
- msgid "lpr: error - too many files - \"%s\"\n"
- msgstr "lpr: error - demasiados archivos - \"%s\"\n"
- #, c-format
--msgid ""
--"lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
--msgstr ""
--"lpr: error - los nombres de variables de entorno %s no existen en el destino "
--"\"%s\".\n"
-+msgid "lpr: error - %s environment variable names non-existent destination \"%s\"!\n"
-+msgstr "lpr: error - los nombres de variables de entorno %s no existen en el destino \"%s\".\n"
- msgid "lpr: error - no default destination available.\n"
- msgstr "lpr: error - no está disponible el destino predeterminado.\n"
-@@ -588,13 +554,10 @@
- #, c-format
- msgid "lpr: error - unable to write to temporary file \"%s\" - %s\n"
--msgstr ""
--"lpr: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
-+msgstr "lpr: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
- msgid "lpr: error - stdin is empty, so no job has been sent.\n"
--msgstr ""
--"lpr: error - stdin está vacío, por lo tanto no se ha enviado ningún "
--"trabajo.\n"
-+msgstr "lpr: error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
- #, c-format
- msgid "lpr: error - unable to print file: %s\n"
-@@ -652,12 +615,10 @@
- msgstr "%s: La operación ha fallado: %s\n"
- msgid "cancel: Error - expected hostname after '-h' option!\n"
--msgstr ""
--"cancel: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
-+msgstr "cancel: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
- msgid "cancel: Error - expected username after '-u' option!\n"
--msgstr ""
--"cancel: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
-+msgstr "cancel: Error - se esperaba un nombre de usuario tras la opción '-u'.\n"
- #, c-format
- msgid "cancel: Unknown option '%c'!\n"
-@@ -704,39 +665,27 @@
- #, c-format
- msgid "cupsaddsmb: Unable to copy Windows 2000 printer driver files (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
--"impresoras de Windows 2000 (%d).\n"
-+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
- #, c-format
- msgid "cupsaddsmb: Unable to copy CUPS printer driver files (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
--"impresoras de CUPS (%d).\n"
-+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de CUPS (%d).\n"
- #, c-format
- msgid "cupsaddsmb: Unable to install Windows 2000 printer driver files (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se han podido instalar los archivos de los controladores de "
--"impresoras de Windows 2000 (%d).\n"
-+msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 2000 (%d).\n"
- #, c-format
- msgid "cupsaddsmb: Unable to copy Windows 9x printer driver files (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se han podido copiar los archivos de los controladores de "
--"impresoras de Windows 9x (%d).\n"
-+msgstr "cupsaddsmb: No se han podido copiar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
- #, c-format
- msgid "cupsaddsmb: Unable to install Windows 9x printer driver files (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se han podido instalar los archivos de los controladores de "
--"impresoras de Windows 9x (%d).\n"
-+msgstr "cupsaddsmb: No se han podido instalar los archivos de los controladores de impresoras de Windows 9x (%d).\n"
- #, c-format
- msgid "cupsaddsmb: Unable to set Windows printer driver (%d)!\n"
--msgstr ""
--"cupsaddsmb: No se ha podido poner el controlador de impresora de Windows (%"
--"d).\n"
-+msgstr "cupsaddsmb: No se ha podido poner el controlador de impresora de Windows (%d).\n"
- msgid ""
- "Usage: cupsaddsmb [options] printer1 ... printerN\n"
-@@ -1115,17 +1064,14 @@
- #, c-format
- msgid ""
--"        WARN    Duplex option keyword %s should be named Duplex or "
--"JCLDuplex!\n"
-+"        WARN    Duplex option keyword %s should be named Duplex or JCLDuplex!\n"
- "                REF: Page 122, section 5.17\n"
- msgstr ""
--"        ADVERTENCIA    Clave de opción Duplex %s debería llamarse Duplex o "
--"JCLDuplex.\n"
-+"        ADVERTENCIA    Clave de opción Duplex %s debería llamarse Duplex o JCLDuplex.\n"
- "                REF: Página 122, sección 5.17\n"
- msgid "        WARN    Default choices conflicting!\n"
--msgstr ""
--"        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
-+msgstr "        ADVERTENCIA    Las preferencias predeterminadas están en conflicto.\n"
- #, c-format
- msgid ""
-@@ -1139,48 +1085,42 @@
- "        WARN    LanguageEncoding required by PPD 4.3 spec.\n"
- "                REF: Pages 56-57, section 5.3.\n"
- msgstr ""
--"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de "
--"PPD 4.3.\n"
-+"        ADVERTENCIA    Se necesita LanguageEncoding por especificación de PPD 4.3.\n"
- "                REF: Páginas 56-57, sección 5.3.\n"
- msgid ""
- "        WARN    Manufacturer required by PPD 4.3 spec.\n"
- "                REF: Pages 58-59, section 5.3.\n"
- msgstr ""
--"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD "
--"4.3.\n"
-+"        ADVERTENCIA    Se necesita Manufacturer por especificación de PPD 4.3.\n"
- "                REF: Páginas 58-59, seccion 5.3.\n"
- msgid ""
- "        WARN    PCFileName longer than 8.3 in violation of PPD spec.\n"
- "                REF: Pages 61-62, section 5.3.\n"
- msgstr ""
--"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la "
--"especificación PPD.\n"
-+"        ADVERTENCIA    PCFileName es mas largo que 8.3 violando la especificación PPD.\n"
- "                REF: Páginas 61-62, sección 5.3.\n"
- msgid ""
- "        WARN    ShortNickName required by PPD 4.3 spec.\n"
- "                REF: Pages 64-65, section 5.3.\n"
- msgstr ""
--"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD "
--"4.3.\n"
-+"        ADVERTENCIA    Se necesita ShortNickName por especificación de PPD 4.3.\n"
- "                REF: Páginas 64-65, sección 5.3.\n"
- msgid ""
- "        WARN    Protocols contains both PJL and BCP; expected TBCP.\n"
- "                REF: Pages 78-79, section 5.7.\n"
- msgstr ""
--"        ADVERTENCIA    Protocols contiene a ambos, PJL y BCP; se esperaba "
--"TBCP.\n"
-+"        ADVERTENCIA    Protocols contiene a ambos, PJL y BCP; se esperaba TBCP.\n"
- "                REF: Páginas 78-79, sección 5.7.\n"
- msgid ""
- "        WARN    Protocols contains PJL but JCL attributes are not set.\n"
- "                REF: Pages 78-79, section 5.7.\n"
- msgstr ""
--"        ADVERTENCIA    Protocols contiene a PJL pero no se especifican los "
--"atributos JCL.\n"
-+"        ADVERTENCIA    Protocols contiene a PJL pero no se especifican los atributos JCL.\n"
- "                REF: Páginas 78-79, sección 5.7.\n"
- #, c-format
-@@ -1207,12 +1147,10 @@
- "                (restricción=\"%s %s %s %s\")\n"
- msgid ""
--"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[."
--"gz]]\n"
-+"Usage: cupstestppd [-q] [-r] [-v[v]] filename1.ppd[.gz] [... filenameN.ppd[.gz]]\n"
- "       program | cupstestppd [-q] [-r] [-v[v]] -\n"
- msgstr ""
--"Uso: cupstestppd [-q] [-r] [-v[v]] nombre_archivo1.ppd[.gz] [... "
--"nombre_archivoN.ppd[.gz]]\n"
-+"Uso: cupstestppd [-q] [-r] [-v[v]] nombre_archivo1.ppd[.gz] [... nombre_archivoN.ppd[.gz]]\n"
- "       programa | cupstestppd [-q] [-r] [-v[v]] -\n"
- msgid "lpstat: Need \"completed\" or \"not-completed\" after -W!\n"
-@@ -1285,20 +1223,15 @@
- msgstr "destino predeterminado del sistema: %s\n"
- #, c-format
--msgid ""
--"lpstat: error - %s environment variable names non-existent destination \"%s"
--"\"!\n"
--msgstr ""
--"lpstat: error - Los nombre de variable de entorno %s no existen en el "
--"destino \"%s\".\n"
-+msgid "lpstat: error - %s environment variable names non-existent destination \"%s\"!\n"
-+msgstr "lpstat: error - Los nombre de variable de entorno %s no existen en el destino \"%s\".\n"
- msgid "no system default destination\n"
- msgstr "no hay un destino predeterminado del sistema\n"
- #, c-format
- msgid "Output for printer %s is sent to remote printer %s on %s\n"
--msgstr ""
--"La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
-+msgstr "La salida de la impresora %s se ha enviado a la impresora remota %s en %s\n"
- #, c-format
- msgid "Output for printer %s is sent to %s\n"
-@@ -1306,9 +1239,7 @@
- #, c-format
- msgid "Output for printer %s/%s is sent to remote printer %s on %s\n"
--msgstr ""
--"La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %"
--"s\n"
-+msgstr "La salida de la impresora %s/%s se ha enviado a la impresora remota %s en %s\n"
- #, c-format
- msgid "Output for printer %s/%s is sent to %s\n"
-@@ -1452,16 +1383,13 @@
- msgstr "lpadmin: Se esperaba un nombre de clase tras la opción '-c'\n"
- msgid "lpadmin: Class name can only contain printable characters!\n"
--msgstr ""
--"lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
-+msgstr "lpadmin: El nombre de la clase sólo puede contener caracteres imprimibles.\n"
- msgid "lpadmin: Expected printer name after '-d' option!\n"
- msgstr "lpadmin: Se esperaba un nombre de impresora tras la opción '-d'\n"
- msgid "lpadmin: Printer name can only contain printable characters!\n"
--msgstr ""
--"lpadmin: El nombre de la impresora sólo puede contener caracteres "
--"imprimibles.\n"
-+msgstr "lpadmin: El nombre de la impresora sólo puede contener caracteres imprimibles.\n"
- msgid "lpadmin: Expected hostname after '-h' option!\n"
- msgstr "lpadmin: Se esperaba un nombre de ordenador tras la opción '-h'.\n"
-@@ -1536,8 +1464,7 @@
- msgstr "lpadmin: Se esperaba tipo(s) de archivo(s) tras la opción '-l'.\n"
- msgid "lpadmin: Warning - content type list ignored!\n"
--msgstr ""
--"lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
-+msgstr "lpadmin: Advertencia - lista de tipo de contenido no tenida en cuenta.\n"
- msgid ""
- "lpadmin: Unable to set the printer location:\n"
-@@ -1640,9 +1567,7 @@
- msgstr "lp: Se esperaba un ID de trabajo tras la opción -i.\n"
- msgid "lp: Error - cannot print files and alter jobs simultaneously!\n"
--msgstr ""
--"lp: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
--"tiempo.\n"
-+msgstr "lp: Error - no se pueden imprimir archivos y alterar trabajos al mismo tiempo.\n"
- msgid "lp: Error - bad job ID!\n"
- msgstr "lp: Error - ID de trabajo incorrecta.\n"
-@@ -1694,11 +1619,8 @@
- msgid "lp: Unknown option '%c'!\n"
- msgstr "lp: Opción '%c' desconocida.\n"
--msgid ""
--"lp: Error - cannot print from stdin if files or a job ID are provided!\n"
--msgstr ""
--"lp: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
--"un ID de trabajo.\n"
-+msgid "lp: Error - cannot print from stdin if files or a job ID are provided!\n"
-+msgstr "lp: Error - no se puede imprimir desde stdin si se proporcionan archivos o un ID de trabajo.\n"
- #, c-format
- msgid "lp: Unable to access \"%s\" - %s\n"
-@@ -1720,8 +1642,7 @@
- #, c-format
- msgid "lp: error - unable to write to temporary file \"%s\" - %s\n"
--msgstr ""
--"lp: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
-+msgstr "lp: error - no se ha podido escribir en el archivo temporal \"%s\" - %s\n"
- msgid "lp: stdin is empty, so no job has been sent.\n"
- msgstr "lp: stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
-@@ -1883,9 +1804,7 @@
- #, c-format
- msgid "lppasswd: failed to backup old password file: %s\n"
--msgstr ""
--"lppasswd: falló al hacer una copia de seguridad del antiguo archivo de "
--"contraseñas: %s\n"
-+msgstr "lppasswd: falló al hacer una copia de seguridad del antiguo archivo de contraseñas: %s\n"
- #, c-format
- msgid "lppasswd: failed to rename password file: %s\n"
-@@ -1936,12 +1855,8 @@
- msgid "Add Class"
- msgstr "Añadir clase"
--msgid ""
--"The class name may only contain up to 127 printable characters and may not "
--"contain spaces, slashes (/), or the pound sign (#)."
--msgstr ""
--"El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y "
--"no puede contener espacios, barras (/), o la almohadilla (#)."
-+msgid "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
-+msgstr "El nombre de la clase sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
- msgid "Unable to modify class:"
- msgstr "No se ha podido modificar la clase:"
-@@ -1955,12 +1870,8 @@
- msgid "Add Printer"
- msgstr "Añadir impresora"
--msgid ""
--"The printer name may only contain up to 127 printable characters and may not "
--"contain spaces, slashes (/), or the pound sign (#)."
--msgstr ""
--"El nombre de la impresora sólo puede contener hasta 127 caracteres "
--"imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
-+msgid "The printer name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)."
-+msgstr "El nombre de la impresora sólo puede contener hasta 127 caracteres imprimibles y no puede contener espacios, barras (/), o la almohadilla (#)."
- msgid "Unable to get list of printer drivers:"
- msgstr "No se ha podido obtener la lista de controladores de impresora:"
-@@ -2059,24 +1970,16 @@
- msgstr "No se ha podido convertir el archivo PPD."
- msgid "Unable to copy Windows 2000 printer driver files!"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"2000."
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000."
- msgid "Unable to install Windows 2000 printer driver files!"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 2000."
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000."
- msgid "Unable to copy Windows 9x printer driver files!"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"9x."
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x."
- msgid "Unable to install Windows 9x printer driver files!"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 9x."
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x."
- msgid "Unable to set Windows printer driver!"
- msgstr "No se ha podido configurar el controlador de impresora de Windows."
-@@ -2096,14 +1999,10 @@
- msgstr "cupsaddsmb se ha estropeado con señal %d"
- msgid "A Samba username is required to export printer drivers!"
--msgstr ""
--"Se requiere un nombre de usuario Samba para exportar los controladores de "
--"impresora."
-+msgstr "Se requiere un nombre de usuario Samba para exportar los controladores de impresora."
- msgid "A Samba password is required to export printer drivers!"
--msgstr ""
--"Se requiere una contraseña Samba para exportar los controladores de "
--"impresora."
-+msgstr "Se requiere una contraseña Samba para exportar los controladores de impresora."
- msgid "Unable to open cupsd.conf file:"
- msgstr "No se ha podido abrir el archivo cupsd.conf:"
-@@ -2256,13 +2155,10 @@
- msgstr "cupsaddsmb: No se ha podido ejecutar \"%s\": %s\n"
- msgid "cupsaddsmb: No Windows printer drivers are installed!\n"
--msgstr ""
--"cupsaddsmb: No está instalado ningún controlador de impresora de Windows.\n"
-+msgstr "cupsaddsmb: No está instalado ningún controlador de impresora de Windows.\n"
- msgid "cupsaddsmb: Warning, no Windows 2000 printer drivers are installed!\n"
--msgstr ""
--"cupsaddsmb: Advertencia, no está instalado ningún controlador de impresora "
--"de Windows 2000.\n"
-+msgstr "cupsaddsmb: Advertencia, no está instalado ningún controlador de impresora de Windows 2000.\n"
- #, c-format
- msgid "lpadmin: Printer %s is already a member of class %s.\n"
-@@ -2305,8 +2201,7 @@
- msgstr "Uso: lpmove trabajo/fuente destino\n"
- msgid "lpstat: Need \"completed\", \"not-completed\", or \"all\" after -W!\n"
--msgstr ""
--"lpstat: Se necesita \"completed\", \"not completed\", o \"all\" tras -W.\n"
-+msgstr "lpstat: Se necesita \"completed\", \"not completed\", o \"all\" tras -W.\n"
- #, c-format
- msgid "%s accepting requests since %s\n"
-@@ -2356,21 +2251,15 @@
- msgstr "%s: Error - se esperaba un nombre de ordenador tras la opción '-h'.\n"
- #, c-format
--msgid ""
--"%s: error - %s environment variable names non-existent destination \"%s\"!\n"
--msgstr ""
--"%s: error - %s nombres de variables de entorno no existen en destino \"%s"
--"\".\n"
-+msgid "%s: error - %s environment variable names non-existent destination \"%s\"!\n"
-+msgstr "%s: error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
- #, c-format
- msgid "%s: error - no default destination available.\n"
- msgstr "%s: error - destino predeterminado no disponible.\n"
--msgid ""
--"Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
--msgstr ""
--"Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) "
--"(+intervalo)\n"
-+msgid "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]\n"
-+msgstr "Uso: lpq (-P dest) (-U nombre_usuario) (-h nombre_ordenador(:puerto)) (-l) (+intervalo)\n"
- #, c-format
- msgid "%s: Error - expected hostname after '-H' option!\n"
-@@ -2381,12 +2270,8 @@
- msgstr "%s: Error - se esperaba un valor tras la opción '%c'.\n"
- #, c-format
--msgid ""
--"%s: Warning - '%c' format modifier not supported - output may not be "
--"correct!\n"
--msgstr ""
--"%s: Advertencia - no se admite el uso del modificador de formato '%c' - la "
--"salida puede no ser correcta.\n"
-+msgid "%s: Warning - '%c' format modifier not supported - output may not be correct!\n"
-+msgstr "%s: Advertencia - no se admite el uso del modificador de formato '%c' - la salida puede no ser correcta.\n"
- #, c-format
- msgid "%s: error - expected option=value after '-o' option!\n"
-@@ -2417,11 +2302,8 @@
- msgstr "%s: Error - demasiados archivos - \"%s\"\n"
- #, c-format
--msgid ""
--"%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
--msgstr ""
--"%s: Error - %s nombres de variables de entorno no existen en destino \"%s"
--"\".\n"
-+msgid "%s: Error - %s environment variable names non-existent destination \"%s\"!\n"
-+msgstr "%s: Error - %s nombres de variables de entorno no existen en destino \"%s\".\n"
- #, c-format
- msgid "%s: Error - no default destination available.\n"
-@@ -2441,8 +2323,7 @@
- #, c-format
- msgid "%s: Error - stdin is empty, so no job has been sent.\n"
--msgstr ""
--"%s: Error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
-+msgstr "%s: Error - stdin está vacío, por lo tanto no se ha enviado ningún trabajo.\n"
- #, c-format
- msgid "%s: Error - unknown destination \"%s\"!\n"
-@@ -2478,9 +2359,7 @@
- #, c-format
- msgid "%s: Error - cannot print files and alter jobs simultaneously!\n"
--msgstr ""
--"%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo "
--"tiempo.\n"
-+msgstr "%s: Error - no se pueden imprimir archivos y alterar trabajos al mismo tiempo.\n"
- #, c-format
- msgid "%s: Error - bad job ID!\n"
-@@ -2520,8 +2399,7 @@
- #, c-format
- msgid "%s: Need job ID ('-i jobid') before '-H restart'!\n"
--msgstr ""
--"%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
-+msgstr "%s: Se necesita un ID de trabajo ('-i id_trabajo') antes de '-H restart'.\n"
- #, c-format
- msgid "%s: Error - expected page list after '-P' option!\n"
-@@ -2544,19 +2422,12 @@
- msgstr "%s: Advertencia - opción de tipo de contenido no tenida en cuenta.\n"
- #, c-format
--msgid ""
--"%s: Error - cannot print from stdin if files or a job ID are provided!\n"
--msgstr ""
--"%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o "
--"una ID de trabajo.\n"
-+msgid "%s: Error - cannot print from stdin if files or a job ID are provided!\n"
-+msgstr "%s: Error - no se puede imprimir desde stdin si se proporcionan archivos o una ID de trabajo.\n"
- #, c-format
--msgid ""
--"%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' "
--"option!\n"
--msgstr ""
--"%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la "
--"opción '-W'.\n"
-+msgid "%s: Error - need \"completed\", \"not-completed\", or \"all\" after '-W' option!\n"
-+msgstr "%s: Error - se necesita \"completed\", \"not completed\", o \"all\" tras la opción '-W'.\n"
- #, c-format
- msgid "%s: Error - expected destination after '-b' option!\n"
-@@ -2613,14 +2484,10 @@
- msgstr "Las suscripciones de trabajos no han podido ser renovadas."
- msgid "cupsd: Expected config filename after \"-c\" option!\n"
--msgstr ""
--"cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c"
--"\".\n"
-+msgstr "cupsd: Se esperaba un nombre de archivo de configuración tras la opción \"-c\".\n"
- msgid "cupsd: launchd(8) support not compiled in, running in normal mode.\n"
--msgstr ""
--"cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo "
--"normal.\n"
-+msgstr "cupsd: el uso de launchd(8) no ha sido compilado, ejecutándose en modo normal.\n"
- #, c-format
- msgid "cupsd: Unknown option \"%c\" - aborting!\n"
-@@ -2651,18 +2518,11 @@
- msgid "        WARN    Line %d only contains whitespace!\n"
- msgstr "        ADVERTENCIA    La línea %d solo contiene espacios en blanco.\n"
--msgid ""
--"        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
--msgstr ""
--"        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en "
--"CR, LF y CR LF.\n"
-+msgid "        WARN    File contains a mix of CR, LF, and CR LF line endings!\n"
-+msgstr "        ADVERTENCIA    El archivo contiene una mezcla de líneas acabadas en CR, LF y CR LF.\n"
--msgid ""
--"        WARN    Non-Windows PPD files should use lines ending with only LF, "
--"not CR LF!\n"
--msgstr ""
--"        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener "
--"líneas que acaben sólo en LF, no en CR LF.\n"
-+msgid "        WARN    Non-Windows PPD files should use lines ending with only LF, not CR LF!\n"
-+msgstr "        ADVERTENCIA    Los archivos PPD que no sean de Windows deben tener líneas que acaben sólo en LF, no en CR LF.\n"
- msgid "Printer Maintenance"
- msgstr "Mantenimiento de impresora"
-@@ -2684,31 +2544,19 @@
- #, c-format
- msgid "      **FAIL**  Missing \"%s\" translation string for option %s!\n"
--msgstr ""
--"      **FALLO**  Cadena de traducción \"%s\" para opción %s desaparecida.\n"
-+msgstr "      **FALLO**  Cadena de traducción \"%s\" para opción %s desaparecida.\n"
- #, c-format
--msgid ""
--"      **FAIL**  Default translation string for option %s contains 8-bit "
--"characters!\n"
--msgstr ""
--"      **FALLO**  Cadena de traducción predeterminada para opción %s contiene "
--"caracteres de 8-bits.\n"
-+msgid "      **FAIL**  Default translation string for option %s contains 8-bit characters!\n"
-+msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s contiene caracteres de 8-bits.\n"
- #, c-format
--msgid ""
--"      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
--msgstr ""
--"      **FALLO**  Cadena de traducción \"%s\" para opción %s, preferencia %"
--"s.\n"
-+msgid "      **FAIL**  Missing \"%s\" translation string for option %s, choice %s!\n"
-+msgstr "      **FALLO**  Cadena de traducción \"%s\" para opción %s, preferencia %s.\n"
- #, c-format
--msgid ""
--"      **FAIL**  Default translation string for option %s choice %s contains "
--"8-bit characters!\n"
--msgstr ""
--"      **FALLO**  Cadena de traducción predeterminada para opción %s "
--"preferencia %s contiene caracteres de 8-bits.\n"
-+msgid "      **FAIL**  Default translation string for option %s choice %s contains 8-bit characters!\n"
-+msgstr "      **FALLO**  Cadena de traducción predeterminada para opción %s preferencia %s contiene caracteres de 8-bits.\n"
- #, c-format
- msgid "      **FAIL**  Bad cupsFilter value \"%s\"!\n"
-@@ -2727,50 +2575,37 @@
- #, c-format
- msgid "Bad option + choice on line %d!\n"
--msgstr "Opción incorrecta + preferencia en línea %s.\n"
-+msgstr "Opción incorrecta + preferencia en línea %d.\n"
- #, c-format
- msgid "Unable to copy Windows 2000 printer driver files (%d)!\n"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"2000 (%d).\n"
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000 (%d).\n"
- #, c-format
- msgid "Unable to copy CUPS printer driver files (%d)!\n"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
--"d).\n"
-+msgstr "No se han podido copiar los archivos del controlador de impresora de CUPS (%d).\n"
- #, c-format
- msgid "Unable to install Windows 2000 printer driver files (%d)!\n"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 2000 (%d).\n"
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000 (%d).\n"
- #, c-format
- msgid "Unable to copy Windows 9x printer driver files (%d)!\n"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"9x (%d).\n"
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x (%d).\n"
- #, c-format
- msgid "Unable to install Windows 9x printer driver files (%d)!\n"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 9x (%d).\n"
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x (%d).\n"
- msgid "No Windows printer drivers are installed!\n"
- msgstr "No está instalado ningún controlador de impresora de Windows.\n"
- msgid "Warning, no Windows 2000 printer drivers are installed!\n"
--msgstr ""
--"Advertencia, no está instalado ningún controlador de impresora de Windows "
--"2000.\n"
-+msgstr "Advertencia, no está instalado ningún controlador de impresora de Windows 2000.\n"
- #, c-format
- msgid "Unable to set Windows printer driver (%d)!\n"
--msgstr ""
--"No se ha podido configurar el controlador de impresora de Windows (%d).\n"
-+msgstr "No se ha podido configurar el controlador de impresora de Windows (%d).\n"
- msgid ""
- "Usage: cupsaddsmb [options] printer1 ... printerN\n"
-@@ -2788,8 +2623,7 @@
- "       cupsaddsmb [opciones] -a\n"
- "\n"
- "Opciones:\n"
--"  -E               Hace que se use encriptación en la conexión con el "
--"servidor\n"
-+"  -E               Hace que se use encriptación en la conexión con el servidor\n"
- "  -H servidor_samba  Usa el servidor SAMBA especificado\n"
- "  -U usuario_samba    Autentifica usando el usuario SAMBA especificado\n"
- "  -a               Exporta todas las impresoras\n"
-@@ -2798,41 +2632,29 @@
- #, c-format
- msgid "Unable to copy Windows 2000 printer driver files (%d)!"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"2000 (%d)."
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 2000 (%d)."
- #, c-format
- msgid "Unable to copy CUPS printer driver files (%d)!"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de CUPS (%"
--"d)."
-+msgstr "No se han podido copiar los archivos del controlador de impresora de CUPS (%d)."
- #, c-format
- msgid "Unable to install Windows 2000 printer driver files (%d)!"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 2000 (%d)."
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 2000 (%d)."
- #, c-format
- msgid "Unable to copy Windows 9x printer driver files (%d)!"
--msgstr ""
--"No se han podido copiar los archivos del controlador de impresora de Windows "
--"9x (%d)."
-+msgstr "No se han podido copiar los archivos del controlador de impresora de Windows 9x (%d)."
- #, c-format
- msgid "Unable to install Windows 9x printer driver files (%d)!"
--msgstr ""
--"No se han podido instalar los archivos del controlador de impresora de "
--"Windows 9x (%d)."
-+msgstr "No se han podido instalar los archivos del controlador de impresora de Windows 9x (%d)."
- msgid "No Windows printer drivers are installed!"
- msgstr "No está instalado ningún controlador de impresora de Windows."
- msgid "Warning, no Windows 2000 printer drivers are installed!"
--msgstr ""
--"Advertencia, no está instalado ningún controlador de impresora de Windows "
--"2000."
-+msgstr "Advertencia, no está instalado ningún controlador de impresora de Windows 2000."
- #, c-format
- msgid "open of %s failed: %s"
-@@ -2859,12 +2681,8 @@
- msgstr "El trabajo #%d ya ha sido completado - no se puede cancelar."
- #, c-format
--msgid ""
--"You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%"
--"s:%d%s</A>."
--msgstr ""
--"Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://"
--"%s:%d%s</A>."
-+msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
-+msgstr "Debe acceder a esta página usando el URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
- #, c-format
- msgid "Unsupported format '%s'!"
-@@ -2978,8 +2796,7 @@
- "\n"
- "    -h       Show program usage\n"
- "\n"
--"    Note: this program only validates the DSC comments, not the PostScript "
--"itself.\n"
-+"    Note: this program only validates the DSC comments, not the PostScript itself.\n"
- msgstr ""
- "Uso: cupstestdsc [opciones] nombre_archivo.ps [... nombre_archivo.ps]\n"
- "       cupstestdsc [opciones] -\n"
-@@ -2988,17 +2805,16 @@
- "\n"
- "    -h       Muestra cómo se usa el programa\n"
- "\n"
--"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en "
--"sí mismo.\n"
-+"    Nota: este programa sólo valida los comentarios DSC, no el PostScript en sí mismo.\n"
- #, c-format
- msgid "Password for %s on %s? "
--msgstr ""
-+msgstr "¿Contraseña de %s en %s? "
--#, fuzzy
- msgid ""
- "      **FAIL**  1284DeviceId must be 1284DeviceID!\n"
- "                REF: Page 72, section 5.5\n"
- msgstr ""
--"      **FALLO**  Preferencia %s incorrecta %s.\n"
--"                REF: Página 122, sección 5.17\n"
-+"      **FALLO**  1284DeviceId debe ser 1284DeviceID.\n"
-+"                REF: Página 72, sección 5.5\n"
-+
-diff -durN release-1.2.1/locale/Makefile cups-1.2.x/locale/Makefile
---- release-1.2.1/locale/Makefile      2006-07-04 17:32:18.000000000 +0100
-+++ cups-1.2.x/locale/Makefile 2006-06-26 12:42:47.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Locale file makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -51,7 +51,9 @@
- # Install files...
- #
--install:      all
-+install:      all $(INSTALL_LANGUAGES)
-+
-+install-languages:
-       $(INSTALL_DIR) -m 755 $(LOCALEDIR)
-       for loc in $(LANGUAGES) ; do \
-               if test -f cups_$$loc.po; then \
-@@ -65,12 +67,12 @@
- # Uninstall files...
- #
--uninstall:
-+uninstall: $(UNINSTALL_LANGUAGES)
-+
-+uninstall-languages:
-       -for loc in $(LANGUAGES) ; do \
-               $(RM) $(LOCALEDIR)/$$loc/cups_$$loc.po ; \
--              $(RMDIR) $(LOCALEDIR)/$$loc ; \
-       done
--      -$(RMDIR) $(LOCALEDIR)
- #
-@@ -110,5 +112,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/Makedefs.in cups-1.2.x/Makedefs.in
---- release-1.2.1/Makedefs.in  2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/Makedefs.in     2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Common makefile definitions for the Common UNIX Printing System (CUPS).
- #
-@@ -78,6 +78,8 @@
- #
- LANGUAGES     =       @LANGUAGES@
-+INSTALL_LANGUAGES =   @INSTALL_LANGUAGES@
-+UNINSTALL_LANGUAGES = @UNINSTALL_LANGUAGES@
- #
- # Libraries...
-@@ -127,9 +129,9 @@
- CXXLIBS               =       @CXXLIBS@
- DSOFLAGS      =       @DSOFLAGS@
- DSOLIBS               =       @DSOLIBS@ $(COMMONLIBS)
--IMGLIBS               =       @IMGLIBS@ -lm
-+IMGLIBS               =       @IMGLIBS@
- IMGFILTERS    =       @IMGFILTERS@
--LDFLAGS               =       -L../cups -L../filter $(RC_CFLAGS) $(ARCHFLAGS) \
-+LDFLAGS               =       -L../cups -L../filter $(ARCHFLAGS) \
-                       @LDFLAGS@ @PIEFLAGS@ $(OPTIM)
- LINKCUPS      =       @LINKCUPS@ $(SSLLIBS)
- LINKCUPSIMAGE =       @LINKCUPSIMAGE@
-@@ -263,5 +265,5 @@
- #
--# End of "$Id$"
-+# End of "$Id$"
- #
-diff -durN release-1.2.1/man/cupsaddsmb.man.in cups-1.2.x/man/cupsaddsmb.man.in
---- release-1.2.1/man/cupsaddsmb.man.in        2006-07-04 17:33:01.000000000 +0100
-+++ cups-1.2.x/man/cupsaddsmb.man.in   2006-06-26 12:43:31.000000000 +0100
-@@ -1,5 +1,5 @@
- .\"
--.\" "$Id$"
-+.\" "$Id$"
- .\"
- .\"   cupsaddsmb man page for the Common UNIX Printing System (CUPS).
- .\"
-@@ -21,7 +21,7 @@
- .\"       EMail: cups-info@cups.org
- .\"         WWW: http://www.cups.org
- .\"
--.TH cupsaddsmb 8 "Common UNIX Printing System" "19 April 2006" "Easy Software Products"
-+.TH cupsaddsmb 8 "Common UNIX Printing System" "13 June 2006" "Easy Software Products"
- .SH NAME
- cupsaddsmb \- export printers to samba for windows clients
-@@ -162,13 +162,14 @@
- .nf
-     [Windows 2000 and higher]
--    cups6.ini
--    cupsui6.dll
--    cupsdrv6.dll
--    ps5ui.dll
--    pscript.hlp
--    pscript.ntf
--    pscript5.dll
-+    cups6.inf (from www.cups.org)
-+    cups6.ini (from www.cups.org)
-+    cupsps6.dll (from www.cups.org)
-+    cupsui6.dll (from www.cups.org)
-+    ps5ui.dll (from your Windows system)
-+    pscript.hlp (from your Windows system)
-+    pscript.ntf (from your Windows system)
-+    pscript5.dll (from your Windows system)
- .fi
- .LP
- \fBNote:\fR Unlike Windows, case is significant - make sure that
-@@ -209,5 +210,5 @@
- .SH COPYRIGHT
- Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
- .\"
--.\" End of "$Id$".
-+.\" End of "$Id$".
- .\"
-diff -durN release-1.2.1/man/cupsd.conf.man.in cups-1.2.x/man/cupsd.conf.man.in
---- release-1.2.1/man/cupsd.conf.man.in        2006-07-04 17:33:01.000000000 +0100
-+++ cups-1.2.x/man/cupsd.conf.man.in   2006-06-26 12:43:31.000000000 +0100
-@@ -1,5 +1,5 @@
- .\"
--.\" "$Id$"
-+.\" "$Id$"
- .\"
- .\"   cupsd.conf man page for the Common UNIX Printing System (CUPS).
- .\"
-@@ -21,7 +21,7 @@
- .\"       EMail: cups-info@cups.org
- .\"         WWW: http://www.cups.org
- .\"
--.TH cupsd.conf 5 "Common UNIX Printing System" "23 March 2006" "Easy Software Products"
-+.TH cupsd.conf 5 "Common UNIX Printing System" "6 June 2006" "Easy Software Products"
- .SH NAME
- cupsd.conf \- server configuration file for cups
- .SH DESCRIPTION
-@@ -367,8 +367,10 @@
- Listen ip-address:port
- .TP 5
- Listen *:port
-+.TP 5
-+Listen /path/to/domain/socket
- .br
--Listens to the specified address and port.
-+Listens to the specified address and port or domain socket path.
- .TP 5
- <Location /path> ... </Location>
- .br
-@@ -607,5 +609,5 @@
- .SH COPYRIGHT
- Copyright 1997-2006 by Easy Software Products, All Rights Reserved.
- .\"
--.\" End of "$Id$".
-+.\" End of "$Id$".
- .\"
-diff -durN release-1.2.1/packaging/cups.list.in cups-1.2.x/packaging/cups.list.in
---- release-1.2.1/packaging/cups.list.in       2006-07-04 17:32:09.000000000 +0100
-+++ cups-1.2.x/packaging/cups.list.in  2006-06-26 12:42:38.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   ESP Package Manager (EPM) file list for the Common UNIX Printing
- #   System (CUPS).
-@@ -270,7 +270,7 @@
- f 0755 root sys $BINDIR/cupstestppd systemv/cupstestppd
- f 0755 root sys $BINDIR/lp systemv/lp
- f 0755 root sys $BINDIR/lpoptions systemv/lpoptions
--f 4755 $CUPS_USER sys $BINDIR/lppasswd systemv/lppasswd
-+f 4755 root sys $BINDIR/lppasswd systemv/lppasswd
- f 0755 root sys $BINDIR/lpq berkeley/lpq
- f 0755 root sys $BINDIR/lpr berkeley/lpr
- f 0755 root sys $BINDIR/lprm berkeley/lprm
-@@ -342,7 +342,7 @@
- %subpackage ja
- f 0644 root sys $LOCALEDIR/ja/cups_ja.po locale/cups_ja.po
- %subpackage pl
--#f 0644 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po
-+f 0644 root sys $LOCALEDIR/pl/cups_pl.po locale/cups_pl.po
- %subpackage sv
- f 0644 root sys $LOCALEDIR/sv/cups_sv.po locale/cups_sv.po
- %subpackage
-@@ -550,5 +550,5 @@
- i 0755 root sys cups init/cups.sh
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/packaging/cups.spec.in cups-1.2.x/packaging/cups.spec.in
---- release-1.2.1/packaging/cups.spec.in       2006-07-04 17:32:09.000000000 +0100
-+++ cups-1.2.x/packaging/cups.spec.in  2006-06-26 12:42:38.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   RPM "spec" file for the Common UNIX Printing System (CUPS).
- #
-@@ -399,7 +399,7 @@
- /usr/share/doc/cups/pl/images/*
- %dir /usr/share/cups/templates/pl
- /usr/share/cups/templates/pl/*
--#/usr/share/locale/pl/cups_pl.po
-+/usr/share/locale/pl/cups_pl.po
- %files sv
- %defattr(-,root,root)
-@@ -419,5 +419,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/pdftops/PSOutputDev.cxx cups-1.2.x/pdftops/PSOutputDev.cxx
---- release-1.2.1/pdftops/PSOutputDev.cxx      2006-07-04 17:32:06.000000000 +0100
-+++ cups-1.2.x/pdftops/PSOutputDev.cxx 2006-06-28 09:59:03.000000000 +0100
-@@ -1158,7 +1158,7 @@
-     break;
-   }
--  writePSFmt("% Produced by xpdf/pdftops %s\n", xpdfVersion);
-+  writePSFmt("%%Producer: xpdf/pdftops %s\n", xpdfVersion);
-   xref->getDocInfo(&info);
-   if (info.dictLookup("Creator", &obj1)->isString()) {
-     writePS("%%Creator: ");
-diff -durN release-1.2.1/ppd/zebracpl.ppd cups-1.2.x/ppd/zebracpl.ppd
---- release-1.2.1/ppd/zebracpl.ppd     2006-07-04 17:32:08.000000000 +0100
-+++ cups-1.2.x/ppd/zebracpl.ppd        2006-07-04 17:28:24.000000000 +0100
-@@ -120,6 +120,14 @@
- *Resolution 203dpi/203 DPI: "<</HWResolution[203 203]>>setpagedevice"
- *CloseUI: *Resolution
-+*OpenUI *zeMediaTracking/Media Tracking: PickOne
-+*OrderDependency: 20 AnySetup *zeMediaTracking
-+*DefaultzeMediaTracking: Web
-+*zeMediaTracking Continuous: ""
-+*zeMediaTracking Web/Non-continuous (Web sensing): ""
-+*zeMediaTracking Mark/Non-continuous (Mark sensing): ""
-+*CloseUI: *zeMediaTracking
-+
- *OpenGroup: PrinterSettings/Printer Settings
- *OpenUI *Darkness/Media Darkness: PickOne
- *OrderDependency: 20 AnySetup *Darkness
-diff -durN release-1.2.1/scheduler/auth.c cups-1.2.x/scheduler/auth.c
---- release-1.2.1/scheduler/auth.c     2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/auth.c        2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Authorization routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -869,9 +869,12 @@
-           */
-           for (iface = (cupsd_netif_t *)cupsArrayFirst(NetIFList);
--               iface && !strcmp(masks->mask.name.name, iface->name);
-+               iface;
-                iface = (cupsd_netif_t *)cupsArrayNext(NetIFList))
-           {
-+              if (strcmp(masks->mask.name.name, iface->name))
-+                continue;
-+
-               if (iface->address.addr.sa_family == AF_INET)
-             {
-              /*
-@@ -2168,5 +2171,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/client.c cups-1.2.x/scheduler/client.c
---- release-1.2.1/scheduler/client.c   2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/client.c      2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Client routines for the Common UNIX Printing System (CUPS) scheduler.
-  *
-@@ -54,6 +54,11 @@
- #ifdef HAVE_CDSASSL
- #  include <Security/Security.h>
-+#  ifdef HAVE_SECBASEPRIV_H
-+#    include <Security/SecBasePriv.h>
-+#  else
-+     extern const char *cssmErrorString(int error);
-+#  endif /* HAVE_SECBASEPRIV_H */
- #endif /* HAVE_CDSASSL */
- #ifdef HAVE_GNUTLS
- #  include <gnutls/x509.h>
-@@ -1882,24 +1887,27 @@
-   if (con->filename)
-+  {
-     fd = open(con->filename, O_RDONLY);
--  else
--    fd = open("/dev/null", O_RDONLY);
--  if (fd < 0)
--  {
--    cupsdLogMessage(CUPSD_LOG_ERROR,
--                    "cupsdSendCommand: %d Unable to open \"%s\" for reading: %s",
--                    con->http.fd, con->filename ? con->filename : "/dev/null",
--                  strerror(errno));
--    return (0);
--  }
-+    if (fd < 0)
-+    {
-+      cupsdLogMessage(CUPSD_LOG_ERROR,
-+                      "cupsdSendCommand: %d Unable to open \"%s\" for reading: %s",
-+                      con->http.fd, con->filename ? con->filename : "/dev/null",
-+                    strerror(errno));
-+      return (0);
-+    }
--  fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
-+    fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
-+  }
-+  else
-+    fd = -1;
-   con->pipe_pid = pipe_command(con, fd, &(con->file), command, options, root);
--  close(fd);
-+  if (fd >= 0)
-+    close(fd);
-   cupsdLogMessage(CUPSD_LOG_INFO, "Started \"%s\" (pid=%d)", command,
-                   con->pipe_pid);
-@@ -2659,7 +2667,7 @@
-     error = SSLSetIOFuncs(conn->session, _httpReadCDSA, _httpWriteCDSA);
-   if (!error)
--    error = SSLSetProtocolVersion(conn->session, kSSLProtocol3);
-+    error = SSLSetProtocolVersionEnabled(conn->session, kSSLProtocol2, false);
-   if (!error)
-   {
-@@ -2697,8 +2705,8 @@
-                     "encrypt_client: Unable to encrypt connection from %s!",
-                     con->http.hostname);
--    cupsdLogMessage(CUPSD_LOG_ERROR,
--                    "encrypt_client: CDSA error code is %d", (int)error);
-+    cupsdLogMessage(CUPSD_LOG_ERROR, "encrypt_client: %s (%d)",
-+                    cssmErrorString(error), (int)error);
-     con->http.error  = error;
-     con->http.status = HTTP_ERROR;
-@@ -3825,5 +3833,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/conf.c cups-1.2.x/scheduler/conf.c
---- release-1.2.1/scheduler/conf.c     2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/conf.c        2006-06-28 09:59:05.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Configuration routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -289,6 +289,11 @@
-   cupsdSetString(&ServerHeader, "CUPS/1.2");
-   cupsdSetString(&StateDir, CUPS_STATEDIR);
-+  if (!strcmp(CUPS_DEFAULT_PRINTCAP, "/etc/printers.conf"))
-+    PrintcapFormat = PRINTCAP_SOLARIS;
-+  else
-+    PrintcapFormat = PRINTCAP_BSD;
-+
-   strlcpy(temp, ConfigurationFile, sizeof(temp));
-   if ((slash = strrchr(temp, '/')) != NULL)
-     *slash = '\0';
-@@ -463,6 +468,14 @@
-   RunUser = getuid();
-  /*
-+  * See if the ServerName is an IP address...
-+  */
-+
-+  for (slash = ServerName; isdigit(*slash & 255) || *slash == '.'; slash ++);
-+
-+  ServerNameIsIP = !*slash;
-+
-+ /*
-   * Use the default system group if none was supplied in cupsd.conf...
-   */
-@@ -1277,33 +1290,14 @@
-   const char  *maskval,               /* Pointer to start of mask value */
-               *ptr,                   /* Pointer into value */
-               *ptr2;                  /* ... */
--  static unsigned netmasks[4][4] =    /* Standard IPv4 netmasks... */
--  {
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xff000000 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }
--  };
--#ifdef AF_INET6
--  static unsigned netmasks6[8][4] =   /* Standard IPv6 netmasks... */
--  {
--    { 0xffff0000, 0x00000000, 0x00000000, 0x00000000 },
--    { 0xffffffff, 0x00000000, 0x00000000, 0x00000000 },
--    { 0xffffffff, 0xffff0000, 0x00000000, 0x00000000 },
--    { 0xffffffff, 0xffffffff, 0x00000000, 0x00000000 },
--    { 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000 },
--    { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }
--  };
--#endif /* AF_INET6 */
-  /*
-   * Get the address...
-   */
--  memset(ip, 0, sizeof(unsigned) * 4);
-+  ip[0]   = ip[1]   = ip[2]   = ip[2]   = 0x00000000;
-+  mask[0] = mask[1] = mask[2] = mask[3] = 0xffffffff;
-   if ((maskval = strchr(value, '/')) != NULL)
-     maskval ++;
-@@ -1334,6 +1328,7 @@
-            ptr2 = strchr(ptr2 + 1, ':'), j ++);
-         i = 7 - j;
-+      ptr ++;
-       }
-       else if (isxdigit(*ptr & 255))
-       {
-@@ -1343,9 +1338,9 @@
-         return (0);
-         if (i & 1)
--          ip[i] |= ipval;
-+          ip[i / 2] |= ipval;
-       else
--          ip[i] |= ipval << 16;
-+          ip[i / 2] |= ipval << 16;
-       }
-       else
-         return (0);
-@@ -1354,7 +1349,10 @@
-         ptr ++;
-     }
--    ipcount = i;
-+    if (*ptr != ']')
-+      return (0);
-+
-+    ptr ++;
-     if (*ptr && *ptr != '/')
-       return (0);
-@@ -1366,70 +1364,55 @@
-     * Parse dotted-decimal IPv4 address...
-     */
--    family  = AF_INET;
--    ipcount = sscanf(value, "%u.%u.%u.%u", ip + 0, ip + 1, ip + 2, ip + 3);
-+    unsigned val[4];                  /* IPv4 address values */
--    ip[3] |= ((((ip[0] << 8) | ip[1]) << 8) | ip[2]) << 8;
--    ip[0] = ip[1] = ip[2] = 0;
--  }
--  if (*maskval)
--  {
-+    family  = AF_INET;
-+    ipcount = sscanf(value, "%u.%u.%u.%u", val + 0, val + 1, val + 2, val + 3);
-+
-    /*
--    * Get the netmask value(s)...
-+    * Range check the IP numbers...
-     */
--    memset(mask, 0, sizeof(unsigned) * 4);
-+    for (i = 0; i < ipcount; i ++)
-+      if (val[i] > 255)
-+        return (0);
--#ifdef AF_INET6
--    if (*maskval == '[')
--    {
--     /*
--      * Get hexadecimal mask value...
--      */
-+   /*
-+    * Make sure the trailing values are zeroed, as some C libraries like
-+    * glibc apparently like to fill the unused arguments with garbage...
-+    */
--      for (i = 0, ptr = maskval + 1; *ptr && i < 8; i ++)
--      {
--      if (*ptr == ']')
--        break;
--      else if (!strncmp(ptr, "::", 2))
--      {
--          for (ptr2 = strchr(ptr + 2, ':'), j = 0;
--             ptr2;
--             ptr2 = strchr(ptr2 + 1, ':'), j ++);
-+    for (i = ipcount; i < 4; i ++)
-+      val[i] = 0;
--          i = 7 - j;
--      }
--      else if (isxdigit(*ptr & 255))
--      {
--          ipval = strtoul(ptr, (char **)&ptr, 16);
-+   /*
-+    * Merge everything into a 32-bit IPv4 address in ip[3]...
-+    */
--        if (ipval > 0xffff)
--          return (0);
-+    ip[3] = (((((val[0] << 8) | val[1]) << 8) | val[2]) << 8) | val[3];
--          if (i & 1)
--            mask[i] |= ipval;
--        else
--            mask[i] |= ipval << 16;
--      }
--      else
--          return (0);
-+    if (ipcount < 4)
-+      mask[3] = (0xffffffff << (32 - 8 * ipcount)) & 0xffffffff;
-+  }
--        while (*ptr == ':')
--          ptr ++;
--      }
-+  if (*maskval)
-+  {
-+   /*
-+    * Get the netmask value(s)...
-+    */
-+
-+    memset(mask, 0, sizeof(unsigned) * 4);
--      if (*ptr)
--      return (0);
--    }
--    else
--#endif /* AF_INET6 */
-     if (strchr(maskval, '.'))
-     {
-      /*
-       * Get dotted-decimal mask...
-       */
-+      if (family != AF_INET)
-+        return (0);
-+
-       if (sscanf(maskval, "%u.%u.%u.%u", mask + 0, mask + 1, mask + 2, mask + 3) != 4)
-         return (0);
-@@ -1447,6 +1430,9 @@
- #ifdef AF_INET6
-       if (family == AF_INET6)
-       {
-+        if (i > 128)
-+        return (0);
-+
-         i = 128 - i;
-       if (i <= 96)
-@@ -1478,25 +1464,20 @@
-       else
- #endif /* AF_INET6 */
-       {
--        i = 32 - i;
-+        if (i > 32)
-+        return (0);
-         mask[0] = 0xffffffff;
-         mask[1] = 0xffffffff;
-         mask[2] = 0xffffffff;
--      if (i > 0)
--          mask[3] = (0xffffffff << i) & 0xffffffff;
-+      if (i < 32)
-+          mask[3] = (0xffffffff << (32 - i)) & 0xffffffff;
-       else
-         mask[3] = 0xffffffff;
-       }
-     }
-   }
--#ifdef AF_INET6
--  else if (family == AF_INET6)
--    memcpy(mask, netmasks6[ipcount - 1], sizeof(unsigned) * 4);
--#endif /* AF_INET6 */
--  else
--    memcpy(mask, netmasks[ipcount - 1], sizeof(unsigned) * 4);
-   cupsdLogMessage(CUPSD_LOG_DEBUG2,
-                   "get_addr_and_mask(value=\"%s\", "
-@@ -1634,7 +1615,12 @@
-       else
-       cupsdDenyIP(loc, ones, zeros);
-     }
-+#ifdef AF_INET6
-+    else if (value[0] == '*' || value[0] == '.' || 
-+             (!isdigit(value[0] & 255) && value[0] != '['))
-+#else
-     else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
-+#endif /* AF_INET6 */
-     {
-      /*
-       * Host or domain name...
-@@ -2406,7 +2392,12 @@
-         else
-           cupsdDenyIP(location, ones, zeros);
-       }
--      else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0]))
-+#ifdef AF_INET6
-+      else if (value[0] == '*' || value[0] == '.' || 
-+               (!isdigit(value[0] & 255) && value[0] != '['))
-+#else
-+      else if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
-+#endif /* AF_INET6 */
-       {
-        /*
-           * Host or domain name...
-@@ -2490,7 +2481,12 @@
-       *    nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
-       */
--      if (value[0] == '*' || value[0] == '.' || !isdigit(value[0]))
-+#ifdef AF_INET6
-+      if (value[0] == '*' || value[0] == '.' || 
-+          (!isdigit(value[0] & 255) && value[0] != '['))
-+#else
-+      if (value[0] == '*' || value[0] == '.' || !isdigit(value[0] & 255))
-+#endif /* AF_INET6 */
-       {
-        /*
-         * Host or domain name...
-@@ -2584,7 +2580,7 @@
-           strlcpy(temp2, relay->from.mask.name.name, sizeof(temp2));
-   
-         cupsdLogMessage(CUPSD_LOG_INFO, "Relaying from %s to %s:%d (IPv4)",
--                        temp, temp2, ntohs(relay->to.ipv4.sin_port));
-+                        temp2, temp, ntohs(relay->to.ipv4.sin_port));
-   
-         NumRelays ++;
-       }
-@@ -3261,5 +3257,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/conf.h cups-1.2.x/scheduler/conf.h
---- release-1.2.1/scheduler/conf.h     2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/conf.h        2006-06-28 09:59:05.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Configuration file definitions for the Common UNIX Printing System (CUPS)
-  *   scheduler.
-@@ -74,6 +74,7 @@
-                                       /* Directory for request files */
-                       *DocumentRoot           VALUE(NULL);
-                                       /* Root directory for documents */
-+VAR int                       ServerNameIsIP          VALUE(0);
- VAR int                       NumSystemGroups         VALUE(0);
-                                       /* Number of system group names */
- VAR char              *SystemGroups[MAX_SYSTEM_GROUPS];
-@@ -210,5 +211,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/dirsvc.c cups-1.2.x/scheduler/dirsvc.c
---- release-1.2.1/scheduler/dirsvc.c   2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/dirsvc.c      2006-06-28 09:59:05.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Directory services routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -36,6 +36,7 @@
-  *   cupsdStopPolling()            - Stop polling servers as needed.
-  *   cupsdUpdateCUPSBrowse()       - Update the browse lists using the CUPS
-  *                                   protocol.
-+ *   cupsdUpdateLDAPBrowse()       - Scan for new printers via LDAP...
-  *   cupsdUpdatePolling()          - Read status messages from the poll daemons.
-  *   cupsdUpdateSLPBrowse()        - Get browsing information via SLP.
-  *   dequote()                     - Remote quotes from a string.
-@@ -905,14 +906,21 @@
-     fcntl(BrowseSocket, F_SETFD, fcntl(BrowseSocket, F_GETFD) | FD_CLOEXEC);
-    /*
--    * Finally, add the socket to the input selection set...
-+    * Finally, add the socket to the input selection set as needed...
-     */
--    cupsdLogMessage(CUPSD_LOG_DEBUG2,
--                    "cupsdStartBrowsing: Adding fd %d to InputSet...",
--                    BrowseSocket);
-+    if (BrowseRemoteProtocols & BROWSE_CUPS)
-+    {
-+     /*
-+      * We only listen if we want remote printers...
-+      */
--    FD_SET(BrowseSocket, InputSet);
-+      cupsdLogMessage(CUPSD_LOG_DEBUG2,
-+                      "cupsdStartBrowsing: Adding fd %d to InputSet...",
-+                      BrowseSocket);
-+
-+      FD_SET(BrowseSocket, InputSet);
-+    }
-   }
-   else
-     BrowseSocket = -1;
-@@ -1526,39 +1534,57 @@
-   * Loop through the available printers...
-   */
--  if ((e = ldap_first_entry(BrowseLDAPHandle, res)) == NULL)
-+  for (e = ldap_first_entry(BrowseLDAPHandle, res);
-+       e;
-+       e = ldap_next_entry(BrowseLDAPHandle, e))
-   {
--    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to get LDAP printer entry!");
--    return;
--  }
-+   /*
-+    * Get the required values from this entry...
-+    */
-+
-+    if ((value = ldap_get_values(BrowseLDAPHandle, e,
-+                                 "printerDescription")) == NULL)
-+      continue;
--  while (e)
--  {
--    value = ldap_get_values(BrowseLDAPHandle, e, "printerDescription");
-     strlcpy(info, *value, sizeof(info));
-     ldap_value_free(value);
--    value = ldap_get_values(BrowseLDAPHandle, e, "printerLocation");
-+    if ((value = ldap_get_values(BrowseLDAPHandle, e,
-+                                 "printerLocation")) == NULL)
-+      continue;
-+
-     strlcpy(location, *value, sizeof(location));
-     ldap_value_free(value);
--    value = ldap_get_values(BrowseLDAPHandle, e, "printerMakeAndModel");
-+    if ((value = ldap_get_values(BrowseLDAPHandle, e,
-+                                 "printerMakeAndModel")) == NULL)
-+      continue;
-+
-     strlcpy(make_model, *value, sizeof(make_model));
-     ldap_value_free(value);
--    value = ldap_get_values(BrowseLDAPHandle, e, "printerType");
-+    if ((value = ldap_get_values(BrowseLDAPHandle, e,
-+                                 "printerType")) == NULL)
-+      continue;
-+
-     type = atoi(*value);
-     ldap_value_free(value);
--    value = ldap_get_values(BrowseLDAPHandle, e, "printerURI");
-+    if ((value = ldap_get_values(BrowseLDAPHandle, e,
-+                                 "printerURI")) == NULL)
-+      continue;
-+
-     strlcpy(uri, *value, sizeof(uri));
-     ldap_value_free(value);
-+   /*
-+    * Process the entry as browse data...
-+    */
-+
-     if (!is_local_queue(uri, host, sizeof(host), resource, sizeof(resource)))
-       process_browse_data(uri, host, resource, type, IPP_PRINTER_IDLE,
-                           location, info, make_model, 0, NULL);
--    e = ldap_next_entry(BrowseLDAPHandle, e);
-   }
- }
- #endif /* HAVE_OPENLDAP */
-@@ -1866,7 +1892,7 @@
-   hptr   = strchr(host, '.');
-   sptr   = strchr(ServerName, '.');
--  if (sptr != NULL && hptr != NULL)
-+  if (!ServerNameIsIP && sptr != NULL && hptr != NULL)
-   {
-    /*
-     * Strip the common domain name components...
-@@ -2521,7 +2547,7 @@
-         httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
-                          iface->hostname, iface->port,
--                         (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s%s" :
-+                         (p->type & CUPS_PRINTER_CLASS) ? "/classes/%s" :
-                                                           "/printers/%s",
-                          p->name);
-         snprintf(packet, sizeof(packet), "%x %x %s \"%s\" \"%s\" \"%s\" %s\n",
-@@ -2660,13 +2686,13 @@
-   sprintf(typestring, "%u", p->type);
--  cn_value[0]   = p->info;
-+  cn_value[0]   = p->name;
-   cn_value[1]   = NULL;
--  info[0]       = p->info;
-+  info[0]       = p->info ? p->info : "Unknown";
-   info[1]       = NULL;
--  location[0]   = p->location;
-+  location[0]   = p->location ? p->location : "Unknown";
-   location[1]   = NULL;
--  make_model[0] = p->make_model;
-+  make_model[0] = p->make_model ? p->make_model : "Unknown";
-   make_model[1] = NULL;
-   type[0]       = typestring;
-   type[1]       = NULL;
-@@ -2674,7 +2700,7 @@
-   uri[1]        = NULL;
-   snprintf(filter, sizeof(filter),
--           "(&(objectclass=cupsPrinter)(printerDescription~=%s))", p->info);
-+           "(&(objectclass=cupsPrinter)(printerURI=%s))", p->uri);
-   ldap_search_s(BrowseLDAPHandle, BrowseLDAPDN, LDAP_SCOPE_SUBTREE,
-                 filter, (char **)ldap_attrs, 0, &res);
-@@ -2696,7 +2722,7 @@
-   mods[6].mod_type = "objectClass";
-   mods[6].mod_values = (char **)objectClass_values;
--  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->info, BrowseLDAPDN);
-+  snprintf(dn, sizeof(dn), "cn=%s,ou=printers,%s", p->name, BrowseLDAPDN);
-   cupsdLogMessage(CUPSD_LOG_DEBUG2, "send_ldap_browse: dn=\"%s\"", dn);
-   if (ldap_count_entries(BrowseLDAPHandle, res) > 0)
-@@ -2724,7 +2750,7 @@
-   else 
-   {
-    /*
--    * Printer has already been registered, modify the current
-+    * Printer has never been registered, add the current
-     * registration...
-     */
-@@ -2734,11 +2760,11 @@
-     for (i = 0; i < 7; i ++)
-     {
-       pmods[i]         = mods + i;
--      pmods[i]->mod_op = LDAP_MOD_REPLACE;
-+      pmods[i]->mod_op = LDAP_MOD_ADD;
-     }
-     pmods[i] = NULL;
--    if ((rc = ldap_modify_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
-+    if ((rc = ldap_add_s(BrowseLDAPHandle, dn, pmods)) != LDAP_SUCCESS)
-       cupsdLogMessage(CUPSD_LOG_ERROR,
-                       "LDAP add for %s failed with status %d: %s",
-                       p->name, rc, ldap_err2string(rc));
-@@ -3130,5 +3156,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/filter.c cups-1.2.x/scheduler/filter.c
---- release-1.2.1/scheduler/filter.c   2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/filter.c      2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   File type conversion routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -346,6 +346,8 @@
-     * any...)
-     */
-+    tempcost += current->cost;
-+
-     if (tempcost < mincost)
-     {
-       cupsArrayDelete(mintemp);
-@@ -356,7 +358,7 @@
-       */
-       mintemp = temp;
--      mincost = tempcost + current->cost;
-+      mincost = tempcost;
-       cupsArrayInsert(mintemp, current);
-     }
-     else
-@@ -409,5 +411,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/ipp.c cups-1.2.x/scheduler/ipp.c
---- release-1.2.1/scheduler/ipp.c      2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/ipp.c 2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   IPP routines for the Common UNIX Printing System (CUPS) scheduler.
-  *
-@@ -4677,8 +4677,8 @@
-   ipp_attribute_t     *attr;          /* Current attribute */
-   const char          *dest;          /* Destination */
-   cups_ptype_t                dtype;          /* Destination type (printer or class) */
--  char                        method[HTTP_MAX_URI],
--                                      /* Method portion of URI */
-+  char                        scheme[HTTP_MAX_URI],
-+                                      /* Scheme portion of URI */
-                       userpass[HTTP_MAX_URI],
-                                       /* Username portion of URI */
-                       host[HTTP_MAX_URI],
-@@ -4718,8 +4718,8 @@
-                   "cupsdCreateSubscription(con=%p(%d), uri=\"%s\")",
-                   con, con->http.fd, uri->values[0].string.text);
--  httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, method,
--                  sizeof(method), userpass, sizeof(userpass), host,
-+  httpSeparateURI(HTTP_URI_CODING_ALL, uri->values[0].string.text, scheme,
-+                  sizeof(scheme), userpass, sizeof(userpass), host,
-                 sizeof(host), &port, resource, sizeof(resource));
-   if (!strcmp(resource, "/"))
-@@ -4811,10 +4811,54 @@
-     {
-       if (!strcmp(attr->name, "notify-recipient") &&
-           attr->value_tag == IPP_TAG_URI)
-+      {
-+       /*
-+        * Validate the recipient scheme against the ServerBin/notifier
-+      * directory...
-+      */
-+
-+      char    notifier[1024];         /* Notifier filename */
-+
-+
-         recipient = attr->values[0].string.text;
-+
-+      if (httpSeparateURI(HTTP_URI_CODING_ALL, recipient, scheme,
-+                          sizeof(scheme), userpass, sizeof(userpass), host,
-+                          sizeof(host), &port, resource, sizeof(resource)))
-+        {
-+          send_ipp_status(con, IPP_NOT_POSSIBLE,
-+                        _("Bad notify-recipient URI \"%s\"!"), recipient);
-+        ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
-+                      "notify-status-code", IPP_URI_SCHEME);
-+        return;
-+      }
-+
-+        snprintf(notifier, sizeof(notifier), "%s/notifier/%s", ServerBin,
-+               scheme);
-+        if (access(notifier, X_OK))
-+      {
-+          send_ipp_status(con, IPP_NOT_POSSIBLE,
-+                        _("notify-recipient URI \"%s\" uses unknown scheme!"),
-+                        recipient);
-+        ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
-+                      "notify-status-code", IPP_URI_SCHEME);
-+        return;
-+      }
-+      }
-       else if (!strcmp(attr->name, "notify-pull-method") &&
-                attr->value_tag == IPP_TAG_KEYWORD)
-+      {
-         pullmethod = attr->values[0].string.text;
-+
-+        if (strcmp(pullmethod, "ippget"))
-+      {
-+          send_ipp_status(con, IPP_NOT_POSSIBLE,
-+                        _("Bad notify-pull-method \"%s\"!"), pullmethod);
-+        ippAddInteger(con->response, IPP_TAG_SUBSCRIPTION, IPP_TAG_ENUM,
-+                      "notify-status-code", IPP_ATTRIBUTES);
-+        return;
-+      }
-+      }
-       else if (!strcmp(attr->name, "notify-charset") &&
-                attr->value_tag == IPP_TAG_CHARSET &&
-              strcmp(attr->values[0].string.text, "us-ascii") &&
-@@ -9170,5 +9214,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/job.c cups-1.2.x/scheduler/job.c
---- release-1.2.1/scheduler/job.c      2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/job.c 2006-06-28 09:59:05.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Job management routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -506,8 +506,19 @@
-         */
-         cupsdStopJob(job, 0);
--        job->state->values[0].integer = IPP_JOB_PENDING;
--        job->state_value              = IPP_JOB_PENDING;
-+
-+          if (!(printer->type & CUPS_PRINTER_REMOTE) ||
-+            (printer->type & CUPS_PRINTER_IMPLICIT))
-+        {
-+         /*
-+          * Mark the job as pending again - we'll retry on another
-+          * printer...
-+          */
-+
-+          job->state->values[0].integer = IPP_JOB_PENDING;
-+          job->state_value              = IPP_JOB_PENDING;
-+          }
-+
-         cupsdSaveJob(job);
-        /*
-@@ -3011,7 +3022,7 @@
-   {
-     snprintf(final_content_type, sizeof(final_content_type),
-              "FINAL_CONTENT_TYPE=%s/%s",
--           filter->dst->super, filter->dst->type);
-+           filter->src->super, filter->src->type);
-     envp[envc ++] = final_content_type;
-   }
-@@ -3090,28 +3101,6 @@
-   job->status = 0;
-   memset(job->filters, 0, sizeof(job->filters));
--  filterfds[1][0] = open("/dev/null", O_RDONLY);
--
--  if (filterfds[1][0] < 0)
--  {
--    cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
--                    strerror(errno));
--    snprintf(printer->state_message, sizeof(printer->state_message),
--             "Unable to open \"/dev/null\" - %s.", strerror(errno));
--
--    cupsdAddPrinterHistory(printer);
--
--    cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
--                  "Job canceled because the server could not open /dev/null.");
--
--    goto abort_job;
--  }
--
--  fcntl(filterfds[1][0], F_SETFD, fcntl(filterfds[1][0], F_GETFD) | FD_CLOEXEC);
--
--  cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: filterfds[%d] = [ %d %d ]",
--                  1, filterfds[1][0], filterfds[1][1]);
--
-   for (i = 0, slot = 0, filter = (mime_filter_t *)cupsArrayFirst(filters);
-        filter;
-        i ++, filter = (mime_filter_t *)cupsArrayNext(filters))
-@@ -3165,36 +3154,43 @@
-       else
-       {
-         job->print_pipes[0] = -1;
--        if (!strncmp(printer->device_uri, "file:/dev/", 10) &&
--            strcmp(printer->device_uri, "file:/dev/null"))
--          job->print_pipes[1] = open(printer->device_uri + 5,
--                                     O_WRONLY | O_EXCL);
--        else if (!strncmp(printer->device_uri, "file:///dev/", 12) &&
--                 strcmp(printer->device_uri, "file:///dev/null"))
--          job->print_pipes[1] = open(printer->device_uri + 7,
--                                     O_WRONLY | O_EXCL);
-+        if (!strcmp(printer->device_uri, "file:/dev/null") ||
-+            !strcmp(printer->device_uri, "file:///dev/null"))
-+          job->print_pipes[1] = -1;
-         else
--          job->print_pipes[1] = open(printer->device_uri + 5,
--                                     O_WRONLY | O_CREAT | O_TRUNC, 0600);
--
--        if (job->print_pipes[1] < 0)
-         {
--            cupsdLogMessage(CUPSD_LOG_ERROR,
--                          "Unable to open output file \"%s\" - %s.",
--                          printer->device_uri, strerror(errno));
--            snprintf(printer->state_message, sizeof(printer->state_message),
--                   "Unable to open output file \"%s\" - %s.",
--                   printer->device_uri, strerror(errno));
-+          if (!strncmp(printer->device_uri, "file:/dev/", 10))
-+            job->print_pipes[1] = open(printer->device_uri + 5,
-+                                       O_WRONLY | O_EXCL);
-+          else if (!strncmp(printer->device_uri, "file:///dev/", 12))
-+            job->print_pipes[1] = open(printer->device_uri + 7,
-+                                       O_WRONLY | O_EXCL);
-+          else if (!strncmp(printer->device_uri, "file:///", 8))
-+            job->print_pipes[1] = open(printer->device_uri + 7,
-+                                       O_WRONLY | O_CREAT | O_TRUNC, 0600);
-+          else
-+            job->print_pipes[1] = open(printer->device_uri + 5,
-+                                       O_WRONLY | O_CREAT | O_TRUNC, 0600);
--          cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
--                        "Job canceled because the server could not open the "
--                        "output file.");
-+          if (job->print_pipes[1] < 0)
-+          {
-+              cupsdLogMessage(CUPSD_LOG_ERROR,
-+                            "Unable to open output file \"%s\" - %s.",
-+                            printer->device_uri, strerror(errno));
-+              snprintf(printer->state_message, sizeof(printer->state_message),
-+                     "Unable to open output file \"%s\" - %s.",
-+                     printer->device_uri, strerror(errno));
--            goto abort_job;
--        }
-+            cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
-+                          "Job canceled because the server could not open the "
-+                          "output file.");
--        fcntl(job->print_pipes[1], F_SETFD,
--              fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
-+              goto abort_job;
-+          }
-+
-+          fcntl(job->print_pipes[1], F_SETFD,
-+                fcntl(job->print_pipes[1], F_GETFD) | FD_CLOEXEC);
-+          }
-       }
-       cupsdLogMessage(CUPSD_LOG_DEBUG2,
-@@ -3274,25 +3270,7 @@
-       argv[0] = sani_uri;
-       filterfds[slot][0] = -1;
--      filterfds[slot][1] = open("/dev/null", O_WRONLY);
--
--      if (filterfds[slot][1] < 0)
--      {
--      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to open \"/dev/null\" - %s.",
--                      strerror(errno));
--      snprintf(printer->state_message, sizeof(printer->state_message),
--               "Unable to open \"/dev/null\" - %s.", strerror(errno));
--
--      cupsdAddPrinterHistory(printer);
--
--      cupsdAddEvent(CUPSD_EVENT_JOB_COMPLETED, job->printer, job,
--                      "Job canceled because the server could not open a file.");
--
--        goto abort_job;
--      }
--
--      fcntl(filterfds[slot][1], F_SETFD,
--            fcntl(filterfds[slot][1], F_GETFD) | FD_CLOEXEC);
-+      filterfds[slot][1] = -1;
-       cupsdLogMessage(CUPSD_LOG_DEBUG2, "start_job: backend=\"%s\"",
-                       command);
-@@ -3455,5 +3433,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/main.c cups-1.2.x/scheduler/main.c
---- release-1.2.1/scheduler/main.c     2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/main.c        2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Scheduler main loop for the Common UNIX Printing System (CUPS).
-  *
-@@ -357,8 +357,8 @@
-   getrlimit(RLIMIT_NOFILE, &limit);
--  if (limit.rlim_max > CUPS_MAX_FDS)
--    MaxFDs = CUPS_MAX_FDS;
-+  if (limit.rlim_max > FD_SETSIZE)
-+    MaxFDs = FD_SETSIZE;
-   else
-     MaxFDs = limit.rlim_max;
-@@ -2253,5 +2253,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/mime.c cups-1.2.x/scheduler/mime.c
---- release-1.2.1/scheduler/mime.c     2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/mime.c        2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   MIME database file routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -51,6 +51,7 @@
- #include <stdlib.h>
- #include <ctype.h>
-+#include <cups/debug.h>
- #include <cups/dir.h>
- #include <cups/string.h>
- #include "mime.h"
-@@ -486,6 +487,8 @@
-   if ((fp = cupsFileOpen(filename, "r")) == NULL)
-     return;
-+  DEBUG_printf(("\"%s\":\n", filename));
-+
-  /*
-   * Then read each line from the file, skipping any comments in the file...
-   */
-@@ -496,6 +499,8 @@
-     * Skip blank lines and lines starting with a #...
-     */
-+    DEBUG_puts(line);
-+
-     if (!line[0] || line[0] == '#')
-       continue;
-@@ -544,7 +549,10 @@
-       continue;
-     if ((dsttype = mimeType(mime, super, type)) == NULL)
-+    {
-+      DEBUG_printf(("    Destination type %s/%s not found!\n", super, type));
-       continue;
-+    }
-    /*
-     * Then get the cost and filter program...
-@@ -575,7 +583,10 @@
-       */
-       if (!add_fcache(filtercache, filter, filterpath))
-+      {
-+        DEBUG_printf(("    Filter %s not found in %s!\n", filter, filterpath)); 
-         continue;
-+      }
-     }
-    /*
-@@ -655,6 +666,8 @@
-   if ((fp = cupsFileOpen(filename, "r")) == NULL)
-     return;
-+  DEBUG_printf(("\"%s\":\n", filename));
-+
-  /*
-   * Then read each line from the file, skipping any comments in the file...
-   */
-@@ -665,6 +678,8 @@
-     * Skip blank lines and lines starting with a #...
-     */
-+    DEBUG_puts(line);
-+
-     if (!line[0] || line[0] == '#')
-       continue;
-@@ -723,5 +738,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/printers.c cups-1.2.x/scheduler/printers.c
---- release-1.2.1/scheduler/printers.c 2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/printers.c    2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Printer routines for the Common UNIX Printing System (CUPS).
-  *
-@@ -62,6 +62,7 @@
-  */
- #include "cupsd.h"
-+#include <cups/dir.h>
- /*
-@@ -257,6 +258,11 @@
- {
-   int                 i;              /* Looping var */
-   ipp_attribute_t     *attr;          /* Attribute data */
-+  cups_dir_t          *dir;           /* Notifier directory */
-+  cups_dentry_t               *dent;          /* Notifier directory entry */
-+  cups_array_t                *notifiers;     /* Notifier array */
-+  char                        filename[1024], /* Filename */
-+                      *notifier;      /* Current notifier */
-   static const int nups[] =           /* number-up-supported values */
-               { 1, 2, 4, 6, 9, 16 };
-   static const ipp_orient_t orients[4] =/* orientation-requested-supported values */
-@@ -502,11 +508,11 @@
-   ippAddInteger(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
-                "notify-max-events-supported", MaxEvents);
--  /* notify-notify-events-default */
-+  /* notify-events-default */
-   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
-                "notify-events-default", NULL, "job-completed");
--  /* notify-notify-events-supported */
-+  /* notify-events-supported */
-   ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
-                 "notify-events-supported",
-               (int)(sizeof(notify_events) / sizeof(notify_events[0])),
-@@ -516,10 +522,31 @@
-   ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
-                "notify-pull-method-supported", NULL, "ippget");
--  /* TODO: scan notifier directory */
-   /* notify-schemes-supported */
--  ippAddString(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
--               "notify-schemes-supported", NULL, "mailto");
-+  snprintf(filename, sizeof(filename), "%s/notifier", ServerBin);
-+  if ((dir = cupsDirOpen(filename)) != NULL)
-+  {
-+    notifiers = cupsArrayNew((cups_array_func_t)strcmp, NULL);
-+
-+    while ((dent = cupsDirRead(dir)) != NULL)
-+      if (S_ISREG(dent->fileinfo.st_mode) &&
-+          (dent->fileinfo.st_mode & S_IXOTH) != 0)
-+        cupsArrayAdd(notifiers, _cupsStrAlloc(dent->filename));
-+
-+    if (cupsArrayCount(notifiers) > 0)
-+    {
-+      attr = ippAddStrings(CommonData, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
-+                         "notify-schemes-supported",
-+                         cupsArrayCount(notifiers), NULL, NULL);
-+
-+      for (i = 0, notifier = (char *)cupsArrayFirst(notifiers);
-+           notifier;
-+         i ++, notifier = (char *)cupsArrayNext(notifiers))
-+      attr->values[i].string.text = notifier;
-+    }
-+
-+    cupsArrayDelete(notifiers);
-+  }
-   /* number-up-supported */
-   ippAddIntegers(CommonData, IPP_TAG_PRINTER, IPP_TAG_INTEGER,
-@@ -665,7 +692,7 @@
-          dp = (cupsd_printer_t *)cupsArrayNext(Printers))
-       if (dp != p && (dp->type & CUPS_PRINTER_DEFAULT))
-       {
--        DefaultPrinter = p;
-+        DefaultPrinter = dp;
-         break;
-       }
-     }
-@@ -3280,5 +3307,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/subscriptions.c cups-1.2.x/scheduler/subscriptions.c
---- release-1.2.1/scheduler/subscriptions.c    2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/subscriptions.c       2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Subscription routines for the Common UNIX Printing System (CUPS) scheduler.
-  *
-@@ -36,7 +36,6 @@
-  *   cupsdStopAllNotifiers()       - Stop all notifier processes.
-  *   cupsdUpdateNotifierStatus()   - Read messages from notifiers.
-  *   cupsd_compare_subscriptions() - Compare two subscriptions.
-- *   cupsd_delete_all_events()     - Delete all cached events.
-  *   cupsd_delete_event()          - Delete a single event...
-  *   cupsd_send_dbus()             - Send a DBUS notification...
-  *   cupsd_send_notification()     - Send a notification for the specified
-@@ -61,7 +60,6 @@
- static int    cupsd_compare_subscriptions(cupsd_subscription_t *first,
-                                           cupsd_subscription_t *second,
-                                           void *unused);
--static void   cupsd_delete_all_events(void);
- static void   cupsd_delete_event(cupsd_event_t *event);
- #ifdef HAVE_DBUS
- static void   cupsd_send_dbus(cupsd_eventmask_t event, cupsd_printer_t *dest,
-@@ -114,29 +112,11 @@
-   }
-  /*
--  * Allocate memory for the event cache as needed...
--  */
--
--  if (!Events)
--  {
--    Events    = calloc(MaxEvents, sizeof(cupsd_event_t *));
--    NumEvents = 0;
--
--    if (!Events)
--    {
--      cupsdLogMessage(CUPSD_LOG_CRIT,
--                      "Unable to allocate memory for event cache - %s",
--                    strerror(errno));
--      return;
--    }
--  }
--
-- /*
-   * Then loop through the subscriptions and add the event to the corresponding
-   * caches...
-   */
--  for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions), temp = NULL;
-+  for (temp = NULL, sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions);
-        sub;
-        sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
-   {
-@@ -149,185 +129,168 @@
-       (sub->job == job || !sub->job))
-     {
-      /*
--      * Need this event...
-+      * Need this event, so create a new event record...
-       */
--      if (!temp)
-+      if ((temp = (cupsd_event_t *)calloc(1, sizeof(cupsd_event_t))) == NULL)
-       {
--       /*
--      * Create the new event record...
--      */
-+      cupsdLogMessage(CUPSD_LOG_CRIT,
-+                      "Unable to allocate memory for event - %s",
-+                      strerror(errno));
-+      return;
-+      }
--      if ((temp = (cupsd_event_t *)calloc(1, sizeof(cupsd_event_t))) == NULL)
--      {
--        cupsdLogMessage(CUPSD_LOG_CRIT,
--                        "Unable to allocate memory for event - %s",
--                        strerror(errno));
--        return;
--      }
-+      temp->event = event;
-+      temp->time  = time(NULL);
-+      temp->attrs = ippNew();
-+      temp->job   = job;
-+      temp->dest  = dest;
--      temp->event = event;
--      temp->time  = time(NULL);
--      temp->attrs = ippNew();
--      temp->job   = job;
--      temp->dest  = dest;
-+     /*
-+      * Add common event notification attributes...
-+      */
--       /*
--        * Add common event notification attributes...
--      */
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_CHARSET,
-+                   "notify-charset", NULL, "utf-8");
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
--                    "notify-subscription-id", sub->id);
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_LANGUAGE,
-+                   "notify-natural-langugage", NULL, "en-US");
--      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD,
--                   "notify-subscribed-event", NULL, cupsdEventName(event));
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
-+                  "notify-subscription-id", sub->id);
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
--                    "printer-up-time", time(NULL));
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
-+                  "notify-sequence-number", sub->next_event_id);
--        va_start(ap, text);
--      vsnprintf(ftext, sizeof(ftext), text, ap);
--      va_end(ap);
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_KEYWORD,
-+                 "notify-subscribed-event", NULL, cupsdEventName(event));
--      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT,
--                   "notify-text", NULL, ftext);
-+      if (sub->user_data_len > 0)
-+        ippAddOctetString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                        "notify-user-data", sub->user_data,
-+                        sub->user_data_len);
--        if (dest)
--      {
--       /*
--        * Add printer attributes...
--        */
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
-+                  "printer-up-time", time(NULL));
--        ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI,
--                     "notify-printer-uri", NULL, dest->uri);
-+      va_start(ap, text);
-+      vsnprintf(ftext, sizeof(ftext), text, ap);
-+      va_end(ap);
--        ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
--                     "printer-name", NULL, dest->name);
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_TEXT,
-+                 "notify-text", NULL, ftext);
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
--                      "printer-state", dest->state);
-+      if (dest)
-+      {
-+       /*
-+      * Add printer attributes...
-+      */
--        if (dest->num_reasons == 0)
--          ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                       IPP_TAG_KEYWORD, "printer-state-reasons", NULL,
--                       dest->state == IPP_PRINTER_STOPPED ? "paused" : "none");
--        else
--          ippAddStrings(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                        IPP_TAG_KEYWORD, "printer-state-reasons",
--                        dest->num_reasons, NULL,
--                        (const char * const *)dest->reasons);
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_URI,
-+                   "notify-printer-uri", NULL, dest->uri);
--        ippAddBoolean(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                      "printer-is-accepting-jobs", dest->accepting);
--        }
-+      ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
-+                   "printer-name", NULL, dest->name);
--        if (job)
--      {
--       /*
--        * Add job attributes...
--        */
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
-+                    "printer-state", dest->state);
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
--                      "notify-job-id", job->id);
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
--                      "job-state", job->state_value);
-+      if (dest->num_reasons == 0)
-+        ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                     IPP_TAG_KEYWORD, "printer-state-reasons", NULL,
-+                     dest->state == IPP_PRINTER_STOPPED ? "paused" : "none");
-+      else
-+        ippAddStrings(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                      IPP_TAG_KEYWORD, "printer-state-reasons",
-+                      dest->num_reasons, NULL,
-+                      (const char * const *)dest->reasons);
--          if ((attr = ippFindAttribute(job->attrs, "job-name",
--                                     IPP_TAG_NAME)) != NULL)
--          ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
--                       "job-name", NULL, attr->values[0].string.text);
-+      ippAddBoolean(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                    "printer-is-accepting-jobs", dest->accepting);
-+      }
--        switch (job->state_value)
--        {
--          case IPP_JOB_PENDING :
--              if (dest && dest->state == IPP_PRINTER_STOPPED)
--                ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                             "printer-stopped");
--              else
--                ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                             "none");
--              break;
-+      if (job)
-+      {
-+       /*
-+      * Add job attributes...
-+      */
--          case IPP_JOB_HELD :
--              if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD) != NULL ||
--                  ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME) != NULL)
--                ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                             "job-hold-until-specified");
--              else
--                ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                             IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                             "job-incoming");
--              break;
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
-+                    "notify-job-id", job->id);
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_ENUM,
-+                    "job-state", job->state_value);
--          case IPP_JOB_PROCESSING :
--              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
--                           IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                           "job-printing");
--              break;
-+        if ((attr = ippFindAttribute(job->attrs, "job-name",
-+                                   IPP_TAG_NAME)) != NULL)
-+        ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_NAME,
-+                     "job-name", NULL, attr->values[0].string.text);
--          case IPP_JOB_STOPPED :
-+      switch (job->state_value)
-+      {
-+        case IPP_JOB_PENDING :
-+              if (dest && dest->state == IPP_PRINTER_STOPPED)
-               ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-                            IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                           "job-stopped");
--              break;
--
--          case IPP_JOB_CANCELLED :
-+                           "printer-stopped");
-+              else
-               ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-                            IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                           "job-canceled-by-user");
--              break;
-+                           "none");
-+              break;
--          case IPP_JOB_ABORTED :
-+        case IPP_JOB_HELD :
-+              if (ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_KEYWORD) != NULL ||
-+                ippFindAttribute(job->attrs, "job-hold-until", IPP_TAG_NAME) != NULL)
-               ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-                            IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                           "aborted-by-system");
--              break;
--
--          case IPP_JOB_COMPLETED :
-+                           "job-hold-until-specified");
-+              else
-               ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-                            IPP_TAG_KEYWORD, "job-state-reasons", NULL,
--                           "job-completed-successfully");
--              break;
--        }
--
--        ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
--                      "job-impressions-completed",
--                      job->sheets ? job->sheets->values[0].integer : 0);
--      }
-+                           "job-incoming");
-+              break;
--       /*
--      * Purge an old event as needed...
--      */
-+        case IPP_JOB_PROCESSING :
-+              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                         IPP_TAG_KEYWORD, "job-state-reasons", NULL,
-+                         "job-printing");
-+              break;
--      if (NumEvents >= MaxEvents)
--      {
--       /*
--        * Purge the oldest event in the cache...
--        */
-+        case IPP_JOB_STOPPED :
-+              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                         IPP_TAG_KEYWORD, "job-state-reasons", NULL,
-+                         "job-stopped");
-+              break;
--        cupsd_delete_event(Events[0]);
-+        case IPP_JOB_CANCELLED :
-+              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                         IPP_TAG_KEYWORD, "job-state-reasons", NULL,
-+                         "job-canceled-by-user");
-+              break;
--        NumEvents --;
-+        case IPP_JOB_ABORTED :
-+              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                         IPP_TAG_KEYWORD, "job-state-reasons", NULL,
-+                         "aborted-by-system");
-+              break;
--        memmove(Events, Events + 1, NumEvents * sizeof(cupsd_event_t *));
-+        case IPP_JOB_COMPLETED :
-+              ippAddString(temp->attrs, IPP_TAG_EVENT_NOTIFICATION,
-+                         IPP_TAG_KEYWORD, "job-state-reasons", NULL,
-+                         "job-completed-successfully");
-+              break;
-       }
-+      ippAddInteger(temp->attrs, IPP_TAG_EVENT_NOTIFICATION, IPP_TAG_INTEGER,
-+                    "job-impressions-completed",
-+                    job->sheets ? job->sheets->values[0].integer : 0);
-+
-        /*
--      * Add the new event to the main cache...
-+      * Send the notification for this subscription...
-       */
--      Events[NumEvents] = temp;
--      NumEvents ++;
-+      cupsd_send_notification(sub, temp);
-       }
--
--     /*
--      * Send the notification for this subscription...
--      */
--
--      cupsd_send_notification(sub, temp);
-     }
-   }
-@@ -438,8 +401,6 @@
-   cupsd_subscription_t        *sub;           /* Subscription */
--  cupsd_delete_all_events();
--
-   if (!Subscriptions)
-     return;
-@@ -462,6 +423,9 @@
-     cupsd_subscription_t *sub,                /* I - Subscription object */
-     int                  update)      /* I - 1 = update subscriptions.conf */
- {
-+  int i;                              /* Looping var */
-+
-+
-  /*
-   * Close the pipe to the notifier as needed...
-   */
-@@ -483,7 +447,12 @@
-   cupsdClearString(&(sub->recipient));
-   if (sub->events)
-+  {
-+    for (i = 0; i < sub->num_events; i ++)
-+      cupsd_delete_event(sub->events[i]);
-+
-     free(sub->events);
-+  }
-   free(sub);
-@@ -1300,27 +1269,6 @@
- /*
-- * 'cupsd_delete_all_events()' - Delete all cached events.
-- */
--
--static void
--cupsd_delete_all_events(void)
--{
--  int i;                              /* Looping var */
--
--
--  if (MaxEvents <= 0 || !Events)
--    return;
--
--  for (i = 0; i < NumEvents; i ++)
--    cupsd_delete_event(Events[i]);
--
--  free(Events);
--  Events = NULL;
--}
--
--
--/*
-  * 'cupsd_delete_event()' - Delete a single event...
-  *
-  * Oldest events must be deleted first, otherwise the subscription cache
-@@ -1330,43 +1278,6 @@
- static void
- cupsd_delete_event(cupsd_event_t *event)/* I - Event to delete */
- {
--  cupsd_subscription_t        *sub;           /* Current subscription */
--
--
-- /*
--  * Loop through the subscriptions and look for the event in the cache...
--  */
--
--  for (sub = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions);
--       sub;
--       sub = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
--  {
--   /*
--    * Only check the first event in the subscription cache, since the
--    * caller will only delete the oldest event in the cache...
--    */
--
--    if (sub->num_events > 0 && sub->events[0] == event)
--    {
--     /*
--      * Remove this event...
--      */
--
--      sub->num_events --;
--      sub->first_event_id ++;
--
--      if (sub->num_events > 0)
--      {
--       /*
--        * Shift other events upward in cache...
--      */
--
--        memmove(sub->events, sub->events + 1,
--              sub->num_events * sizeof(cupsd_event_t *));
--      }
--    }
--  }
--
-  /*
-   * Free memory...
-   */
-@@ -1490,6 +1401,25 @@
-   }
-  /*
-+  * Purge an old event as needed...
-+  */
-+
-+  if (sub->num_events >= MaxEvents)
-+  {
-+   /*
-+    * Purge the oldest event in the cache...
-+    */
-+
-+    cupsd_delete_event(sub->events[0]);
-+
-+    sub->num_events --;
-+    sub->first_event_id ++;
-+
-+    memmove(sub->events, sub->events + 1,
-+          sub->num_events * sizeof(cupsd_event_t *));
-+  }
-+
-+ /*
-   * Add the event to the subscription.  Since the events array is
-   * always MaxEvents in length, and since we will have already
-   * removed an event from the subscription cache if we hit the
-@@ -1661,5 +1591,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/subscriptions.h cups-1.2.x/scheduler/subscriptions.h
---- release-1.2.1/scheduler/subscriptions.h    2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/subscriptions.h       2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   Subscription definitions for the Common UNIX Printing System (CUPS) scheduler.
-  *
-@@ -131,11 +131,9 @@
- VAR cups_array_t *Subscriptions VALUE(NULL);
-                                       /* Active subscriptions */
--VAR int               MaxEvents VALUE(100),   /* Maximum number of events */
--              NumEvents VALUE(0);     /* Number of active events */
--VAR cupsd_event_t **Events VALUE(NULL);       /* Active events */
-+VAR int               MaxEvents VALUE(100);   /* Maximum number of events */
--VAR unsigned  LastEvent VALUE(0);     /* Last events processed */
-+VAR unsigned  LastEvent VALUE(0);     /* Last event(s) processed */
- VAR int               NotifierPipes[2] VALUE2(-1, -1);
-                                       /* Pipes for notifier error/debug output */
- VAR cupsd_statbuf_t *NotifierStatusBuffer VALUE(NULL);
-@@ -170,5 +168,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/scheduler/testmime.c cups-1.2.x/scheduler/testmime.c
---- release-1.2.1/scheduler/testmime.c 2006-07-04 17:35:29.000000000 +0100
-+++ cups-1.2.x/scheduler/testmime.c    2006-06-26 12:45:38.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   MIME test program for the Common UNIX Printing System (CUPS).
-  *
-@@ -71,7 +71,7 @@
-   mime        = NULL;
-   src         = NULL;
-   dst         = NULL;
--  filter_path = "../filter:../pdftops";
-+  filter_path = "../filter:../pdftops:" CUPS_SERVERBIN "/filter";
-   for (i = 1; i < argc; i ++)
-     if (!strcmp(argv[i], "-d"))
-@@ -331,5 +331,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/systemv/cancel.c cups-1.2.x/systemv/cancel.c
---- release-1.2.1/systemv/cancel.c     2006-07-04 17:33:00.000000000 +0100
-+++ cups-1.2.x/systemv/cancel.c        2006-06-28 09:59:04.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   "cancel" command for the Common UNIX Printing System (CUPS).
-  *
-@@ -121,7 +121,10 @@
-         case 'h' : /* Connect to host */
-           if (http != NULL)
-+          {
-             httpClose(http);
-+            http = NULL;
-+          }
-           if (argv[i][2] != '\0')
-               cupsSetServer(argv[i] + 2);
-@@ -387,5 +390,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/systemv/lpstat.c cups-1.2.x/systemv/lpstat.c
---- release-1.2.1/systemv/lpstat.c     2006-07-04 17:33:00.000000000 +0100
-+++ cups-1.2.x/systemv/lpstat.c        2006-06-26 12:43:30.000000000 +0100
-@@ -1,5 +1,5 @@
- /*
-- * "$Id$"
-+ * "$Id$"
-  *
-  *   "lpstat" command for the Common UNIX Printing System (CUPS).
-  *
-@@ -70,26 +70,59 @@
-  */
- int
--main(int  argc,                       /* I - Number of command-line arguments */
--     char *argv[])            /* I - Command-line arguments */
-+main(int  argc,                               /* I - Number of command-line arguments */
-+     char *argv[])                    /* I - Command-line arguments */
- {
--  int         i,              /* Looping var */
--              status;         /* Exit status */
--  http_t      *http;          /* Connection to server */
--  int         num_dests;      /* Number of user destinations */
--  cups_dest_t *dests;         /* User destinations */
--  int         long_status;    /* Long status report? */
--  int         ranking;        /* Show job ranking? */
--  const char  *which;         /* Which jobs to show? */
--  char                op;             /* Last operation on command-line */
-+  int         i,                      /* Looping var */
-+              status;                 /* Exit status */
-+  http_t      *http;                  /* Connection to server */
-+  int         num_dests;              /* Number of user destinations */
-+  cups_dest_t *dests;                 /* User destinations */
-+  int         long_status;            /* Long status report? */
-+  int         ranking;                /* Show job ranking? */
-+  const char  *which;                 /* Which jobs to show? */
-+  char                op;                     /* Last operation on command-line */
-  /*
-   * Set the locale so that times, etc. are displayed properly.
-+  *
-+  * Unfortunately, while we need the localized time value, we *don't*
-+  * want to use the localized charset for the time value, so we need
-+  * to set LC_TIME to the locale name with .UTF-8 on the end (if
-+  * the locale includes a character set specifier...)
-   */
-   setlocale(LC_ALL, "");
-+#ifdef LC_TIME
-+  {
-+    const char        *lc_time;               /* Current LC_TIME value */
-+    char      new_lc_time[255],       /* New LC_TIME value */
-+              *charset;               /* Pointer to character set */
-+
-+    if ((lc_time = setlocale(LC_TIME, NULL)) == NULL)
-+      lc_time = setlocale(LC_ALL, NULL);
-+
-+    if (lc_time)
-+    {
-+      strlcpy(new_lc_time, lc_time, sizeof(new_lc_time));
-+      if ((charset = strchr(new_lc_time, '.')) == NULL)
-+        charset = new_lc_time + strlen(new_lc_time);
-+
-+      strlcpy(charset, ".UTF-8", sizeof(new_lc_time) - (charset - new_lc_time));
-+    }
-+    else
-+      strcpy(new_lc_time, "C");
-+
-+    setlocale(LC_TIME, new_lc_time);
-+  }
-+#endif /* LC_TIME */
-+  
-+ /*
-+  * Parse command-line options...
-+  */
-+
-   http        = NULL;
-   num_dests   = 0;
-   dests       = NULL;
-@@ -2248,5 +2281,5 @@
- /*
-- * End of "$Id$".
-+ * End of "$Id$".
-  */
-diff -durN release-1.2.1/systemv/Makefile cups-1.2.x/systemv/Makefile
---- release-1.2.1/systemv/Makefile     2006-07-04 17:33:00.000000000 +0100
-+++ cups-1.2.x/systemv/Makefile        2006-06-26 12:43:30.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   System V commands makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -78,7 +78,7 @@
-       $(INSTALL_BIN) lp $(BINDIR)
-       $(INSTALL_BIN) lpoptions $(BINDIR)
-       $(INSTALL_BIN) lpstat $(BINDIR)
--      $(INSTALL_BIN) -m 4755 -o $(CUPS_USER) -g $(CUPS_GROUP) lppasswd $(BINDIR) || $(INSTALL_BIN) lppasswd $(BINDIR)
-+      $(INSTALL_BIN) -m 4755 -o root lppasswd $(BINDIR) || $(INSTALL_BIN) lppasswd $(BINDIR)
- #
-@@ -225,5 +225,5 @@
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
-diff -durN release-1.2.1/templates/Makefile cups-1.2.x/templates/Makefile
---- release-1.2.1/templates/Makefile   2006-07-04 17:35:22.000000000 +0100
-+++ cups-1.2.x/templates/Makefile      2006-06-26 12:45:31.000000000 +0100
-@@ -1,5 +1,5 @@
- #
--# "$Id$"
-+# "$Id$"
- #
- #   Template makefile for the Common UNIX Printing System (CUPS).
- #
-@@ -118,11 +118,13 @@
- # Install files...
- #
--install: all
-+install: all $(INSTALL_LANGUAGES)
-       $(INSTALL_DIR) -m 755 $(DATADIR)/templates
-       for file in $(FILES); do \
-               $(INSTALL_DATA) $$file $(DATADIR)/templates; \
-       done
-+
-+install-languages:
-       for lang in $(LANGUAGES); do \
-               $(INSTALL_DIR) -m 755 $(DATADIR)/templates/$$lang; \
-               for file in $(FILES); do \
-@@ -137,19 +139,21 @@
- # Uninstall files...
- #
--uninstall:
-+uninstall: $(UNINSTALL_LANGUAGES)
-       for file in $(FILES); do \
-               $(RM) $(DATADIR)/templates/$$file; \
-       done
-+      -$(RMDIR) $(DATADIR)/templates
-+
-+uninstall-languages:
-       for lang in $(LANGUAGES); do \
-               for file in $(FILES); do \
-                       $(RM) $(DATADIR)/templates/$$lang/$$file; \
-               done \
-               $(RMDIR) $(DATADIR)/templates/$$lang; \
-       done
--      -$(RMDIR) $(DATADIR)/templates
- #
--# End of "$Id$".
-+# End of "$Id$".
- #
This page took 1.084954 seconds and 4 git commands to generate.