]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Import CUPS v2.1rc1 release-2.1rc1
authorMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:43:21 +0000 (10:43 -0400)
committerMichael Sweet <msweet@msweet-imac.local>
Tue, 15 Mar 2016 14:43:21 +0000 (10:43 -0400)
53 files changed:
CHANGES-2.0.txt
CHANGES.txt
INSTALL.txt
README.txt
backend/dnssd.c
backend/ipp.c
backend/usb-darwin.c
cgi-bin/ipp-var.c
conf/mime.types
config-scripts/cups-common.m4
config-scripts/cups-compiler.m4
config-scripts/cups-startup.m4
configure
configure.ac
cups/cups.h
cups/dest.c
cups/http-support.c
cups/language.c
cups/ppd-cache.c
cups/ppd-private.h
cups/usersys.c
doc/help/man-cupsd.conf.html
doc/help/spec-cmp.html
filter/error.c
filter/interpret.c
filter/raster.c
filter/testraster.c
locale/cups.pot
locale/cups.strings
locale/cups_ca.po
locale/cups_cs.po
locale/cups_de.po
locale/cups_es.po
locale/cups_fr.po
locale/cups_it.po
locale/cups_ja.po
locale/cups_ru.po
locale/po2strings.c
man/Makefile
man/cupsd.conf.man.in
packaging/cups.spec
ppdc/sample.drv
scheduler/client.c
scheduler/conf.c
scheduler/cups-driverd.cxx
scheduler/ipp.c
scheduler/job.c
scheduler/log.c
scheduler/printers.c
test/run-stp-tests.sh
vcnet/config.h
xcode/CUPS.xcodeproj/project.pbxproj
xcode/config.h

index 81c8dcf54fddf2d637cbc63526b65d9f3771588b..dc46f035fdb495b2d09a808bc560698b4fa8e94e 100644 (file)
@@ -1,6 +1,20 @@
 CHANGES-2.0.txt
 ---------------
 
+CHANGES IN CUPS V2.0.4
+
+       - Fixed a bug in cupsRasterWritePixels (STR #4650)
+       - Fixed redirection in the web interface (STR #4538)
+       - The IPP backend did not respond to side-channel requests (STR #4645)
+       - The scheduler did not start all pending jobs at once (STR #4646)
+       - The web search incorrectly searched time-at-xxx values (STR #4652)
+       - Fixed an RPM spec file issue (STR #4657)
+       - The scheduler incorrectly started jobs while canceling multiple jobs
+         (STR #4648)
+       - Fixed processing of server overrides without port numbers (STR #4675)
+       - Documentation changes (STR #4651, STR #4674)
+
+
 CHANGES IN CUPS V2.0.3
 
        - Security: Fixed CERT VU #810572 exploiting the dynamic linker
index 113637de41fc4f53e811f186d54c939ae564f631..4adbe798da79c06d6ea315831d56e4d842c076f5 100644 (file)
@@ -1,5 +1,19 @@
-CHANGES.txt - 2.1b1 - 2015-06-03
---------------------------------
+CHANGES.txt - 2.1rc1 - 2015-07-31
+---------------------------------
+
+CHANGES IN CUPS V2.1rc1
+
+       - Added support for 3D printers (basic types only, no built-in filters)
+         based on PWG white paper.
+       - Fixed bugs in the new journald support (STR #4655, STR #4658,
+         STR #4661)
+       - Fixed domain socket support on Linux (STR #4679)
+       - Fixed signal handlers in the dnssd and usb backends (STR #4671)
+       - <Limit All> in <Policy> sections now applies to all operations when
+         used by itself (STR #4659)
+       - Configure script changes for systemd support (STR #4669)
+       - Updated autoconf sources to use newer form of AC_INIT (STR #4664)
+
 
 CHANGES IN CUPS V2.1b1
 
index 0608c3547a2d6a2e2a88636620d2ada2d337aae6..28e4eefd32e141df4cb145121eaa2e6f9a50a2c3 100644 (file)
@@ -1,5 +1,5 @@
-INSTALL - CUPS v2.1b1 - 2015-06-08
-----------------------------------
+INSTALL - CUPS v2.1rc1 - 2015-07-31
+-----------------------------------
 
 This file describes how to compile and install CUPS from source code. For more
 information on CUPS see the file called "README.txt".  A complete change log can
index a6db7bfb945b57e17ceb0fd7c48ba16b690e832e..c21935fa86be23791d481febc7ae226ff2acf9f0 100644 (file)
@@ -1,5 +1,5 @@
-README - CUPS v2.1b1 - 2015-06-08
----------------------------------
+README - CUPS v2.1rc1 - 2015-07-31
+----------------------------------
 
 Looking for compile instructions?  Read the file "INSTALL.txt" instead...
 
index e76431b0b1abfe65e759e33ea6e51ebb5b3653b1..85ce3bba4ff34309f850afa0af065569ff3e0b49 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $"
+ * "$Id: dnssd.c 12818 2015-07-31 13:29:25Z msweet $"
  *
  * DNS-SD discovery backend for CUPS.
  *
@@ -1289,7 +1289,7 @@ sigterm_handler(int sig)          /* I - Signal number (unused) */
   (void)sig;
 
   if (job_canceled)
-    exit(CUPS_BACKEND_OK);
+    _exit(CUPS_BACKEND_OK);
   else
     job_canceled = 1;
 }
@@ -1330,5 +1330,5 @@ unquote(char       *dst,          /* I - Destination buffer */
 
 
 /*
- * End of "$Id: dnssd.c 12659 2015-05-22 19:06:41Z msweet $".
+ * End of "$Id: dnssd.c 12818 2015-07-31 13:29:25Z msweet $".
  */
index 96957eaaf03ad8a3bf5eecfbb10a07b089c681f9..6c3e7df02c4ba65d0d9dc8c6744b9445225a2faf 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $"
+ * "$Id: ipp.c 12757 2015-06-24 19:55:31Z msweet $"
  *
  * IPP backend for CUPS.
  *
@@ -1571,6 +1571,7 @@ main(int  argc,                           /* I - Number of command-line args */
           FD_ZERO(&input);
          FD_SET(fd, &input);
          FD_SET(snmp_fd, &input);
+         FD_SET(CUPS_SC_FD, &input);
 
           while (select(fd > snmp_fd ? fd + 1 : snmp_fd + 1, &input, NULL, NULL,
                        NULL) <= 0 && !job_canceled);
@@ -3483,5 +3484,5 @@ update_reasons(ipp_attribute_t *attr,     /* I - printer-state-reasons or NULL */
 }
 
 /*
- * End of "$Id: ipp.c 12676 2015-05-28 01:19:14Z msweet $".
+ * End of "$Id: ipp.c 12757 2015-06-24 19:55:31Z msweet $".
  */
index d9dbde3353b3af973683462b7a9aeeadb2ac1e58..ba516dec6be79599d2e77f16fbaa17e92404e4e5 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $"
+ * "$Id: usb-darwin.c 12818 2015-07-31 13:29:25Z msweet $"
  *
- * Copyright 2005-2014 Apple Inc. All rights reserved.
+ * Copyright 2005-2015 Apple Inc. All rights reserved.
  *
  * IMPORTANT:  This Apple software is supplied to you by Apple Computer,
  * Inc. ("Apple") in consideration of your agreement to the following
@@ -95,7 +95,7 @@ extern char **environ;
 #define WAIT_SIDE_DELAY                        3
 #define DEFAULT_TIMEOUT                        5000L
 
-#define        USB_INTERFACE_KIND              CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID190)
+#define        USB_INTERFACE_KIND              CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID245)
 #define kUSBLanguageEnglish            0x409
 
 #define PRINTER_POLLING_INTERVAL       5                       /* seconds */
@@ -140,7 +140,7 @@ struct crashreporter_annotations_t gCRAnnotations
 #define kUSBPrintingProtocolBidirectional      2
 #define kUSBPrintingProtocolIPP                        4
 
-typedef IOUSBInterfaceInterface190     **printer_interface_t;
+typedef IOUSBInterfaceInterface245     **printer_interface_t;
 
 typedef struct iodevice_request_s      /**** Device request ****/
 {
@@ -241,6 +241,7 @@ typedef struct globals_s
   ssize_t              debug_bytes;    /* Current bytes to read */
 #endif /* DEBUG_WRITES */
 
+  Boolean              use_generic_class_driver;
   Boolean              wait_eof;
   int                  drain_output;   /* Drain all pending output */
   int                  bidi_flag;      /* 0=unidirectional, 1=bidirectional */
@@ -300,10 +301,10 @@ static const char *next_line (const char *buffer);
 static void parse_pserror (char *sockBuffer, int len);
 #endif /* PARSE_PS_ERRORS */
 
-static IOUSBInterfaceInterface220 **usb_interface220_for_service(io_service_t usbClass);
+static printer_interface_t usb_printer_interface_interface(io_service_t usbClass);
 static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDevice);
-static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting);
-static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language);
+static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer, UInt8 alternateSetting);
+static CFStringRef copy_printer_interface_indexed_description(printer_interface_t  printer, UInt8 index, UInt16 language);
 static CFStringRef deviceIDCopyManufacturer(CFStringRef deviceID);
 static CFStringRef deviceIDCopyModel(CFStringRef deviceID);
 static CFStringRef deviceIDCopySerialNumber(CFStringRef deviceID);
@@ -957,6 +958,27 @@ static void *read_thread(void *reference)
 
   } while (g.wait_eof || !g.read_thread_stop); /* Abort from main thread tests error here */
 
+  /* Workaround for usb race condition. <rdar://problem/21882551> */
+  if (!g.wait_eof && g.use_generic_class_driver)
+  {
+     const char *pdl = getenv("FINAL_CONTENT_TYPE");
+     if (pdl && strcmp(pdl, "application/vnd.cups-postscript") == 0)
+     {
+       while (readstatus == kIOReturnSuccess && ((rbytes > 0 && readbuffer[rbytes-1] != 0x4) || rbytes == 0))
+       {
+         start = mach_absolute_time();
+
+         rbytes = sizeof(readbuffer);
+         readstatus = (*g.classdriver)->ReadPipe(g.classdriver, readbuffer, &rbytes);
+         if (readstatus == kIOReturnSuccess && rbytes > 0 && readbuffer[rbytes-1] == 0x4)
+           break;
+
+         /* Make sure this loop executes no more than once every 250 miliseconds... */
+         mach_wait_until(start + delay);
+       }
+     }
+  }
+
  /*
   * Let the main thread know that we have completed the read thread...
   */
@@ -1163,19 +1185,19 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
         while (reference->keepRunning && (intf = IOIteratorNext(intfIterator)))
         {
-            IOUSBInterfaceInterface220 **intf220 = usb_interface220_for_service(intf);
-            if (intf220 != NULL)
+            printer_interface_t printerIntf = usb_printer_interface_interface(intf);
+            if (printerIntf != NULL)
             {
                 UInt8 intfClass = 0, intfSubclass = 0, intfProtocol = 0, intfNumber = 0;
 
-                (*intf220)->GetInterfaceClass(intf220, &intfClass);
-                (*intf220)->GetInterfaceSubClass(intf220, &intfSubclass);
-                (*intf220)->GetInterfaceProtocol(intf220, &intfProtocol);
-                (*intf220)->GetInterfaceNumber(intf220, &intfNumber);
+                (*printerIntf)->GetInterfaceClass(printerIntf, &intfClass);
+                (*printerIntf)->GetInterfaceSubClass(printerIntf, &intfSubclass);
+                (*printerIntf)->GetInterfaceProtocol(printerIntf, &intfProtocol);
+                (*printerIntf)->GetInterfaceNumber(printerIntf, &intfNumber);
 
                 if (IsPrintingInterface(intfClass, intfSubclass, intfProtocol))
                 {
-                    CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, 0);
+                    CFStringRef deviceIDString = copy_printer_interface_deviceid(printerIntf, 0);
                     if (deviceIDString != NULL)
                     {
                         reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, 0);
@@ -1184,7 +1206,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
                 }
 
                 IOUSBInterfaceDescriptor *intfDesc = NULL;
-                while (reference->keepRunning && (intfDesc = (IOUSBInterfaceDescriptor *)(*intf220)->FindNextAssociatedDescriptor(intf220, intfDesc, kUSBInterfaceDesc)))
+                while (reference->keepRunning && (intfDesc = (IOUSBInterfaceDescriptor *)(*printerIntf)->FindNextAssociatedDescriptor(printerIntf, intfDesc, kUSBInterfaceDesc)))
                 {
                     intfClass = intfDesc->bInterfaceClass;
                     intfSubclass = intfDesc->bInterfaceSubClass;
@@ -1192,7 +1214,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
 
                     if ((IsPrintingInterface(intfClass, intfSubclass, intfProtocol)))
                     {
-                        CFStringRef deviceIDString = copy_printer_interface_deviceid(intf220, intfDesc->bAlternateSetting);
+                        CFStringRef deviceIDString = copy_printer_interface_deviceid(printerIntf, intfDesc->bAlternateSetting);
                         if (deviceIDString != NULL)
                         {
                             reference->keepRunning = reference->callback(userdata, intf, deviceIDString, locationID, intfNumber, intfDesc->bAlternateSetting);
@@ -1200,7 +1222,7 @@ static void device_added(void *userdata, io_iterator_t iterator)
                         }
                     }
                 }
-                (*intf220)->Release(intf220);
+                (*printerIntf)->Release(printerIntf);
             }
             IOObjectRelease(intf);
         }
@@ -1262,7 +1284,7 @@ static Boolean list_device_cb(void *refcon, io_service_t obj, CFStringRef device
 
         cupsBackendReport("direct", uristr, make_modelstr, make_modelstr, idstr,
                           NULL);
-    
+
         if (make != NULL) CFRelease(make);
         if (model != NULL) CFRelease(model);
         if (serial != NULL) CFRelease(serial);
@@ -1519,6 +1541,7 @@ static kern_return_t load_printerdriver(CFStringRef *driverBundlePath)
     {
       *driverBundlePath = IORegistryEntryCreateCFProperty(g.printer_obj, kUSBClassDriverProperty, NULL, kNilOptions);
 
+      g.use_generic_class_driver = (*driverBundlePath == NULL || (CFStringCompare(*driverBundlePath, kUSBGenericTOPrinterClassDriver, 0x0) == kCFCompareEqualTo));
       kr = load_classdriver(*driverBundlePath, interface, &g.classdriver);
 
       if (kr != kIOReturnSuccess)
@@ -1529,15 +1552,15 @@ static kern_return_t load_printerdriver(CFStringRef *driverBundlePath)
   return kr;
 }
 
-static IOUSBInterfaceInterface220 **usb_interface220_for_service(io_service_t usbClass)
+static printer_interface_t usb_printer_interface_interface(io_service_t usbClass)
 {
-       IOUSBInterfaceInterface220 ** intf = NULL;
+       printer_interface_t  intf = NULL;
        IOCFPlugInInterface **plugin = NULL;
        SInt32  score;
        int kr = IOCreatePlugInInterfaceForService(usbClass, kIOUSBInterfaceUserClientTypeID, kIOCFPlugInInterfaceID, &plugin, &score);
        if (kr == kIOReturnSuccess)
        {
-               (*plugin)->QueryInterface(plugin, CFUUIDGetUUIDBytes(kIOUSBInterfaceInterfaceID220), (LPVOID *)&intf);
+               (*plugin)->QueryInterface(plugin, USB_INTERFACE_KIND, (LPVOID *)&intf);
                IODestroyPlugInInterface(plugin);
        }
 
@@ -1561,7 +1584,7 @@ static IOUSBDeviceInterface **usb_device_interface_for_device(io_service_t usbDe
 }
 
 
-static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **printer, UInt8 alternateSetting)
+static CFStringRef copy_printer_interface_deviceid(printer_interface_t printer, UInt8 alternateSetting)
 {
        // I have tried to make this function as neat as I can, but the possibility of needing to resend
        // a request to get the entire string makes it hideous...
@@ -1722,10 +1745,10 @@ static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **
 
        if (manufacturer != NULL)
                CFRelease(manufacturer);
-  
+
        if (model != NULL)
                CFRelease(model);
-  
+
        if (serial != NULL)
                CFRelease(serial);
 
@@ -1734,11 +1757,11 @@ static CFStringRef copy_printer_interface_deviceid(IOUSBInterfaceInterface220 **
                CFRelease(ret);
                return NULL;
        }
-       
+
        return ret;
 }
 
-static CFStringRef copy_printer_interface_indexed_description(IOUSBInterfaceInterface220 ** printer, UInt8 index, UInt16 language)
+static CFStringRef copy_printer_interface_indexed_description(printer_interface_t  printer, UInt8 index, UInt16 language)
 {
        IOReturn err;
        UInt8 description[256]; // Max possible descriptor length
@@ -2262,13 +2285,13 @@ sigterm_handler(int sig)                /* I - Signal */
     while (waitpid(child_pid, &status, 0) < 0 && errno == EINTR);
 
     if (WIFEXITED(status))
-      exit(WEXITSTATUS(status));
+      _exit(WEXITSTATUS(status));
     else if (status == SIGTERM || status == SIGKILL)
-      exit(0);
+      _exit(0);
     else
     {
-      fprintf(stderr, "DEBUG: Child crashed on signal %d\n", status);
-      exit(CUPS_BACKEND_STOP);
+      write(2, "DEBUG: Child crashed.\n", 22);
+      _exit(CUPS_BACKEND_STOP);
     }
   }
 #endif /* __i386__ || __x86_64__ */
@@ -2460,11 +2483,11 @@ static void get_device_id(cups_sc_status_t *status,
 
   if (g.printer_obj != IO_OBJECT_NULL)
   {
-    IOUSBInterfaceInterface220 **intf220 = usb_interface220_for_service(g.printer_obj);
-    if (intf220)
+    printer_interface_t printerIntf = usb_printer_interface_interface(g.printer_obj);
+    if (printerIntf)
     {
-      deviceIDString = copy_printer_interface_deviceid(intf220, g.alternateSetting);
-      (*intf220)->Release(intf220);
+      deviceIDString = copy_printer_interface_deviceid(printerIntf, g.alternateSetting);
+      (*printerIntf)->Release(printerIntf);
     }
   }
 
@@ -2514,5 +2537,5 @@ log_usb_class_driver(int is_64bit)        /* I - Is the USB class driver 64-bit? */
 
 
 /*
- * End of "$Id: usb-darwin.c 12672 2015-05-28 00:10:27Z msweet $".
+ * End of "$Id: usb-darwin.c 12818 2015-07-31 13:29:25Z msweet $".
  */
index f99ee41d8014328292d3ef0da9d13c00aca08ff7..1a08960d76f431dd01fbe6d884b4f6a2faaf29ed 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $"
+ * "$Id: ipp-var.c 12768 2015-06-30 16:13:38Z msweet $"
  *
  * CGI <-> IPP variable routines for CUPS.
  *
@@ -222,6 +222,9 @@ cgiGetIPPObjects(ipp_t *response,   /* I - IPP response */
              break;
 
           case IPP_TAG_INTEGER :
+             if (!strncmp(ippGetName(attr), "time-at-", 8))
+               break;                  /* Ignore time-at-xxx */
+
              for (i = 0; !add && i < attr->num_values; i ++)
              {
                char    buf[255];       /* Number buffer */
@@ -1547,5 +1550,5 @@ cgiText(const char *message)              /* I - Message */
 
 
 /*
- * End of "$Id: ipp-var.c 12700 2015-06-08 18:32:35Z msweet $".
+ * End of "$Id: ipp-var.c 12768 2015-06-30 16:13:38Z msweet $".
  */
index 002674e43a11aa99fcfb9969aa1d2b387abfc2a5..68759232a53a6a2fa15363159fb6c39b10cdd38d 100644 (file)
@@ -7,7 +7,7 @@
 # VERSIONS OF CUPS.  Instead, create a "local.types" file that
 # reflects your local configuration changes.
 #
-# Copyright 2007-2014 by Apple Inc.
+# Copyright 2007-2015 by Apple Inc.
 # Copyright 1997-2007 by Easy Software Products.
 #
 # These coded instructions, statements, and computer programs are the
@@ -81,6 +81,13 @@ application/postscript               ai eps ps string(0,%!) string(0,<04>%!) \
                                 (contains(0,4096,<0a>%!) + \
                                  !contains(0,4096,"ENTER LANGUAGE")))
 
+application/g-code             gcode
+application/sla                        stl string(0,"solid ") + contains(0,4096,"facet") + contains(0,4096,"vertex")
+application/vnd.makerbot-s3g   x3g
+model/amf                      amf
+model/vnd.collada+xml          dae
+
+
 ########################################################################
 #
 # Image files...
index f1a9263c222b7803384b33061fafa820dc8beef8..63526682fe2c1d463e127d5d9499f2c9fbfc27d7 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $"
+dnl "$Id: cups-common.m4 12785 2015-07-14 18:07:49Z msweet $"
 dnl
 dnl Common configuration stuff for CUPS.
 dnl
-dnl Copyright 2007-2014 by Apple Inc.
+dnl Copyright 2007-2015 by Apple Inc.
 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl These coded instructions, statements, and computer programs are the
@@ -13,18 +13,26 @@ dnl which should have been included with this file.  If this file is
 dnl file is missing or damaged, see the license at "http://www.cups.org/".
 dnl
 
-dnl We need at least autoconf 2.60...
-AC_PREREQ(2.60)
-
 dnl Set the name of the config header file...
 AC_CONFIG_HEADER(config.h)
 
 dnl Version number information...
-CUPS_VERSION=2.1b1
-CUPS_REVISION=
-#if test -z "$CUPS_REVISION" -a -d .svn; then
-#      CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
-#fi
+CUPS_VERSION=2.1rc1
+
+case "$CUPS_VERSION" in
+       *svn)
+               if test -z "$CUPS_REVISION" -a -d .svn; then
+                       CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
+               else
+                       CUPS_REVISION=""
+               fi
+               ;;
+
+       *)
+               CUPS_REVISION=""
+               ;;
+esac
+
 CUPS_BUILD="cups-$CUPS_VERSION"
 
 AC_ARG_WITH(cups_build, [  --with-cups-build       set "cups-config --build" string ],
@@ -33,8 +41,8 @@ AC_ARG_WITH(cups_build, [  --with-cups-build       set "cups-config --build" str
 AC_SUBST(CUPS_VERSION)
 AC_SUBST(CUPS_REVISION)
 AC_SUBST(CUPS_BUILD)
-AC_DEFINE_UNQUOTED(CUPS_SVERSION, "CUPS v$CUPS_VERSION$CUPS_REVISION")
-AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "CUPS/$CUPS_VERSION$CUPS_REVISION")
+AC_DEFINE_UNQUOTED(CUPS_SVERSION, "AC_PACKAGE_NAME v$CUPS_VERSION$CUPS_REVISION")
+AC_DEFINE_UNQUOTED(CUPS_MINIMAL, "AC_PACKAGE_NAME/$CUPS_VERSION$CUPS_REVISION")
 
 dnl Default compiler flags...
 CFLAGS="${CFLAGS:=}"
@@ -466,5 +474,5 @@ esac
 AC_SUBST(BUILDDIRS)
 
 dnl
-dnl End of "$Id: cups-common.m4 12697 2015-06-08 17:42:16Z msweet $".
+dnl End of "$Id: cups-common.m4 12785 2015-07-14 18:07:49Z msweet $".
 dnl
index ca3bae8e07001bf3e89dcd77cea5b890aef6dfc9..b91187724393807a25e85b4adde95bbff2ce4bdf 100644 (file)
@@ -1,5 +1,5 @@
 dnl
-dnl "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $"
+dnl "$Id: cups-compiler.m4 12742 2015-06-23 14:48:53Z msweet $"
 dnl
 dnl Compiler stuff for CUPS.
 dnl
@@ -156,6 +156,15 @@ if test -n "$GCC"; then
                # Add useful warning options for tracking down problems...
                OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
 
+               AC_MSG_CHECKING(whether compiler supports -Wno-unused-result)
+               OLDCFLAGS="$CFLAGS"
+               CFLAGS="$CFLAGS -Werror -Wno-unused-result"
+               AC_TRY_COMPILE(,,
+                       [OPTIM="$OPTIM -Wno-unused-result"
+                       AC_MSG_RESULT(yes)],
+                       AC_MSG_RESULT(no))
+               CFLAGS="$OLDCFLAGS"
+
                AC_MSG_CHECKING(whether compiler supports -Wsign-conversion)
                OLDCFLAGS="$CFLAGS"
                CFLAGS="$CFLAGS -Werror -Wsign-conversion"
@@ -237,5 +246,5 @@ case $uname in
 esac
 
 dnl
-dnl End of "$Id: cups-compiler.m4 12122 2014-08-28 12:55:52Z msweet $".
+dnl End of "$Id: cups-compiler.m4 12742 2015-06-23 14:48:53Z msweet $".
 dnl
index e82ad5193a41ca1ead1fb67f5c0f3a1006a092f3..ea7b23150bdbd82fd5ce565ae325a1e5a7156731 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $"
+dnl "$Id: cups-startup.m4 12784 2015-07-14 17:39:26Z msweet $"
 dnl
 dnl Launch-on-demand/startup stuff for CUPS.
 dnl
-dnl Copyright 2007-2014 by Apple Inc.
+dnl Copyright 2007-2015 by Apple Inc.
 dnl Copyright 1997-2005 by Easy Software Products, all rights reserved.
 dnl
 dnl These coded instructions, statements, and computer programs are the
@@ -56,27 +56,19 @@ if test x$enable_systemd != xno; then
                        AC_MSG_ERROR(Need pkg-config to enable systemd support.)
                 fi
         else
-               AC_MSG_CHECKING(for libsystemd-daemon)
-                if $PKGCONFIG --exists libsystemd-daemon; then
+               AC_MSG_CHECKING(for libsystemd)
+                if $PKGCONFIG --exists libsystemd; then
                         AC_MSG_RESULT(yes)
-                        ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
-                        ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
+                        ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd`
+                        ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd`
                         AC_DEFINE(HAVE_SYSTEMD)
+                       AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H))
                        if test "x$SYSTEMD_DIR" = x; then
                                SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`"
                         fi
                 else
                         AC_MSG_RESULT(no)
                 fi
-               AC_MSG_CHECKING(for libsystemd-journal)
-                if $PKGCONFIG --exists libsystemd-journal; then
-                        AC_MSG_RESULT(yes)
-                        ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
-                        ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
-                       AC_CHECK_HEADER(systemd/sd-journal.h,AC_DEFINE(HAVE_SYSTEMD_SD_JOURNAL_H))
-                else
-                        AC_MSG_RESULT(no)
-                fi
         fi
 fi
 
@@ -181,5 +173,5 @@ fi
 
 
 dnl
-dnl End of "$Id: cups-startup.m4 12691 2015-06-04 18:00:31Z msweet $".
+dnl End of "$Id: cups-startup.m4 12784 2015-07-14 17:39:26Z msweet $".
 dnl
index 7d86119fe95f1e59930737cc79d27743f681999e..b841ef5d9015a9fdf2d3e42700cb95d8b68647e4 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,11 +1,11 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68.
+# Generated by GNU Autoconf 2.69 for CUPS 2.1rc1.
 #
+# Report bugs to <https://www.cups.org/str.php>.
 #
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
-# Foundation, Inc.
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
@@ -134,6 +134,31 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Use a proper internal environment variable to ensure we don't fall
+  # into an infinite loop, continuously re-executing ourselves.
+  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+    _as_can_reexec=no; export _as_can_reexec;
+    # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+  fi
+  # We don't want this to propagate to other subprocesses.
+          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -167,7 +192,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1"
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -212,21 +238,25 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  # We cannot yet assume a decent shell, so we have to provide a
-       # neutralization value for shells without unset; and this also
-       # works around shells that cannot unset nonexistent variables.
-       # Preserve -v and -x to the replacement shell.
-       BASH_ENV=/dev/null
-       ENV=/dev/null
-       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-       export CONFIG_SHELL
-       case $- in # ((((
-         *v*x* | *x*v* ) as_opts=-vx ;;
-         *v* ) as_opts=-v ;;
-         *x* ) as_opts=-x ;;
-         * ) as_opts= ;;
-       esac
-       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
+  export CONFIG_SHELL
+             # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+  *v*x* | *x*v* ) as_opts=-vx ;;
+  *v* ) as_opts=-v ;;
+  *x* ) as_opts=-x ;;
+  * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
 fi
 
     if test x$as_have_required = xno; then :
@@ -236,7 +266,8 @@ fi
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: https://www.cups.org/str.php about your system,
 $0: including any error possibly output before this
 $0: message. Then install a modern shell, or manually run
 $0: the script under such a shell if you do have one."
@@ -328,6 +359,14 @@ $as_echo X"$as_dir" |
 
 
 } # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -449,6 +488,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
+  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+  # already done that, so ensure we don't try to do so again and fall
+  # in an infinite loop.  This has already happened in practice.
+  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -483,16 +526,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -504,28 +547,8 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -555,14 +578,13 @@ MFLAGS=
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="cups/cups.h"
+PACKAGE_NAME='CUPS'
+PACKAGE_TARNAME='cups'
+PACKAGE_VERSION='2.1rc1'
+PACKAGE_STRING='CUPS 2.1rc1'
+PACKAGE_BUGREPORT='https://www.cups.org/str.php'
+PACKAGE_URL='https://www.cups.org/'
+
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -943,7 +965,7 @@ sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 infodir='${datarootdir}/info'
 htmldir='${docdir}'
 dvidir='${docdir}'
@@ -1358,8 +1380,6 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
-    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1445,7 +1465,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
+\`configure' configures CUPS 2.1rc1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1493,7 +1513,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/cups]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1505,7 +1525,9 @@ _ACEOF
 fi
 
 if test -n "$ac_init_help"; then
-
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of CUPS 2.1rc1:";;
+   esac
   cat <<\_ACEOF
 
 Optional Features:
@@ -1619,7 +1641,8 @@ Some influential environment variables:
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to the package provider.
+Report bugs to <https://www.cups.org/str.php>.
+CUPS home page: <https://www.cups.org/>.
 _ACEOF
 ac_status=$?
 fi
@@ -1682,10 +1705,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.68
+CUPS configure 2.1rc1
+generated by GNU Autoconf 2.69
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1836,7 +1859,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        $as_test_x conftest$ac_exeext
+        test -x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -1967,6 +1990,10 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
+( $as_echo "## ------------------------------------------- ##
+## Report this to https://www.cups.org/str.php ##
+## ------------------------------------------- ##"
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -2142,8 +2169,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+It was created by CUPS $as_me 2.1rc1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
 
@@ -2514,16 +2541,25 @@ esac
 
 
 
+ac_config_headers="$ac_config_headers config.h"
 
 
-ac_config_headers="$ac_config_headers config.h"
+CUPS_VERSION=2.1rc1
 
+case "$CUPS_VERSION" in
+       *svn)
+               if test -z "$CUPS_REVISION" -a -d .svn; then
+                       CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[a-zA-Z]*//g'`"
+               else
+                       CUPS_REVISION=""
+               fi
+               ;;
+
+       *)
+               CUPS_REVISION=""
+               ;;
+esac
 
-CUPS_VERSION=2.1b1
-CUPS_REVISION=
-#if test -z "$CUPS_REVISION" -a -d .svn; then
-#      CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`"
-#fi
 CUPS_BUILD="cups-$CUPS_VERSION"
 
 
@@ -2568,7 +2604,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2616,7 +2652,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -2660,7 +2696,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3104,8 +3140,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+struct stat;
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -3355,7 +3390,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3399,7 +3434,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3601,7 +3636,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3641,7 +3676,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3694,7 +3729,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_AR="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3734,7 +3769,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3774,7 +3809,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3814,7 +3849,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LD="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3854,7 +3889,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3894,7 +3929,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3934,7 +3969,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3974,7 +4009,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_RMDIR="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4014,7 +4049,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4054,7 +4089,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_XDGOPEN="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4130,7 +4165,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4173,7 +4208,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4583,7 +4618,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+      as_fn_executable_p "$ac_path_GREP" || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4649,7 +4684,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+      as_fn_executable_p "$ac_path_EGREP" || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -6776,6 +6811,32 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                # Add useful warning options for tracking down problems...
                OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM"
 
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wno-unused-result" >&5
+$as_echo_n "checking whether compiler supports -Wno-unused-result... " >&6; }
+               OLDCFLAGS="$CFLAGS"
+               CFLAGS="$CFLAGS -Werror -Wno-unused-result"
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  OPTIM="$OPTIM -Wno-unused-result"
+                       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+               CFLAGS="$OLDCFLAGS"
+
                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wsign-conversion" >&5
 $as_echo_n "checking whether compiler supports -Wsign-conversion... " >&6; }
                OLDCFLAGS="$CFLAGS"
@@ -7588,7 +7649,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -7631,7 +7692,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8185,7 +8246,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8228,7 +8289,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8283,7 +8344,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8326,7 +8387,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_ac_pt_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -8887,6 +8948,8 @@ _ACEOF
 esac
 rm -rf conftest*
   fi
+
+
 fi
 
 
@@ -9134,29 +9197,15 @@ if test x$enable_systemd != xno; then
                        as_fn_error $? "Need pkg-config to enable systemd support." "$LINENO" 5
                 fi
         else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd-daemon" >&5
-$as_echo_n "checking for libsystemd-daemon... " >&6; }
-                if $PKGCONFIG --exists libsystemd-daemon; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd" >&5
+$as_echo_n "checking for libsystemd... " >&6; }
+                if $PKGCONFIG --exists libsystemd; then
                         { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-                        ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon`
-                        ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon`
+                        ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd`
+                        ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd`
                         $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h
 
-                       if test "x$SYSTEMD_DIR" = x; then
-                               SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`"
-                        fi
-                else
-                        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-                fi
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd-journal" >&5
-$as_echo_n "checking for libsystemd-journal... " >&6; }
-                if $PKGCONFIG --exists libsystemd-journal; then
-                        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-                        ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`"
-                        ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`"
                        ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-journal.h" "ac_cv_header_systemd_sd_journal_h" "$ac_includes_default"
 if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then :
   $as_echo "#define HAVE_SYSTEMD_SD_JOURNAL_H 1" >>confdefs.h
@@ -9164,6 +9213,9 @@ if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then :
 fi
 
 
+                       if test "x$SYSTEMD_DIR" = x; then
+                               SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`"
+                        fi
                 else
                         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -9902,7 +9954,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9965,7 +10017,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10028,7 +10080,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PHPCGI="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10069,7 +10121,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10137,7 +10189,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
     ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -10606,16 +10658,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -p'.
+    # In both cases, we have to default to `cp -pR'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -p'
+      as_ln_s='cp -pR'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -p'
+    as_ln_s='cp -pR'
   fi
 else
-  as_ln_s='cp -p'
+  as_ln_s='cp -pR'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -10675,28 +10727,16 @@ else
   as_mkdir_p=false
 fi
 
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-       test -d "$1/.";
-      else
-       case $1 in #(
-       -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -10717,8 +10757,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.68.  Invocation command line was
+This file was extended by CUPS $as_me 2.1rc1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -10773,17 +10813,18 @@ $config_files
 Configuration headers:
 $config_headers
 
-Report bugs to the package provider."
+Report bugs to <https://www.cups.org/str.php>.
+CUPS home page: <https://www.cups.org/>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.68,
+CUPS config.status 2.1rc1
+configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2010 Free Software Foundation, Inc.
+Copyright (C) 2012 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -10872,7 +10913,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
index 1e3fb72af0e35e38186e3dbf5580dae4216d67f3..f19c603581876a97b69cdafe5ed98f986efbfcf7 100644 (file)
@@ -1,9 +1,9 @@
 dnl
-dnl "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $"
+dnl "$Id: configure.ac 12787 2015-07-14 21:19:57Z msweet $"
 dnl
 dnl Configuration script for CUPS.
 dnl
-dnl Copyright 2007-2014 by Apple Inc.
+dnl Copyright 2007-2015 by Apple Inc.
 dnl Copyright 1997-2007 by Easy Software Products, all rights reserved.
 dnl
 dnl These coded instructions, statements, and computer programs are the
@@ -13,7 +13,11 @@ dnl which should have been included with this file.  If this file is
 dnl file is missing or damaged, see the license at "http://www.cups.org/".
 dnl
 
-AC_INIT(cups/cups.h)
+dnl We need at least autoconf 2.60...
+AC_PREREQ(2.60)
+
+dnl Package name and version...
+AC_INIT([CUPS], [2.1rc1], [https://www.cups.org/str.php], [cups], [https://www.cups.org/])
 
 sinclude(config-scripts/cups-opsys.m4)
 sinclude(config-scripts/cups-common.m4)
@@ -91,5 +95,5 @@ AC_OUTPUT(Makedefs
 chmod +x cups-config
 
 dnl
-dnl End of "$Id: configure.ac 12278 2014-12-01 13:53:56Z msweet $".
+dnl End of "$Id: configure.ac 12787 2015-07-14 21:19:57Z msweet $".
 dnl
index 4faf82cdc7b32eb9706c2acd808528b6916cb4ef..f40665d687babddaba806f7fef6f5831175b8a3f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: cups.h 12733 2015-06-12 01:21:05Z msweet $"
  *
  * API definitions for CUPS.
  *
@@ -250,6 +250,7 @@ enum cups_ptype_e                   /* Printer type/capability bit
                                         * @since CUPS 1.4/OS X 10.6@ */
   CUPS_PRINTER_MFP = 0x4000000,                /* Printer with scanning capabilities
                                         * @since CUPS 1.4/OS X 10.6@ */
+  CUPS_PRINTER_3D = 0x8000000,         /* 3D Printing @since CUPS 2.1@ */
   CUPS_PRINTER_OPTIONS = 0x6fffc       /* ~(CLASS | REMOTE | IMPLICIT |
                                         * DEFAULT | FAX | REJECTING | DELETE |
                                         * NOT_SHARED | AUTHENTICATED |
@@ -635,5 +636,5 @@ extern int          cupsSetServerCredentials(const char *path, const char *common_name,
 #endif /* !_CUPS_CUPS_H_ */
 
 /*
- * End of "$Id: cups.h 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: cups.h 12733 2015-06-12 01:21:05Z msweet $".
  */
index dcbdfb9e2e110aa065559e6d650ec392274bc132..413fc271e1ea2e06ede93375a64d965bcfc2bb80 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: dest.c 12733 2015-06-12 01:21:05Z msweet $"
  *
  * User-defined destination (and option) support for CUPS.
  *
@@ -871,7 +871,7 @@ cupsEnumDests(
   */
 
   num_dests = _cupsGetDests(CUPS_HTTP_DEFAULT, IPP_OP_CUPS_GET_PRINTERS, NULL,
-                            &dests, type, mask);
+                            &dests, type, mask | CUPS_PRINTER_3D);
 
   if ((user_default = _cupsUserDefault(name, sizeof(name))) != NULL)
     defprinter = name;
@@ -1743,7 +1743,7 @@ cupsGetDests2(http_t      *http,  /* I - Connection to server or @code CUPS_HTTP_
   */
 
   *dests    = (cups_dest_t *)0;
-  num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, dests, 0, 0);
+  num_dests = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, dests, 0, CUPS_PRINTER_3D);
 
   if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
   {
@@ -1960,7 +1960,7 @@ cupsGetNamedDest(http_t     *http,        /* I - Connection to server or @code CUPS_HTT
   * Get the printer's attributes...
   */
 
-  if (!_cupsGetDests(http, op, name, &dest, 0, 0))
+  if (!_cupsGetDests(http, op, name, &dest, 0, CUPS_PRINTER_3D))
     return (NULL);
 
   if (instance)
@@ -2136,7 +2136,7 @@ cupsSetDests2(http_t      *http,  /* I - Connection to server or @code CUPS_HTTP_
   * Get the server destinations...
   */
 
-  num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, 0);
+  num_temps = _cupsGetDests(http, IPP_OP_CUPS_GET_PRINTERS, NULL, &temps, 0, CUPS_PRINTER_3D);
 
   if (cupsLastError() >= IPP_STATUS_REDIRECTION_OTHER_SITE)
   {
@@ -3943,5 +3943,5 @@ cups_make_string(
 
 
 /*
- * End of "$Id: dest.c 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: dest.c 12733 2015-06-12 01:21:05Z msweet $".
  */
index 7e30608ceb721e27f2de9ebae35ad8cf80213f66..deb569184366403ccd8a04eb2ac5819724e98c61 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $"
+ * "$Id: http-support.c 12752 2015-06-24 19:30:47Z msweet $"
  *
  * HTTP support routines for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
  *
  * These coded instructions, statements, and computer programs are the
@@ -1722,7 +1722,7 @@ _httpResolveURI(
        while (time(NULL) < end_time)
        {
          if (options & _HTTP_RESOLVE_STDERR)
-           _cupsLangPrintFilter(stderr, "INFO", _("Looking for printer."));
+           _cupsLangPrintFilter(stderr, "INFO", _("Looking for printer..."));
 
          if (cb && !(*cb)(context))
          {
@@ -2544,5 +2544,5 @@ http_resolve_cb(
 
 
 /*
- * End of "$Id: http-support.c 12124 2014-08-28 15:37:22Z msweet $".
+ * End of "$Id: http-support.c 12752 2015-06-24 19:30:47Z msweet $".
  */
index 0adf73ad6ab9ac184c5df7f73477409a9d60845b..aa81063555ce67f1372e1376fde95bb0db69eef9 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $"
+ * "$Id: language.c 12790 2015-07-20 17:05:06Z msweet $"
  *
  * I18N/language support for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -1305,7 +1305,8 @@ static cups_array_t *                     /* O - Message catalog */
 appleMessageLoad(const char *locale)   /* I - Locale ID */
 {
   char                 filename[1024], /* Path to cups.strings file */
-                       applelang[256]; /* Apple language ID */
+                       applelang[256], /* Apple language ID */
+                       baselang[3];    /* Base language */
   CFURLRef             url;            /* URL to cups.strings file */
   CFReadStreamRef      stream = NULL;  /* File stream */
   CFPropertyListRef    plist = NULL;   /* Localization file */
@@ -1345,6 +1346,15 @@ appleMessageLoad(const char *locale)     /* I - Locale ID */
       locale = "Japanese";
     else if (!strncmp(locale, "es", 2))
       locale = "Spanish";
+    else if (strstr(locale, "_") != NULL || strstr(locale, "-") != NULL)
+    {
+     /*
+      * Drop country code, just try language...
+      */
+
+      strlcpy(baselang, locale, sizeof(baselang));
+      locale = baselang;
+    }
 
     snprintf(filename, sizeof(filename),
             CUPS_BUNDLEDIR "/Resources/%s.lproj/cups.strings", locale);
@@ -1588,5 +1598,5 @@ cups_unquote(char       *d,               /* O - Unquoted string */
 
 
 /*
- * End of "$Id: language.c 12262 2014-11-19 15:18:33Z msweet $".
+ * End of "$Id: language.c 12790 2015-07-20 17:05:06Z msweet $".
  */
index 5a5af77de35214ffb40c38c118ed1b0aaf1f4096..428677d8555739c7451fb7fd3a569a0223259012 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: ppd-cache.c 12733 2015-06-12 01:21:05Z msweet $"
  *
  * PPD cache implementation for CUPS.
  *
@@ -36,6 +36,7 @@
 static int     pwg_compare_finishings(_pwg_finishings_t *a,
                                       _pwg_finishings_t *b);
 static void    pwg_free_finishings(_pwg_finishings_t *f);
+static void    pwg_free_material(_pwg_material_t *m);
 static void    pwg_ppdize_name(const char *ipp, char *name, size_t namesize);
 static void    pwg_ppdize_resolution(ipp_attribute_t *attr, int element, int *xres, int *yres, char *name, size_t namesize);
 static void    pwg_unppdize_name(const char *ppd, char *name, size_t namesize,
@@ -480,6 +481,53 @@ _ppdCacheCreateWithFile(
       _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad PPD cache file."), 1);
       goto create_error;
     }
+    else if (!_cups_strcasecmp(line, "3D"))
+    {
+      pc->cups_3d = _cupsStrAlloc(value);
+    }
+    else if (!_cups_strcasecmp(line, "LayerOrder"))
+    {
+      pc->cups_layer_order = _cupsStrAlloc(value);
+    }
+    else if (!_cups_strcasecmp(line, "Accuracy"))
+    {
+      sscanf(value, "%d%d%d", pc->cups_accuracy + 0, pc->cups_accuracy + 1, pc->cups_accuracy + 2);
+    }
+    else if (!_cups_strcasecmp(line, "Volume"))
+    {
+      sscanf(value, "%d%d%d", pc->cups_volume + 0, pc->cups_volume + 1, pc->cups_volume + 2);
+    }
+    else if (!_cups_strcasecmp(line, "Material"))
+    {
+     /*
+      * Material key "name" name=value ... name=value
+      */
+
+      if ((valueptr = strchr(value, ' ')) != NULL)
+      {
+       _pwg_material_t *material = (_pwg_material_t *)calloc(1, sizeof(_pwg_material_t));
+
+        *valueptr++ = '\0';
+
+        material->key = _cupsStrAlloc(value);
+
+        if (*valueptr == '\"')
+       {
+         value = valueptr + 1;
+         if ((valueptr = strchr(value, '\"')) != NULL)
+         {
+           *valueptr++ = '\0';
+           material->name = _cupsStrAlloc(value);
+           material->num_props = cupsParseOptions(valueptr, 0, &material->props);
+         }
+       }
+
+       if (!pc->materials)
+         pc->materials = cupsArrayNew3(NULL, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_material);
+
+        cupsArrayAdd(pc->materials, material);
+      }
+    }
     else if (!_cups_strcasecmp(line, "Filter"))
     {
       if (!pc->filters)
@@ -1711,6 +1759,42 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd)  /* I - PPD file */
   if ((ppd_attr = ppdFindAttr(ppd, "APPrinterIconPath", NULL)) != NULL)
     cupsArrayAdd(pc->support_files, ppd_attr->value);
 
+ /*
+  * 3D stuff...
+  */
+
+  if ((ppd_attr = ppdFindAttr(ppd, "cups3D", NULL)) != NULL)
+    pc->cups_3d = _cupsStrAlloc(ppd_attr->value);
+
+  if ((ppd_attr = ppdFindAttr(ppd, "cupsLayerOrder", NULL)) != NULL)
+    pc->cups_layer_order = _cupsStrAlloc(ppd_attr->value);
+
+  if ((ppd_attr = ppdFindAttr(ppd, "cupsAccuracy", NULL)) != NULL)
+    sscanf(ppd_attr->value, "%d%d%d", pc->cups_accuracy + 0, pc->cups_accuracy + 1, pc->cups_accuracy + 2);
+
+  if ((ppd_attr = ppdFindAttr(ppd, "cupsVolume", NULL)) != NULL)
+    sscanf(ppd_attr->value, "%d%d%d", pc->cups_volume + 0, pc->cups_volume + 1, pc->cups_volume + 2);
+
+  for (ppd_attr = ppdFindAttr(ppd, "cupsMaterial", NULL);
+       ppd_attr;
+       ppd_attr = ppdFindNextAttr(ppd, "cupsMaterial", NULL))
+  {
+   /*
+    * *cupsMaterial key/name: "name=value ... name=value"
+    */
+
+    _pwg_material_t    *material = (_pwg_material_t *)calloc(1, sizeof(_pwg_material_t));
+
+    material->key = _cupsStrAlloc(ppd_attr->name);
+    material->name = _cupsStrAlloc(ppd_attr->text);
+    material->num_props = cupsParseOptions(ppd_attr->value, 0, &material->props);
+
+    if (!pc->materials)
+      pc->materials = cupsArrayNew3(NULL, NULL, NULL, 0, NULL, (cups_afree_func_t)pwg_free_material);
+
+    cupsArrayAdd(pc->materials, material);
+  }
+
  /*
   * Return the cache data...
   */
@@ -1818,6 +1902,11 @@ _ppdCacheDestroy(_ppd_cache_t *pc)       /* I - PPD cache and mapping data */
 
   cupsArrayDelete(pc->support_files);
 
+  _cupsStrFree(pc->cups_3d);
+  _cupsStrFree(pc->cups_layer_order);
+
+  cupsArrayDelete(pc->materials);
+
   free(pc);
 }
 
@@ -2575,6 +2664,7 @@ _ppdCacheWriteFile(
   cups_option_t                *option;        /* Current option */
   const char           *value;         /* Filter/pre-filter value */
   char                 newfile[1024];  /* New filename */
+  _pwg_material_t      *m;             /* Material */
 
 
  /*
@@ -2755,6 +2845,32 @@ _ppdCacheWriteFile(
        value = (char *)cupsArrayNext(pc->support_files))
     cupsFilePutConf(fp, "SupportFile", value);
 
+ /*
+  * 3D stuff...
+  */
+
+  if (pc->cups_3d)
+    cupsFilePutConf(fp, "3D", pc->cups_3d);
+
+  if (pc->cups_layer_order)
+    cupsFilePutConf(fp, "LayerOrder", pc->cups_layer_order);
+
+  if (pc->cups_accuracy[0] || pc->cups_accuracy[0] || pc->cups_accuracy[2])
+    cupsFilePrintf(fp, "Accuracy %d %d %d\n", pc->cups_accuracy[0], pc->cups_accuracy[1], pc->cups_accuracy[2]);
+
+  if (pc->cups_volume[0] || pc->cups_volume[0] || pc->cups_volume[2])
+    cupsFilePrintf(fp, "Volume %d %d %d\n", pc->cups_volume[0], pc->cups_volume[1], pc->cups_volume[2]);
+
+  for (m = (_pwg_material_t *)cupsArrayFirst(pc->materials);
+       m;
+       m = (_pwg_material_t *)cupsArrayNext(pc->materials))
+  {
+    cupsFilePrintf(fp, "Material %s \"%s\"", m->key, m->name);
+    for (i = 0; i < m->num_props; i ++)
+      cupsFilePrintf(fp, " %s=%s", m->props[i].name, m->props[i].value);
+    cupsFilePuts(fp, "\n");
+  }
+
  /*
   * IPP attributes, if any...
   */
@@ -3561,6 +3677,22 @@ pwg_free_finishings(
 }
 
 
+/*
+ * 'pwg_free_material()' - Free a material value.
+ */
+
+static void
+pwg_free_material(_pwg_material_t *m)  /* I - Material value */
+{
+  _cupsStrFree(m->key);
+  _cupsStrFree(m->name);
+
+  cupsFreeOptions(m->num_props, m->props);
+
+  free(m);
+}
+
+
 /*
  * 'pwg_ppdize_name()' - Convert an IPP keyword to a PPD keyword.
  */
@@ -3591,7 +3723,6 @@ pwg_ppdize_name(const char *ipp,  /* I - IPP keyword */
 }
 
 
-
 /*
  * 'pwg_ppdize_resolution()' - Convert PWG resolution values to PPD values.
  */
@@ -3680,5 +3811,5 @@ pwg_unppdize_name(const char *ppd,        /* I - PPD keyword */
 
 
 /*
- * End of "$Id: ppd-cache.c 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: ppd-cache.c 12733 2015-06-12 01:21:05Z msweet $".
  */
index f6f63294f6b6ac04a4baf01942bcf6c73a3c06db..126ae49c1b3c58d212f20ae001da0bef7427f23c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: ppd-private.h 12733 2015-06-12 01:21:05Z msweet $"
  *
  * Private PPD definitions for CUPS.
  *
@@ -109,6 +109,14 @@ typedef struct _pwg_finishings_s   /**** PWG finishings mapping data ****/
   cups_option_t                *options;       /* Options to apply */
 } _pwg_finishings_t;
 
+typedef struct _pwg_material_s         /**** PWG material mapping data ****/
+{
+  char         *key,                   /* material-key value */
+               *name;                  /* material-name value */
+  int          num_props;              /* Number of properties */
+  cups_option_t        *props;                 /* Material properties */
+} _pwg_material_t;
+
 struct _ppd_cache_s                    /**** PPD cache and PWG conversion data ****/
 {
   int          num_bins;               /* Number of output bins */
@@ -148,6 +156,11 @@ struct _ppd_cache_s                        /**** PPD cache and PWG conversion data ****/
   cups_array_t *mandatory;             /* cupsMandatory value */
   char         *charge_info_uri;       /* cupsChargeInfoURI value */
   cups_array_t *support_files;         /* Support files - ICC profiles, etc. */
+  char         *cups_3d,               /* cups3D value */
+               *cups_layer_order;      /* cupsLayerOrder value */
+  int          cups_accuracy[3];       /* cupsAccuracy value - x, y, and z in nanometers */
+  int          cups_volume[3];         /* cupsVolume value - x, y, and z in millimeters */
+  cups_array_t *materials;             /* cupsMaterial values */
 };
 
 
@@ -223,5 +236,5 @@ extern const char   *_pwgPageSizeForMedia(pwg_media_t *media,
 #endif /* !_CUPS_PPD_PRIVATE_H_ */
 
 /*
- * End of "$Id: ppd-private.h 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: ppd-private.h 12733 2015-06-12 01:21:05Z msweet $".
  */
index da78be36885c5946fb4866465958c546ae2ce9b1..7c0eb3bb908ec465c37922ce71478d1344aae927 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $"
+ * "$Id: usersys.c 12817 2015-07-30 15:45:46Z msweet $"
  *
  * User, system, and password routines for CUPS.
  *
@@ -68,6 +68,7 @@ typedef struct _cups_client_conf_s    /**** client.conf config data ****/
 static void    cups_finalize_client_conf(_cups_client_conf_t *cc);
 static void    cups_init_client_conf(_cups_client_conf_t *cc);
 static void    cups_read_client_conf(cups_file_t *fp, _cups_client_conf_t *cc);
+static void    cups_set_default_ipp_port(_cups_globals_t *cg);
 static void    cups_set_encryption(_cups_client_conf_t *cc, const char *value);
 #ifdef HAVE_GSSAPI
 static void    cups_set_gss_service_name(_cups_client_conf_t *cc, const char *value);
@@ -382,6 +383,9 @@ cupsSetServer(const char *server)   /* I - Server name */
       cg->ipp_port = atoi(port);
     }
 
+    if (!cg->ipp_port)
+      cups_set_default_ipp_port(cg);
+
     if (cg->server[0] == '/')
       strlcpy(cg->servername, "localhost", sizeof(cg->servername));
     else
@@ -392,6 +396,7 @@ cupsSetServer(const char *server)   /* I - Server name */
     cg->server[0]      = '\0';
     cg->servername[0]  = '\0';
     cg->server_version = 20;
+    cg->ipp_port       = 0;
   }
 
   if (cg->http)
@@ -908,17 +913,7 @@ _cupsSetDefaults(void)
     cupsSetServer(cc.server_name);
 
   if (!cg->ipp_port)
-  {
-    const char *ipp_port;              /* IPP_PORT environment variable */
-
-    if ((ipp_port = getenv("IPP_PORT")) != NULL)
-    {
-      if ((cg->ipp_port = atoi(ipp_port)) <= 0)
-        cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
-    }
-    else
-      cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
-  }
+    cups_set_default_ipp_port(cg);
 
   if (!cg->user[0])
     strlcpy(cg->user, cc.user, sizeof(cg->user));
@@ -1017,7 +1012,7 @@ cups_finalize_client_conf(
     struct stat        sockinfo;               /* Domain socket information */
 
     if (!stat(CUPS_DEFAULT_DOMAINSOCKET, &sockinfo) &&
-       (sockinfo.st_mode & S_IRWXO) == S_IRWXO)
+       (sockinfo.st_mode & (S_IROTH | S_IWOTH)) == (S_IROTH | S_IWOTH))
       cups_set_server_name(cc, CUPS_DEFAULT_DOMAINSOCKET);
     else
 #endif /* CUPS_DEFAULT_DOMAINSOCKET */
@@ -1150,6 +1145,26 @@ cups_read_client_conf(
 }
 
 
+/*
+ * 'cups_set_default_ipp_port()' - Set the default IPP port value.
+ */
+
+static void
+cups_set_default_ipp_port(
+    _cups_globals_t *cg)               /* I - Global data */
+{
+  const char   *ipp_port;              /* IPP_PORT environment variable */
+
+
+  if ((ipp_port = getenv("IPP_PORT")) != NULL)
+  {
+    if ((cg->ipp_port = atoi(ipp_port)) <= 0)
+      cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+  }
+  else
+    cg->ipp_port = CUPS_DEFAULT_IPP_PORT;
+}
+
 /*
  * 'cups_set_encryption()' - Set the Encryption value.
  */
@@ -1270,5 +1285,5 @@ cups_set_user(
 
 
 /*
- * End of "$Id: usersys.c 12647 2015-05-20 18:37:52Z msweet $".
+ * End of "$Id: usersys.c 12817 2015-07-30 15:45:46Z msweet $".
  */
index f378bffa7e16e5fd7737838c5488528844b17d23..c2ef877e2c18df3c4e87749e7865188db82b8ad6 100644 (file)
@@ -240,7 +240,8 @@ The following percent sequences are recognized:
     "%u" inserts the username.
 
 </pre>
-The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
+The default is the empty string, which disables page logging.
+The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
 <dt><a name="PassEnv"></a><b>PassEnv </b><i>variable </i>[ ... <i>variable </i>]
 <dd style="margin-left: 5.0em">Passes the specified environment variable(s) to child processes.
 <dt><a name="Policy"></a><b>&lt;Policy </b><i>name</i><b>> </b>... <b>&lt;/Policy></b>
@@ -588,7 +589,7 @@ Require authentication for accesses from outside the 10. network:
 <a href="man-subscriptions.conf.html?TOPIC=Man+Pages"><b>subscriptions.conf</b>(5),</a>
 CUPS Online Help (<a href="http://localhost:631/help">http://localhost:631/help</a>)
 <h2 class="title"><a name="COPYRIGHT">Copyright</a></h2>
-Copyright &copy; 2007-2014 by Apple Inc.
+Copyright &copy; 2007-2015 by Apple Inc.
 
 </body>
 </html>
index 4bbe7f0eefe0212d8123c047a0961b5eb371925b..d2a44acf9dcb3ab18cfee6eda3dd04676152f1cb 100644 (file)
@@ -14,7 +14,7 @@
 
 <H2 CLASS="title"><A NAME="OVERVIEW">Overview</A></H2>
 
-<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow linking to OpenSSL (which has a GPL-incompatible license) and for developers on Apple's operating systems to develop CUPS-based software until alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
+<P>CUPS is developed by Apple Inc. and distributed as open source software under a combination of GNU GPL2 and GNU LGPL2 licenses with exceptions to allow developers on Apple's operating systems to develop CUPS-based software under alternate license terms. Significant contributions to CUPS must be licensed to Apple using the <A HREF="https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf">Apple Contributor Agreement</A>.</P>
 
 <P>Apple releases updates to the CUPS software approximately every three months. Each release has a version number consisting of the major version (currently 1), minor version (currently 6), and patch version (starting at 0) separated by the period, for example "1.6.0". Releases where only the patch version number changes will contain only bug fixes to the previous release, for example "1.6.1" includes bug fixes for the "1.6.0" release. New features require the major or minor version numbers to change, for example "1.6.0" release contains new features compared to the "1.5.3" release. Multiple beta and "candidate" releases generally precede each new feature release, for example "1.5b1", "1.5b2", and "1.5rc1" preceded the "1.5.0" release. Finally, we also post regular Subversion snapshot releases, for example "1.6svn-r10486", which represent a snapshot of the development for the next feature release.</P>
 
index e062757a13c0963f444cfaeffdec68eddc3d43f5..4331365a3d2ece8ed03f2ef787ce9620088be704 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: error.c 12747 2015-06-24 15:55:05Z msweet $"
  *
  * Raster error handling for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -56,6 +56,8 @@ _cupsRasterAddError(const char *f,    /* I - Printf-style error message */
   ssize_t      bytes;                  /* Bytes in message string */
 
 
+  DEBUG_printf(("_cupsRasterAddError(f=\"%s\", ...)", f));
+
   va_start(ap, f);
   bytes = vsnprintf(s, sizeof(s), f, ap);
   va_end(ap);
@@ -63,6 +65,8 @@ _cupsRasterAddError(const char *f,    /* I - Printf-style error message */
   if (bytes <= 0)
     return;
 
+  DEBUG_printf(("1_cupsRasterAddError: %s", s));
+
   bytes ++;
 
   if ((size_t)bytes >= sizeof(s))
@@ -185,7 +189,7 @@ get_error_buffer(void)
   * Initialize the global data exactly once...
   */
 
-  DEBUG_puts("get_error_buffer()");
+  DEBUG_puts("3get_error_buffer()");
 
   pthread_once(&raster_key_once, raster_init);
 
@@ -196,7 +200,7 @@ get_error_buffer(void)
   if ((buf = (_cups_raster_error_t *)pthread_getspecific(raster_key))
           == NULL)
   {
-    DEBUG_puts("get_error_buffer: allocating memory for thread...");
+    DEBUG_puts("4get_error_buffer: allocating memory for thread.");
 
    /*
     * No, allocate memory as set the pointer for the key...
@@ -205,7 +209,7 @@ get_error_buffer(void)
     buf = calloc(1, sizeof(_cups_raster_error_t));
     pthread_setspecific(raster_key, buf);
 
-    DEBUG_printf(("    buf=%p\n", buf));
+    DEBUG_printf(("4get_error_buffer: buf=%p", buf));
   }
 
  /*
@@ -225,8 +229,7 @@ raster_init(void)
 {
   pthread_key_create(&raster_key, raster_destructor);
 
-  DEBUG_printf(("raster_init(): raster_key=%x(%u)\n", (unsigned)raster_key,
-                (unsigned)raster_key));
+  DEBUG_printf(("3raster_init(): raster_key=%x(%u)", (unsigned)raster_key, (unsigned)raster_key));
 }
 
 
@@ -241,7 +244,7 @@ raster_destructor(void *value)              /* I - Data to free */
                                        /* Error buffer */
 
 
-  DEBUG_printf(("raster_destructor(value=%p)\n", value));
+  DEBUG_printf(("3raster_destructor(value=%p)", value));
 
   if (buf->start)
     free(buf->start);
@@ -272,5 +275,5 @@ get_error_buffer(void)
 
 
 /*
- * End of "$Id: error.c 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: error.c 12747 2015-06-24 15:55:05Z msweet $".
  */
index f784fa09072204db3a4193484442fb03a3837416..624a2a777f7d4064702177a09459493e9a8b915b 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $"
+ * "$Id: interpret.c 12746 2015-06-24 13:28:36Z msweet $"
  *
  * PPD command interpreter for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1993-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -91,8 +91,8 @@ static int            setpagedevice(_cups_ps_stack_t *st,
                                        cups_page_header2_t *h,
                                        int *preferred_bits);
 #ifdef DEBUG
-static void            DEBUG_object(_cups_ps_obj_t *obj);
-static void            DEBUG_stack(_cups_ps_stack_t *st);
+static void            DEBUG_object(const char *prefix, _cups_ps_obj_t *obj);
+static void            DEBUG_stack(const char *prefix, _cups_ps_stack_t *st);
 #endif /* DEBUG */
 
 
@@ -547,8 +547,8 @@ _cupsRasterExecPS(
   while ((obj = scan_ps(st, &codeptr)) != NULL)
   {
 #ifdef DEBUG
-    DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)\n", st->num_objs));
-    DEBUG_object(obj);
+    DEBUG_printf(("_cupsRasterExecPS: Stack (%d objects)", st->num_objs));
+    DEBUG_object("_cupsRasterExecPS", obj);
 #endif /* DEBUG */
 
     switch (obj->type)
@@ -561,11 +561,11 @@ _cupsRasterExecPS(
           pop_stack(st);
 
          if (cleartomark_stack(st))
-           _cupsRasterAddError("cleartomark: Stack underflow!\n");
+           _cupsRasterAddError("cleartomark: Stack underflow.\n");
 
 #ifdef DEBUG
-          DEBUG_puts("    dup: ");
-         DEBUG_stack(st);
+          DEBUG_puts("1_cupsRasterExecPS:    dup");
+         DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           break;
 
@@ -577,7 +577,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
             DEBUG_puts("_cupsRasterExecPS: copy");
-           DEBUG_stack(st);
+           DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           }
           break;
@@ -588,7 +588,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: dup");
-         DEBUG_stack(st);
+         DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           break;
 
@@ -600,7 +600,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
             DEBUG_puts("_cupsRasterExecPS: index");
-           DEBUG_stack(st);
+           DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           }
           break;
@@ -611,7 +611,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: pop");
-         DEBUG_stack(st);
+         DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           break;
 
@@ -630,7 +630,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
               DEBUG_puts("_cupsRasterExecPS: roll");
-             DEBUG_stack(st);
+             DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
             }
          }
@@ -642,7 +642,7 @@ _cupsRasterExecPS(
 
 #ifdef DEBUG
           DEBUG_puts("_cupsRasterExecPS: setpagedevice");
-         DEBUG_stack(st);
+         DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
           break;
 
@@ -653,10 +653,9 @@ _cupsRasterExecPS(
          break;
 
       case CUPS_PS_OTHER :
-          _cupsRasterAddError("Unknown operator \"%s\"!\n", obj->value.other);
+          _cupsRasterAddError("Unknown operator \"%s\".\n", obj->value.other);
          error = 1;
-          DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\"!\n",
-                       obj->value.other));
+          DEBUG_printf(("_cupsRasterExecPS: Unknown operator \"%s\".", obj->value.other));
           break;
     }
 
@@ -675,8 +674,8 @@ _cupsRasterExecPS(
     error_stack(st, "Stack not empty:");
 
 #ifdef DEBUG
-    DEBUG_puts("_cupsRasterExecPS: Stack not empty:");
-    DEBUG_stack(st);
+    DEBUG_puts("_cupsRasterExecPS: Stack not empty");
+    DEBUG_stack("_cupsRasterExecPS", st);
 #endif /* DEBUG */
 
     delete_stack(st);
@@ -977,7 +976,7 @@ roll_stack(_cups_ps_stack_t *st,    /* I - Stack */
   int                  n;              /* Index into array */
 
 
-  DEBUG_printf(("    roll_stack(st=%p, s=%d, c=%d)\n", st, s, c));
+  DEBUG_printf(("3roll_stack(st=%p, s=%d, c=%d)", st, s, c));
 
  /*
   * Range check input...
@@ -1435,7 +1434,7 @@ setpagedevice(
   * Now pull /name and value pairs from the dictionary...
   */
 
-  DEBUG_puts("setpagedevice: Dictionary:");
+  DEBUG_puts("3setpagedevice: Dictionary:");
 
   for (obj ++; obj < end; obj ++)
   {
@@ -1450,8 +1449,8 @@ setpagedevice(
     obj ++;
 
 #ifdef DEBUG
-    DEBUG_printf(("setpagedevice: /%s ", name));
-    DEBUG_object(obj);
+    DEBUG_printf(("4setpagedevice: /%s ", name));
+    DEBUG_object("setpagedevice", obj);
 #endif /* DEBUG */
 
    /*
@@ -1601,7 +1600,7 @@ setpagedevice(
       * Ignore unknown name+value...
       */
 
-      DEBUG_printf(("    Unknown name (\"%s\") or value...\n", name));
+      DEBUG_printf(("4setpagedevice: Unknown name (\"%s\") or value...\n", name));
 
       while (obj[1].type != CUPS_PS_NAME && obj < end)
         obj ++;
@@ -1618,91 +1617,92 @@ setpagedevice(
  */
 
 static void
-DEBUG_object(_cups_ps_obj_t *obj)      /* I - Object to print */
+DEBUG_object(const char *prefix,       /* I - Prefix string */
+             _cups_ps_obj_t *obj)      /* I - Object to print */
 {
   switch (obj->type)
   {
     case CUPS_PS_NAME :
-       DEBUG_printf(("/%s\n", obj->value.name));
+       DEBUG_printf(("4%s: /%s\n", prefix, obj->value.name));
        break;
 
     case CUPS_PS_NUMBER :
-       DEBUG_printf(("%g\n", obj->value.number));
+       DEBUG_printf(("4%s: %g\n", prefix, obj->value.number));
        break;
 
     case CUPS_PS_STRING :
-       DEBUG_printf(("(%s)\n", obj->value.string));
+       DEBUG_printf(("4%s: (%s)\n", prefix, obj->value.string));
        break;
 
     case CUPS_PS_BOOLEAN :
        if (obj->value.boolean)
-         DEBUG_puts("true");
+         DEBUG_printf(("4%s: true", prefix));
        else
-         DEBUG_puts("false");
+         DEBUG_printf(("4%s: false", prefix));
        break;
 
     case CUPS_PS_NULL :
-       DEBUG_puts("null");
+       DEBUG_printf(("4%s: null", prefix));
        break;
 
     case CUPS_PS_START_ARRAY :
-       DEBUG_puts("[");
+       DEBUG_printf(("4%s: [", prefix));
        break;
 
     case CUPS_PS_END_ARRAY :
-       DEBUG_puts("]");
+       DEBUG_printf(("4%s: ]", prefix));
        break;
 
     case CUPS_PS_START_DICT :
-       DEBUG_puts("<<");
+       DEBUG_printf(("4%s: <<", prefix));
        break;
 
     case CUPS_PS_END_DICT :
-       DEBUG_puts(">>");
+       DEBUG_printf(("4%s: >>", prefix));
        break;
 
     case CUPS_PS_START_PROC :
-       DEBUG_puts("{");
+       DEBUG_printf(("4%s: {", prefix));
        break;
 
     case CUPS_PS_END_PROC :
-       DEBUG_puts("}");
+       DEBUG_printf(("4%s: }", prefix));
        break;
 
     case CUPS_PS_CLEARTOMARK :
-       DEBUG_puts("--cleartomark--");
+       DEBUG_printf(("4%s: --cleartomark--", prefix));
         break;
 
     case CUPS_PS_COPY :
-       DEBUG_puts("--copy--");
+       DEBUG_printf(("4%s: --copy--", prefix));
         break;
 
     case CUPS_PS_DUP :
-       DEBUG_puts("--dup--");
+       DEBUG_printf(("4%s: --dup--", prefix));
         break;
 
     case CUPS_PS_INDEX :
-       DEBUG_puts("--index--");
+       DEBUG_printf(("4%s: --index--", prefix));
         break;
 
     case CUPS_PS_POP :
-       DEBUG_puts("--pop--");
+       DEBUG_printf(("4%s: --pop--", prefix));
         break;
 
     case CUPS_PS_ROLL :
-       DEBUG_puts("--roll--");
+       DEBUG_printf(("4%s: --roll--", prefix));
         break;
 
     case CUPS_PS_SETPAGEDEVICE :
-       DEBUG_puts("--setpagedevice--");
+       DEBUG_printf(("4%s: --setpagedevice--", prefix));
         break;
 
     case CUPS_PS_STOPPED :
-       DEBUG_puts("--stopped--");
+       DEBUG_printf(("4%s: --stopped--", prefix));
         break;
 
     case CUPS_PS_OTHER :
-       DEBUG_printf(("--%s--\n", obj->value.other));
+       DEBUG_printf(("4%s: --%s--", prefix, obj->value.other));
        break;
   }
 }
@@ -1713,18 +1713,19 @@ DEBUG_object(_cups_ps_obj_t *obj)       /* I - Object to print */
  */
 
 static void
-DEBUG_stack(_cups_ps_stack_t *st)      /* I - Stack */
+DEBUG_stack(const char       *prefix,  /* I - Prefix string */
+            _cups_ps_stack_t *st)      /* I - Stack */
 {
   int                  c;              /* Looping var */
   _cups_ps_obj_t       *obj;           /* Current object on stack */
 
 
   for (obj = st->objs, c = st->num_objs; c > 0; c --, obj ++)
-    DEBUG_object(obj);
+    DEBUG_object(prefix, obj);
 }
 #endif /* DEBUG */
 
 
 /*
- * End of "$Id: interpret.c 11848 2014-05-07 00:26:44Z msweet $".
+ * End of "$Id: interpret.c 12746 2015-06-24 13:28:36Z msweet $".
  */
index f36ae1a8176adcbf5534e24a332fbf61e9797eaa..ef1f224541392a7dec9a22c6785078b4e40de8e6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $"
+ * "$Id: raster.c 12747 2015-06-24 15:55:05Z msweet $"
  *
  * Raster file routines for CUPS.
  *
@@ -50,6 +50,9 @@ struct _cups_raster_s                 /**** Raster stream data ****/
                        *bufptr,        /* Current (read) position in buffer */
                        *bufend;        /* End of current (read) buffer */
   size_t               bufsize;        /* Buffer size */
+#ifdef DEBUG
+  size_t               iocount;        /* Number of bytes read/written */
+#endif /* DEBUG */
 };
 
 
@@ -193,7 +196,7 @@ cupsRasterOpenIO(
         r->sync == CUPS_RASTER_REVSYNCv2)
       r->swapped = 1;
 
-    DEBUG_printf(("r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
+    DEBUG_printf(("1cupsRasterOpenIO: r->swapped=%d, r->sync=%08x\n", r->swapped, r->sync));
   }
   else
   {
@@ -287,6 +290,8 @@ cupsRasterReadHeader2(
   * Get the raster header...
   */
 
+  DEBUG_printf(("cupsRasterReadHeader2(r=%p, h=%p)", r, h));
+
   if (!cups_raster_read_header(r))
   {
     memset(h, 0, sizeof(cups_page_header2_t));
@@ -325,9 +330,16 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
   unsigned     count;                  /* Repetition count */
 
 
+  DEBUG_printf(("cupsRasterReadPixels(r=%p, p=%p, len=%u)", r, p, len));
+
   if (r == NULL || r->mode != CUPS_RASTER_READ || r->remaining == 0 ||
       r->header.cupsBytesPerLine == 0)
+  {
+    DEBUG_puts("1cupsRasterReadPixels: Returning 0.");
     return (0);
+  }
+
+  DEBUG_printf(("1cupsRasterReadPixels: compressed=%d, remaining=%u", r->compressed, r->remaining));
 
   if (!r->compressed)
   {
@@ -338,7 +350,10 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
     r->remaining -= len / r->header.cupsBytesPerLine;
 
     if (cups_raster_io(r, p, len) < (ssize_t)len)
+    {
+      DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
       return (0);
+    }
 
    /*
     * Swap bytes as needed...
@@ -354,6 +369,8 @@ cupsRasterReadPixels(cups_raster_t *r,      /* I - Raster stream */
     * Return...
     */
 
+    DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
+
     return (len);
   }
 
@@ -382,7 +399,10 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
       */
 
       if (!cups_raster_read(r, &byte, 1))
+      {
+       DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
        return (0);
+      }
 
       r->count = (unsigned)byte + 1;
 
@@ -399,7 +419,10 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
        */
 
         if (!cups_raster_read(r, &byte, 1))
+       {
+         DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
          return (0);
+       }
 
        if (byte & 128)
        {
@@ -413,7 +436,10 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
            count = (unsigned)bytes;
 
           if (!cups_raster_read(r, temp, count))
+         {
+           DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
            return (0);
+         }
 
          temp  += count;
          bytes -= count;
@@ -434,7 +460,10 @@ cupsRasterReadPixels(cups_raster_t *r,     /* I - Raster stream */
          bytes -= count;
 
           if (!cups_raster_read(r, temp, r->bpp))
+         {
+           DEBUG_puts("1cupsRasterReadPixels: Read error, returning 0.");
            return (0);
+         }
 
          temp  += r->bpp;
          count -= r->bpp;
@@ -506,6 +535,8 @@ cupsRasterReadPixels(cups_raster_t *r,      /* I - Raster stream */
     p         += bytes;
   }
 
+  DEBUG_printf(("1cupsRasterReadPixels: Returning %u", len));
+
   return (len);
 }
 
@@ -795,10 +826,15 @@ cupsRasterWritePixels(cups_raster_t *r,   /* I - Raster stream */
       * Write the byte-swapped buffer...
       */
 
-      return ((unsigned)cups_raster_io(r, r->buffer, len));
+      bytes = cups_raster_io(r, r->buffer, len);
     }
     else
-      return ((unsigned)cups_raster_io(r, p, len));
+      bytes = cups_raster_io(r, p, len);
+
+    if (bytes < len)
+      return (0);
+    else
+      return (len);
   }
 
  /*
@@ -822,7 +858,7 @@ cupsRasterWritePixels(cups_raster_t *r,     /* I - Raster stream */
 
       if (memcmp(p, r->pcurrent, (size_t)bytes))
       {
-        if (!cups_raster_write(r, r->pixels))
+        if (cups_raster_write(r, r->pixels) <= 0)
          return (0);
 
        r->count = 0;
@@ -851,10 +887,15 @@ cupsRasterWritePixels(cups_raster_t *r,   /* I - Raster stream */
          r->remaining --;
 
          if (r->remaining == 0)
-           return ((unsigned)cups_raster_write(r, r->pixels));
+         {
+           if (cups_raster_write(r, r->pixels) <= 0)
+             return (0);
+           else
+             return (len);
+         }
          else if (r->count == 256)
          {
-           if (cups_raster_write(r, r->pixels) == 0)
+           if (cups_raster_write(r, r->pixels) <= 0)
              return (0);
 
            r->count = 0;
@@ -891,7 +932,10 @@ cupsRasterWritePixels(cups_raster_t *r,    /* I - Raster stream */
        r->remaining --;
 
        if (r->remaining == 0)
-         return ((unsigned)cups_raster_write(r, r->pixels));
+       {
+         if (cups_raster_write(r, r->pixels) <= 0)
+           return (0);
+       }
       }
     }
   }
@@ -911,9 +955,13 @@ cups_raster_read_header(
   size_t       len;                    /* Length for read/swap */
 
 
+  DEBUG_printf(("3cups_raster_read_header(r=%p), r->mode=%d", r, r ? r->mode : 0));
+
   if (r == NULL || r->mode != CUPS_RASTER_READ)
     return (0);
 
+  DEBUG_printf(("4cups_raster_read_header: r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
+
  /*
   * Get the length of the raster header...
   */
@@ -923,6 +971,8 @@ cups_raster_read_header(
   else
     len = sizeof(cups_page_header2_t);
 
+  DEBUG_printf(("4cups_raster_read_header: len=%d", (int)len));
+
  /*
   * Read the header...
   */
@@ -930,7 +980,10 @@ cups_raster_read_header(
   memset(&(r->header), 0, sizeof(r->header));
 
   if (cups_raster_read(r, (unsigned char *)&(r->header), len) < (ssize_t)len)
+  {
+    DEBUG_printf(("4cups_raster_read_header: EOF, r->iocount=" CUPS_LLFMT, CUPS_LLCAST r->iocount));
     return (0);
+  }
 
  /*
   * Swap bytes as needed...
@@ -942,21 +995,19 @@ cups_raster_read_header(
                temp;                   /* Temporary copy */
 
 
-    DEBUG_puts("Swapping header bytes...");
+    DEBUG_puts("4cups_raster_read_header: Swapping header bytes.");
 
     for (len = 81, s = &(r->header.AdvanceDistance);
         len > 0;
         len --, s ++)
     {
-      DEBUG_printf(("%08x =>", *s));
-
       temp = *s;
       *s   = ((temp & 0xff) << 24) |
              ((temp & 0xff00) << 8) |
              ((temp & 0xff0000) >> 8) |
              ((temp & 0xff000000) >> 24);
 
-      DEBUG_printf((" %08x\n", *s));
+      DEBUG_printf(("4cups_raster_read_header: %08x => %08x", temp, *s));
     }
   }
 
@@ -966,6 +1017,8 @@ cups_raster_read_header(
 
   cups_raster_update(r);
 
+  DEBUG_printf(("4cups_raster_read_header: cupsBitsPerPixel=%u, cupsBitsPerColor=%u, cupsBytesPerLine=%u, cupsWidth=%u, cupsHeight=%u, r->bpp=%d", r->header.cupsBitsPerPixel, r->header.cupsBitsPerColor, r->header.cupsBytesPerLine, r->header.cupsWidth, r->header.cupsHeight, r->bpp));
+
   return (r->header.cupsBitsPerPixel != 0 && r->header.cupsBitsPerColor != 0 && r->header.cupsBytesPerLine != 0 && r->header.cupsHeight != 0 && (r->header.cupsBytesPerLine % r->bpp) == 0);
 }
 
@@ -983,20 +1036,31 @@ cups_raster_io(cups_raster_t *r, /* I - Raster stream */
                total;                  /* Total bytes read/written */
 
 
-  DEBUG_printf(("4cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
+  DEBUG_printf(("5cups_raster_io(r=%p, buf=%p, bytes=" CUPS_LLFMT ")", r, buf, CUPS_LLCAST bytes));
 
   for (total = 0; total < (ssize_t)bytes; total += count, buf += count)
   {
     count = (*r->iocb)(r->ctx, buf, bytes - (size_t)total);
 
-    DEBUG_printf(("5cups_raster_io: count=%d, total=%d", (int)count,
-                  (int)total));
+    DEBUG_printf(("6cups_raster_io: count=%d, total=%d", (int)count, (int)total));
     if (count == 0)
+    {
+      DEBUG_puts("6cups_raster_io: Returning 0.");
       return (0);
+    }
     else if (count < 0)
+    {
+      DEBUG_puts("6cups_raster_io: Returning -1 on error.");
       return (-1);
+    }
+
+#ifdef DEBUG
+    r->iocount += (size_t)count;
+#endif /* DEBUG */
   }
 
+  DEBUG_printf(("6cups_raster_io: Returning " CUPS_LLFMT ".", CUPS_LLCAST total));
+
   return (total);
 }
 
@@ -1015,7 +1079,7 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
                total;                  /* Total bytes read */
 
 
-  DEBUG_printf(("cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
+  DEBUG_printf(("5cups_raster_read(r=%p, buf=%p, bytes=" CUPS_LLFMT ")\n", r, buf, CUPS_LLCAST bytes));
 
   if (!r->compressed)
     return (cups_raster_io(r, buf, bytes));
@@ -1025,6 +1089,8 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
   */
 
   count = (ssize_t)(2 * r->header.cupsBytesPerLine);
+  if (count < 65536)
+    count = 65536;
 
   if ((size_t)count > r->bufsize)
   {
@@ -1057,7 +1123,7 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
   {
     count = (ssize_t)bytes - total;
 
-    DEBUG_printf(("count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p...\n", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
+    DEBUG_printf(("6cups_raster_read: count=" CUPS_LLFMT ", remaining=" CUPS_LLFMT ", buf=%p, bufptr=%p, bufend=%p", CUPS_LLCAST count, CUPS_LLCAST remaining, buf, r->bufptr, r->bufend));
 
     if (remaining == 0)
     {
@@ -1073,6 +1139,10 @@ cups_raster_read(cups_raster_t *r,       /* I - Raster stream */
 
        r->bufptr = r->buffer;
        r->bufend = r->buffer + remaining;
+
+#ifdef DEBUG
+        r->iocount += (size_t)remaining;
+#endif /* DEBUG */
       }
       else
       {
@@ -1085,6 +1155,10 @@ cups_raster_read(cups_raster_t *r,       /* I - Raster stream */
        if (count <= 0)
          return (0);
 
+#ifdef DEBUG
+        r->iocount += (size_t)count;
+#endif /* DEBUG */
+
        continue;
       }
     }
@@ -1134,6 +1208,8 @@ cups_raster_read(cups_raster_t *r,        /* I - Raster stream */
     }
   }
 
+  DEBUG_printf(("6cups_raster_read: Returning %ld", (long)total));
+
   return (total);
 }
 
@@ -1283,15 +1359,15 @@ cups_raster_write(
                        count;          /* Count */
 
 
-  DEBUG_printf(("cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
+  DEBUG_printf(("3cups_raster_write(r=%p, pixels=%p)\n", r, pixels));
 
  /*
   * Allocate a write buffer as needed...
   */
 
   count = r->header.cupsBytesPerLine * 2;
-  if (count < 3)
-    count = 3;
+  if (count < 65536)
+    count = 65536;
 
   if ((size_t)count > r->bufsize)
   {
@@ -1301,7 +1377,10 @@ cups_raster_write(
       wptr = malloc(count);
 
     if (!wptr)
+    {
+      DEBUG_printf(("4cups_raster_write: Unable to allocate " CUPS_LLFMT " bytes for raster buffer: %s", CUPS_LLCAST count, strerror(errno)));
       return (-1);
+    }
 
     r->buffer  = wptr;
     r->bufsize = count;
@@ -1374,6 +1453,8 @@ cups_raster_write(
     }
   }
 
+  DEBUG_printf(("4cups_raster_write: Writing " CUPS_LLFMT " bytes.", CUPS_LLCAST (wptr - r->buffer)));
+
   return (cups_raster_io(r, r->buffer, (size_t)(wptr - r->buffer)));
 }
 
@@ -1398,7 +1479,12 @@ cups_read_fd(void          *ctx, /* I - File descriptor as pointer */
   while ((count = read(fd, buf, bytes)) < 0)
 #endif /* WIN32 */
     if (errno != EINTR && errno != EAGAIN)
+    {
+      DEBUG_printf(("4cups_read_fd: %s", strerror(errno)));
       return (-1);
+    }
+
+  DEBUG_printf(("4cups_read_fd: Returning %d bytes.", (int)count));
 
   return (count);
 }
@@ -1450,12 +1536,15 @@ cups_write_fd(void          *ctx,       /* I - File descriptor pointer */
   while ((count = write(fd, buf, bytes)) < 0)
 #endif /* WIN32 */
     if (errno != EINTR && errno != EAGAIN)
+    {
+      DEBUG_printf(("4cups_write_fd: %s", strerror(errno)));
       return (-1);
+    }
 
   return (count);
 }
 
 
 /*
- * End of "$Id: raster.c 12678 2015-05-28 19:09:48Z msweet $".
+ * End of "$Id: raster.c 12747 2015-06-24 15:55:05Z msweet $".
  */
index 2e4d324a8541f09d6dac6e6c6af799ebcbde1434..b2220b269e39fba95bf1bcf422bb8f6143fbd574 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: testraster.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: testraster.c 12746 2015-06-24 13:28:36Z msweet $"
  *
  * Raster test program routines for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2007 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -496,6 +496,8 @@ do_ras_file(const char *filename)   /* I - Filename */
     free(data);
   }
 
+  printf("EOF at %ld\n", (long)lseek(fd, SEEK_CUR, 0));
+
   cupsRasterClose(ras);
   close(fd);
 
@@ -1064,5 +1066,5 @@ print_changes(
 
 
 /*
- * End of "$Id: testraster.c 11558 2014-02-06 18:33:34Z msweet $".
+ * End of "$Id: testraster.c 12746 2015-06-24 13:28:36Z msweet $".
  */
index d7d2101e866bab1942b969642840f045b07bb740..e6c5beb51af32529eee1598881e8621d63e16367 100644 (file)
@@ -30,7 +30,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1785,7 +1785,7 @@ msgstr ""
 msgid "%s accepting requests since %s"
 msgstr ""
 
-#: scheduler/ipp.c:9984
+#: scheduler/ipp.c:9986
 #, c-format
 msgid "%s cannot be changed."
 msgstr ""
@@ -3264,7 +3264,7 @@ msgstr ""
 msgid "B9"
 msgstr ""
 
-#: scheduler/ipp.c:10929
+#: scheduler/ipp.c:10931
 #, c-format
 msgid "Bad 'document-format' value \"%s\"."
 msgstr ""
@@ -3333,12 +3333,12 @@ msgstr ""
 msgid "Bad device-uri scheme \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8141 scheduler/ipp.c:8159 scheduler/ipp.c:9385
+#: scheduler/ipp.c:8143 scheduler/ipp.c:8161 scheduler/ipp.c:9387
 #, c-format
 msgid "Bad document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9403
+#: scheduler/ipp.c:9405
 #, c-format
 msgid "Bad document-format-default \"%s\"."
 msgstr ""
@@ -3360,7 +3360,7 @@ msgstr ""
 msgid "Bad job-name value: Wrong type or count."
 msgstr ""
 
-#: scheduler/ipp.c:9999
+#: scheduler/ipp.c:10001
 msgid "Bad job-priority value."
 msgstr ""
 
@@ -3373,24 +3373,24 @@ msgstr ""
 msgid "Bad job-sheets value type."
 msgstr ""
 
-#: scheduler/ipp.c:10029
+#: scheduler/ipp.c:10031
 msgid "Bad job-state value."
 msgstr ""
 
-#: scheduler/ipp.c:2970 scheduler/ipp.c:3430 scheduler/ipp.c:5935
-#: scheduler/ipp.c:6082 scheduler/ipp.c:7570 scheduler/ipp.c:7839
-#: scheduler/ipp.c:8703 scheduler/ipp.c:8927 scheduler/ipp.c:9279
-#: scheduler/ipp.c:9892
+#: scheduler/ipp.c:2970 scheduler/ipp.c:3432 scheduler/ipp.c:5937
+#: scheduler/ipp.c:6084 scheduler/ipp.c:7572 scheduler/ipp.c:7841
+#: scheduler/ipp.c:8705 scheduler/ipp.c:8929 scheduler/ipp.c:9281
+#: scheduler/ipp.c:9894
 #, c-format
 msgid "Bad job-uri \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:2018 scheduler/ipp.c:5473
+#: scheduler/ipp.c:2018 scheduler/ipp.c:5475
 #, c-format
 msgid "Bad notify-pull-method \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:1982 scheduler/ipp.c:5437
+#: scheduler/ipp.c:1982 scheduler/ipp.c:5439
 #, c-format
 msgid "Bad notify-recipient-uri \"%s\"."
 msgstr ""
@@ -3495,7 +3495,7 @@ msgstr ""
 msgid "Cancel RSS Subscription"
 msgstr ""
 
-#: backend/ipp.c:2205
+#: backend/ipp.c:2206
 msgid "Canceling print job."
 msgstr ""
 
@@ -3512,7 +3512,7 @@ msgstr ""
 msgid "Change Settings"
 msgstr ""
 
-#: scheduler/ipp.c:2030 scheduler/ipp.c:5485
+#: scheduler/ipp.c:2030 scheduler/ipp.c:5487
 #, c-format
 msgid "Character set \"%s\" not supported."
 msgstr ""
@@ -3525,7 +3525,7 @@ msgstr ""
 msgid "Clean Print Heads"
 msgstr ""
 
-#: scheduler/ipp.c:3882
+#: scheduler/ipp.c:3884
 msgid "Close-Job doesn't support the job-uri attribute."
 msgstr ""
 
@@ -3669,7 +3669,7 @@ msgstr ""
 msgid "Disabled"
 msgstr ""
 
-#: scheduler/ipp.c:5984
+#: scheduler/ipp.c:5986
 #, c-format
 msgid "Document #%d does not exist in job #%d."
 msgstr ""
@@ -3713,7 +3713,7 @@ msgstr ""
 msgid "English"
 msgstr ""
 
-#: scheduler/client.c:2219
+#: scheduler/client.c:2226
 msgid "Enter your username and password or the root username and password to access this page. If you are using Kerberos authentication, make sure you have a valid Kerberos ticket."
 msgstr ""
 
@@ -4096,10 +4096,10 @@ msgstr ""
 msgid "Glossy Paper"
 msgstr ""
 
-#: scheduler/ipp.c:2948 scheduler/ipp.c:3356 scheduler/ipp.c:3894
-#: scheduler/ipp.c:5913 scheduler/ipp.c:6060 scheduler/ipp.c:7547
-#: scheduler/ipp.c:8681 scheduler/ipp.c:8905 scheduler/ipp.c:9257
-#: scheduler/ipp.c:9870
+#: scheduler/ipp.c:2948 scheduler/ipp.c:3358 scheduler/ipp.c:3896
+#: scheduler/ipp.c:5915 scheduler/ipp.c:6062 scheduler/ipp.c:7549
+#: scheduler/ipp.c:8683 scheduler/ipp.c:8907 scheduler/ipp.c:9259
+#: scheduler/ipp.c:9872
 msgid "Got a printer-uri attribute but no job-id."
 msgstr ""
 
@@ -4344,42 +4344,42 @@ msgstr ""
 msgid "JIS B9"
 msgstr ""
 
-#: scheduler/ipp.c:8977
+#: scheduler/ipp.c:8979
 #, c-format
 msgid "Job #%d cannot be restarted - no files."
 msgstr ""
 
 #: scheduler/ipp.c:2988 scheduler/ipp.c:3222 scheduler/ipp.c:3281
-#: scheduler/ipp.c:3458 scheduler/ipp.c:3904 scheduler/ipp.c:5571
-#: scheduler/ipp.c:5953 scheduler/ipp.c:6100 scheduler/ipp.c:6438
-#: scheduler/ipp.c:7394 scheduler/ipp.c:7416 scheduler/ipp.c:7588
-#: scheduler/ipp.c:7813 scheduler/ipp.c:7856 scheduler/ipp.c:8721
-#: scheduler/ipp.c:8945 scheduler/ipp.c:9297 scheduler/ipp.c:9910
+#: scheduler/ipp.c:3460 scheduler/ipp.c:3906 scheduler/ipp.c:5573
+#: scheduler/ipp.c:5955 scheduler/ipp.c:6102 scheduler/ipp.c:6440
+#: scheduler/ipp.c:7396 scheduler/ipp.c:7418 scheduler/ipp.c:7590
+#: scheduler/ipp.c:7815 scheduler/ipp.c:7858 scheduler/ipp.c:8723
+#: scheduler/ipp.c:8947 scheduler/ipp.c:9299 scheduler/ipp.c:9912
 #, c-format
 msgid "Job #%d does not exist."
 msgstr ""
 
-#: scheduler/ipp.c:3490
+#: scheduler/ipp.c:3492
 #, c-format
 msgid "Job #%d is already aborted - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3484
+#: scheduler/ipp.c:3486
 #, c-format
 msgid "Job #%d is already canceled - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:3496
+#: scheduler/ipp.c:3498
 #, c-format
 msgid "Job #%d is already completed - can't cancel."
 msgstr ""
 
-#: scheduler/ipp.c:7614 scheduler/ipp.c:7898 scheduler/ipp.c:9925
+#: scheduler/ipp.c:7616 scheduler/ipp.c:7900 scheduler/ipp.c:9927
 #, c-format
 msgid "Job #%d is finished and cannot be altered."
 msgstr ""
 
-#: scheduler/ipp.c:8959
+#: scheduler/ipp.c:8961
 #, c-format
 msgid "Job #%d is not complete."
 msgstr ""
@@ -4389,28 +4389,28 @@ msgstr ""
 msgid "Job #%d is not held for authentication."
 msgstr ""
 
-#: scheduler/ipp.c:8735
+#: scheduler/ipp.c:8737
 #, c-format
 msgid "Job #%d is not held."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1035
+#: cgi-bin/ipp-var.c:1038
 msgid "Job Completed"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1033
+#: cgi-bin/ipp-var.c:1036
 msgid "Job Created"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1039
+#: cgi-bin/ipp-var.c:1042
 msgid "Job Options Changed"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1037
+#: cgi-bin/ipp-var.c:1040
 msgid "Job Stopped"
 msgstr ""
 
-#: scheduler/ipp.c:10007
+#: scheduler/ipp.c:10009
 msgid "Job is completed and cannot be changed."
 msgstr ""
 
@@ -4418,11 +4418,11 @@ msgstr ""
 msgid "Job operation failed"
 msgstr ""
 
-#: scheduler/ipp.c:10043 scheduler/ipp.c:10060 scheduler/ipp.c:10071
+#: scheduler/ipp.c:10045 scheduler/ipp.c:10062 scheduler/ipp.c:10073
 msgid "Job state cannot be changed."
 msgstr ""
 
-#: scheduler/ipp.c:8825
+#: scheduler/ipp.c:8827
 msgid "Job subscriptions cannot be renewed."
 msgstr ""
 
@@ -4442,7 +4442,7 @@ msgstr ""
 msgid "Label Top"
 msgstr ""
 
-#: scheduler/ipp.c:2039 scheduler/ipp.c:5494
+#: scheduler/ipp.c:2039 scheduler/ipp.c:5496
 #, c-format
 msgid "Language \"%s\" not supported."
 msgstr ""
@@ -4484,7 +4484,7 @@ msgid "Long-Edge (Portrait)"
 msgstr ""
 
 #: cups/http-support.c:1725
-msgid "Looking for printer."
+msgid "Looking for printer..."
 msgstr ""
 
 #: ppdc/sample.c:260
@@ -4527,7 +4527,7 @@ msgstr ""
 msgid "Missing asterisk in column 1"
 msgstr ""
 
-#: scheduler/ipp.c:5976
+#: scheduler/ipp.c:5978
 msgid "Missing document-number attribute."
 msgstr ""
 
@@ -4542,7 +4542,7 @@ msgstr ""
 msgid "Missing form variable"
 msgstr ""
 
-#: scheduler/ipp.c:9351
+#: scheduler/ipp.c:9353
 msgid "Missing last-document attribute in request."
 msgstr ""
 
@@ -4554,7 +4554,7 @@ msgstr ""
 msgid "Missing media-size in media-col."
 msgstr ""
 
-#: scheduler/ipp.c:6579
+#: scheduler/ipp.c:6581
 msgid "Missing notify-subscription-ids attribute."
 msgstr ""
 
@@ -4616,11 +4616,11 @@ msgstr ""
 msgid "Modify Printer"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:410 cgi-bin/ipp-var.c:501
+#: cgi-bin/ipp-var.c:413 cgi-bin/ipp-var.c:504
 msgid "Move All Jobs"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:349 cgi-bin/ipp-var.c:408 cgi-bin/ipp-var.c:499
+#: cgi-bin/ipp-var.c:352 cgi-bin/ipp-var.c:411 cgi-bin/ipp-var.c:502
 msgid "Move Job"
 msgstr ""
 
@@ -4672,7 +4672,7 @@ msgstr ""
 msgid "No active connection."
 msgstr ""
 
-#: scheduler/ipp.c:3407
+#: scheduler/ipp.c:3409
 #, c-format
 msgid "No active jobs on %s."
 msgstr ""
@@ -4689,11 +4689,11 @@ msgstr ""
 msgid "No community name"
 msgstr ""
 
-#: scheduler/ipp.c:5776
+#: scheduler/ipp.c:5778
 msgid "No default printer."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:421 scheduler/ipp.c:7160
+#: cgi-bin/ipp-var.c:424 scheduler/ipp.c:7162
 msgid "No destinations added."
 msgstr ""
 
@@ -4709,7 +4709,7 @@ msgstr ""
 msgid "No error-status"
 msgstr ""
 
-#: scheduler/ipp.c:8103 scheduler/ipp.c:9365
+#: scheduler/ipp.c:8105 scheduler/ipp.c:9367
 msgid "No file in print request."
 msgstr ""
 
@@ -4738,7 +4738,7 @@ msgstr ""
 msgid "No printer-uri found for class"
 msgstr ""
 
-#: scheduler/ipp.c:6184
+#: scheduler/ipp.c:6186
 msgid "No printer-uri in request."
 msgstr ""
 
@@ -4758,11 +4758,11 @@ msgstr ""
 msgid "No request-id"
 msgstr ""
 
-#: scheduler/ipp.c:5379
+#: scheduler/ipp.c:5381
 msgid "No subscription attributes in request."
 msgstr ""
 
-#: scheduler/ipp.c:7487
+#: scheduler/ipp.c:7489
 msgid "No subscriptions found."
 msgstr ""
 
@@ -4806,7 +4806,7 @@ msgstr ""
 msgid "Not Supported"
 msgstr ""
 
-#: scheduler/ipp.c:1506 scheduler/ipp.c:10624
+#: scheduler/ipp.c:1506 scheduler/ipp.c:10626
 msgid "Not allowed to print."
 msgstr ""
 
@@ -5046,7 +5046,7 @@ msgstr ""
 msgid "Print Speed"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:777
+#: cgi-bin/ipp-var.c:780
 msgid "Print Test Page"
 msgstr ""
 
@@ -5062,19 +5062,19 @@ msgstr ""
 msgid "Print file sent."
 msgstr ""
 
-#: backend/ipp.c:2179
+#: backend/ipp.c:2180
 msgid "Print job canceled at printer."
 msgstr ""
 
-#: backend/ipp.c:2171
+#: backend/ipp.c:2172
 msgid "Print job too large."
 msgstr ""
 
-#: backend/ipp.c:1653
+#: backend/ipp.c:1654
 msgid "Print job was not accepted."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1027
+#: cgi-bin/ipp-var.c:1030
 msgid "Printer Added"
 msgstr ""
 
@@ -5082,15 +5082,15 @@ msgstr ""
 msgid "Printer Default"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1031
+#: cgi-bin/ipp-var.c:1034
 msgid "Printer Deleted"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1029
+#: cgi-bin/ipp-var.c:1032
 msgid "Printer Modified"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1025
+#: cgi-bin/ipp-var.c:1028
 msgid "Printer Paused"
 msgstr ""
 
@@ -5098,11 +5098,11 @@ msgstr ""
 msgid "Printer Settings"
 msgstr ""
 
-#: backend/ipp.c:2174
+#: backend/ipp.c:2175
 msgid "Printer cannot print supplied content."
 msgstr ""
 
-#: backend/ipp.c:2177
+#: backend/ipp.c:2178
 msgid "Printer cannot print with supplied options."
 msgstr ""
 
@@ -5124,7 +5124,7 @@ msgstr ""
 msgid "Quarto"
 msgstr ""
 
-#: scheduler/ipp.c:1501 scheduler/ipp.c:10619
+#: scheduler/ipp.c:1501 scheduler/ipp.c:10621
 msgid "Quota limit reached."
 msgstr ""
 
@@ -5195,19 +5195,19 @@ msgstr ""
 msgid "Sending data to printer."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1041
+#: cgi-bin/ipp-var.c:1044
 msgid "Server Restarted"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1047
+#: cgi-bin/ipp-var.c:1050
 msgid "Server Security Auditing"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1043
+#: cgi-bin/ipp-var.c:1046
 msgid "Server Started"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:1045
+#: cgi-bin/ipp-var.c:1048
 msgid "Server Stopped"
 msgstr ""
 
@@ -5276,8 +5276,8 @@ msgstr ""
 msgid "Statement"
 msgstr ""
 
-#: scheduler/ipp.c:3553 scheduler/ipp.c:6595 scheduler/ipp.c:7300
-#: scheduler/ipp.c:8813
+#: scheduler/ipp.c:3555 scheduler/ipp.c:6597 scheduler/ipp.c:7302
+#: scheduler/ipp.c:8815
 #, c-format
 msgid "Subscription #%d does not exist."
 msgstr ""
@@ -5331,8 +5331,8 @@ msgstr ""
 msgid "The \"%s\" attribute is required for print jobs."
 msgstr ""
 
-#: scheduler/ipp.c:6255 scheduler/ipp.c:6335 scheduler/ipp.c:6348
-#: scheduler/ipp.c:6360 scheduler/ipp.c:6375
+#: scheduler/ipp.c:6257 scheduler/ipp.c:6337 scheduler/ipp.c:6350
+#: scheduler/ipp.c:6362 scheduler/ipp.c:6377
 #, c-format
 msgid "The %s attribute cannot be provided with job-ids."
 msgstr ""
@@ -5342,17 +5342,17 @@ msgstr ""
 msgid "The '%s' Job Status attribute cannot be supplied in a job creation request."
 msgstr ""
 
-#: scheduler/ipp.c:5188
+#: scheduler/ipp.c:5190
 #, c-format
 msgid "The '%s' operation attribute cannot be supplied in a Create-Job request."
 msgstr ""
 
-#: scheduler/ipp.c:6825
+#: scheduler/ipp.c:6827
 #, c-format
 msgid "The PPD file \"%s\" could not be found."
 msgstr ""
 
-#: scheduler/ipp.c:6812
+#: scheduler/ipp.c:6814
 #, c-format
 msgid "The PPD file \"%s\" could not be opened: %s"
 msgstr ""
@@ -5386,7 +5386,7 @@ msgstr ""
 msgid "The notify-lease-duration attribute cannot be used with job subscriptions."
 msgstr ""
 
-#: scheduler/ipp.c:2049 scheduler/ipp.c:5504
+#: scheduler/ipp.c:2049 scheduler/ipp.c:5506
 #, c-format
 msgid "The notify-user-data value is too large (%d > 63 octets)."
 msgstr ""
@@ -5408,7 +5408,7 @@ msgid "The printer did not respond."
 msgstr ""
 
 #: backend/ipp.c:829 backend/ipp.c:948 backend/ipp.c:1062 backend/ipp.c:1459
-#: backend/ipp.c:1625 backend/lpd.c:836 backend/socket.c:379
+#: backend/ipp.c:1626 backend/lpd.c:836 backend/socket.c:379
 #: backend/usb-unix.c:124 backend/usb-unix.c:414 backend/usb-unix.c:497
 msgid "The printer is in use."
 msgstr ""
@@ -5463,13 +5463,13 @@ msgid "The printer name may only contain up to 127 printable characters and may
 msgstr ""
 
 #: scheduler/ipp.c:787 scheduler/ipp.c:1055 scheduler/ipp.c:3194
-#: scheduler/ipp.c:3373 scheduler/ipp.c:5171 scheduler/ipp.c:5338
-#: scheduler/ipp.c:5652 scheduler/ipp.c:6221 scheduler/ipp.c:7030
-#: scheduler/ipp.c:7086 scheduler/ipp.c:7406 scheduler/ipp.c:7672
-#: scheduler/ipp.c:7761 scheduler/ipp.c:7794 scheduler/ipp.c:8118
-#: scheduler/ipp.c:8525 scheduler/ipp.c:8607 scheduler/ipp.c:9779
-#: scheduler/ipp.c:10231 scheduler/ipp.c:10582 scheduler/ipp.c:10664
-#: scheduler/ipp.c:11039
+#: scheduler/ipp.c:3375 scheduler/ipp.c:5173 scheduler/ipp.c:5340
+#: scheduler/ipp.c:5654 scheduler/ipp.c:6223 scheduler/ipp.c:7032
+#: scheduler/ipp.c:7088 scheduler/ipp.c:7408 scheduler/ipp.c:7674
+#: scheduler/ipp.c:7763 scheduler/ipp.c:7796 scheduler/ipp.c:8120
+#: scheduler/ipp.c:8527 scheduler/ipp.c:8609 scheduler/ipp.c:9781
+#: scheduler/ipp.c:10233 scheduler/ipp.c:10584 scheduler/ipp.c:10666
+#: scheduler/ipp.c:11041
 msgid "The printer or class does not exist."
 msgstr ""
 
@@ -5518,16 +5518,16 @@ msgstr ""
 msgid "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)."
 msgstr ""
 
-#: scheduler/client.c:2242
+#: scheduler/client.c:2249
 msgid "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it."
 msgstr ""
 
-#: scheduler/ipp.c:6319
+#: scheduler/ipp.c:6321
 #, c-format
 msgid "The which-jobs value \"%s\" is not supported."
 msgstr ""
 
-#: scheduler/ipp.c:5582
+#: scheduler/ipp.c:5584
 msgid "There are too many subscriptions."
 msgstr ""
 
@@ -5634,7 +5634,7 @@ msgstr ""
 msgid "Unable to add class"
 msgstr ""
 
-#: backend/ipp.c:1807
+#: backend/ipp.c:1808
 msgid "Unable to add document to print job."
 msgstr ""
 
@@ -5663,7 +5663,7 @@ msgstr ""
 msgid "Unable to cancel RSS subscription"
 msgstr ""
 
-#: backend/ipp.c:2084 backend/ipp.c:2532
+#: backend/ipp.c:2085 backend/ipp.c:2533
 msgid "Unable to cancel print job."
 msgstr ""
 
@@ -5801,7 +5801,7 @@ msgstr ""
 msgid "Unable to establish a secure connection to host."
 msgstr ""
 
-#: cgi-bin/ipp-var.c:350
+#: cgi-bin/ipp-var.c:353
 msgid "Unable to find destination for job"
 msgstr ""
 
@@ -5813,7 +5813,7 @@ msgstr ""
 msgid "Unable to find server credentials."
 msgstr ""
 
-#: backend/ipp.c:3220
+#: backend/ipp.c:3221
 msgid "Unable to get backend exit status."
 msgstr ""
 
@@ -5877,11 +5877,11 @@ msgstr ""
 msgid "Unable to modify printer"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:417 cgi-bin/ipp-var.c:506
+#: cgi-bin/ipp-var.c:420 cgi-bin/ipp-var.c:509
 msgid "Unable to move job"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:419 cgi-bin/ipp-var.c:508
+#: cgi-bin/ipp-var.c:422 cgi-bin/ipp-var.c:511
 msgid "Unable to move jobs"
 msgstr ""
 
@@ -5897,7 +5897,7 @@ msgstr ""
 msgid "Unable to open device file"
 msgstr ""
 
-#: scheduler/ipp.c:5997
+#: scheduler/ipp.c:5999
 #, c-format
 msgid "Unable to open document #%d in job #%d."
 msgstr ""
@@ -5906,7 +5906,7 @@ msgstr ""
 msgid "Unable to open help file."
 msgstr ""
 
-#: backend/ipp.c:382 backend/ipp.c:1554 backend/ipp.c:1762 backend/lpd.c:496
+#: backend/ipp.c:382 backend/ipp.c:1554 backend/ipp.c:1763 backend/lpd.c:496
 #: backend/socket.c:150 backend/usb.c:237 filter/gziptoany.c:73
 #: filter/pstops.c:270
 msgid "Unable to open print file"
@@ -5917,7 +5917,7 @@ msgstr ""
 msgid "Unable to open raster file"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:780
+#: cgi-bin/ipp-var.c:783
 msgid "Unable to print test page"
 msgstr ""
 
@@ -5926,7 +5926,7 @@ msgstr ""
 msgid "Unable to read print data."
 msgstr ""
 
-#: scheduler/ipp.c:8277 scheduler/ipp.c:9518
+#: scheduler/ipp.c:8279 scheduler/ipp.c:9520
 msgid "Unable to rename job document file."
 msgstr ""
 
@@ -5943,7 +5943,7 @@ msgstr ""
 msgid "Unable to see in file"
 msgstr ""
 
-#: cgi-bin/ipp-var.c:583 cgi-bin/ipp-var.c:603
+#: cgi-bin/ipp-var.c:586 cgi-bin/ipp-var.c:606
 msgid "Unable to send command to printer driver"
 msgstr ""
 
@@ -5964,7 +5964,7 @@ msgstr ""
 msgid "Unable to set server default"
 msgstr ""
 
-#: backend/ipp.c:3079 backend/ipp.c:3156 backend/ipp.c:3164
+#: backend/ipp.c:3080 backend/ipp.c:3157 backend/ipp.c:3165
 msgid "Unable to start backend process."
 msgstr ""
 
@@ -6036,12 +6036,12 @@ msgstr ""
 msgid "Unknown print mode: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10453
+#: scheduler/ipp.c:10455
 #, c-format
 msgid "Unknown printer-error-policy \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10436
+#: scheduler/ipp.c:10438
 #, c-format
 msgid "Unknown printer-op-policy \"%s\"."
 msgstr ""
@@ -6067,17 +6067,17 @@ msgstr ""
 msgid "Unknown version option value: \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10910
+#: scheduler/ipp.c:10912
 #, c-format
 msgid "Unsupported 'compression' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:10940
+#: scheduler/ipp.c:10942
 #, c-format
 msgid "Unsupported 'document-format' value \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:11015
+#: scheduler/ipp.c:11017
 msgid "Unsupported 'job-name' value."
 msgstr ""
 
@@ -6086,17 +6086,17 @@ msgstr ""
 msgid "Unsupported character set \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8084 scheduler/ipp.c:9330
+#: scheduler/ipp.c:8086 scheduler/ipp.c:9332
 #, c-format
 msgid "Unsupported compression \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:8220 scheduler/ipp.c:9483
+#: scheduler/ipp.c:8222 scheduler/ipp.c:9485
 #, c-format
 msgid "Unsupported document-format \"%s\"."
 msgstr ""
 
-#: scheduler/ipp.c:9466
+#: scheduler/ipp.c:9468
 #, c-format
 msgid "Unsupported document-format \"%s/%s\"."
 msgstr ""
@@ -6257,7 +6257,7 @@ msgstr ""
 msgid "Version uses indefinite length"
 msgstr ""
 
-#: backend/ipp.c:1924
+#: backend/ipp.c:1925
 msgid "Waiting for job to complete."
 msgstr ""
 
@@ -6281,7 +6281,7 @@ msgstr ""
 msgid "Yes"
 msgstr ""
 
-#: scheduler/client.c:2229
+#: scheduler/client.c:2236
 #, c-format
 msgid "You must access this page using the URL <A HREF=\"https://%s:%d%s\">https://%s:%d%s</A>."
 msgstr ""
@@ -6306,11 +6306,11 @@ msgstr ""
 msgid "completed"
 msgstr ""
 
-#: scheduler/ipp.c:5869
+#: scheduler/ipp.c:5871
 msgid "cups-deviced failed to execute."
 msgstr ""
 
-#: scheduler/ipp.c:6748 scheduler/ipp.c:6997
+#: scheduler/ipp.c:6750 scheduler/ipp.c:6999
 msgid "cups-driverd failed to execute."
 msgstr ""
 
@@ -6570,7 +6570,7 @@ msgstr ""
 msgid "ipptool: Unknown option \"-%c\"."
 msgstr ""
 
-#: scheduler/ipp.c:7750
+#: scheduler/ipp.c:7752
 msgid "job-printer-uri attribute missing."
 msgstr ""
 
@@ -6827,16 +6827,16 @@ msgstr ""
 msgid "no system default destination"
 msgstr ""
 
-#: scheduler/ipp.c:5553
+#: scheduler/ipp.c:5555
 msgid "notify-events not specified."
 msgstr ""
 
-#: scheduler/ipp.c:2003 scheduler/ipp.c:5458
+#: scheduler/ipp.c:2003 scheduler/ipp.c:5460
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" is already used."
 msgstr ""
 
-#: scheduler/ipp.c:1993 scheduler/ipp.c:5448
+#: scheduler/ipp.c:1993 scheduler/ipp.c:5450
 #, c-format
 msgid "notify-recipient-uri URI \"%s\" uses unknown scheme."
 msgstr ""
index 65bf6e0a515c84d190ffbd92369765bb93a4bb51..efe899f625727b8aede88121fe1dee41750a330e 100644 (file)
 "       cupsaddsmb [options] -a" = "       cupsaddsmb [options] -a";
 "       cupstestdsc [options] -" = "       cupstestdsc [options] -";
 "       program | cupstestppd [options] -" = "       program | cupstestppd [options] -";
-"      %s  \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")." = "      %s  \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\").";
+"      %s  \"%s %s\" conflicts with \"%s %s\"\n                (constraint=\"%s %s %s %s\")." = "      %s  “%s %s” conflicts with “%s %s”\n                (constraint=“%s %s %s %s”).";
 "      %s  %s %s does not exist." = "      %s  %s %s does not exist.";
-"      %s  %s file \"%s\" has the wrong capitalization." = "      %s  %s file \"%s\" has the wrong capitalization.";
+"      %s  %s file \"%s\" has the wrong capitalization." = "      %s  %s file “%s” has the wrong capitalization.";
 "      %s  Bad %s choice %s.\n                REF: Page 122, section 5.17" = "      %s  Bad %s choice %s.\n                REF: Page 122, section 5.17";
-"      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s." = "      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s.";
-"      %s  Bad UTF-8 \"%s\" translation string for option %s." = "      %s  Bad UTF-8 \"%s\" translation string for option %s.";
-"      %s  Bad cupsFilter value \"%s\"." = "      %s  Bad cupsFilter value \"%s\".";
-"      %s  Bad cupsFilter2 value \"%s\"." = "      %s  Bad cupsFilter2 value \"%s\".";
+"      %s  Bad UTF-8 \"%s\" translation string for option %s, choice %s." = "      %s  Bad UTF-8 “%s” translation string for option %s, choice %s.";
+"      %s  Bad UTF-8 \"%s\" translation string for option %s." = "      %s  Bad UTF-8 “%s” translation string for option %s.";
+"      %s  Bad cupsFilter value \"%s\"." = "      %s  Bad cupsFilter value “%s”.";
+"      %s  Bad cupsFilter2 value \"%s\"." = "      %s  Bad cupsFilter2 value “%s”.";
 "      %s  Bad cupsICCProfile %s." = "      %s  Bad cupsICCProfile %s.";
-"      %s  Bad cupsPreFilter value \"%s\"." = "      %s  Bad cupsPreFilter value \"%s\".";
-"      %s  Bad cupsUIConstraints %s: \"%s\"" = "      %s  Bad cupsUIConstraints %s: \"%s\"";
-"      %s  Bad language \"%s\"." = "      %s  Bad language \"%s\".";
-"      %s  Bad permissions on %s file \"%s\"." = "      %s  Bad permissions on %s file \"%s\".";
+"      %s  Bad cupsPreFilter value \"%s\"." = "      %s  Bad cupsPreFilter value “%s”.";
+"      %s  Bad cupsUIConstraints %s: \"%s\"" = "      %s  Bad cupsUIConstraints %s: “%s”";
+"      %s  Bad language \"%s\"." = "      %s  Bad language “%s”.";
+"      %s  Bad permissions on %s file \"%s\"." = "      %s  Bad permissions on %s file “%s”.";
 "      %s  Bad spelling of %s - should be %s." = "      %s  Bad spelling of %s - should be %s.";
 "      %s  Cannot provide both APScanAppPath and APScanAppBundleID." = "      %s  Cannot provide both APScanAppPath and APScanAppBundleID.";
 "      %s  Default choices conflicting." = "      %s  Default choices conflicting.";
 "      %s  Empty cupsUIConstraints %s" = "      %s  Empty cupsUIConstraints %s";
-"      %s  Missing \"%s\" translation string for option %s, choice %s." = "      %s  Missing \"%s\" translation string for option %s, choice %s.";
-"      %s  Missing \"%s\" translation string for option %s." = "      %s  Missing \"%s\" translation string for option %s.";
-"      %s  Missing %s file \"%s\"." = "      %s  Missing %s file \"%s\".";
+"      %s  Missing \"%s\" translation string for option %s, choice %s." = "      %s  Missing “%s” translation string for option %s, choice %s.";
+"      %s  Missing \"%s\" translation string for option %s." = "      %s  Missing “%s” translation string for option %s.";
+"      %s  Missing %s file \"%s\"." = "      %s  Missing %s file “%s”.";
 "      %s  Missing REQUIRED PageRegion option.\n                REF: Page 100, section 5.14." = "      %s  Missing REQUIRED PageRegion option.\n                REF: Page 100, section 5.14.";
 "      %s  Missing REQUIRED PageSize option.\n                REF: Page 99, section 5.14." = "      %s  Missing REQUIRED PageSize option.\n                REF: Page 99, section 5.14.";
-"      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." = "      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\".";
-"      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" = "      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"";
+"      %s  Missing choice *%s %s in UIConstraints \"*%s %s *%s %s\"." = "      %s  Missing choice *%s %s in UIConstraints “*%s %s *%s %s”.";
+"      %s  Missing choice *%s %s in cupsUIConstraints %s: \"%s\"" = "      %s  Missing choice *%s %s in cupsUIConstraints %s: “%s”";
 "      %s  Missing cupsUIResolver %s" = "      %s  Missing cupsUIResolver %s";
-"      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"." = "      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\".";
-"      %s  Missing option %s in cupsUIConstraints %s: \"%s\"" = "      %s  Missing option %s in cupsUIConstraints %s: \"%s\"";
-"      %s  No base translation \"%s\" is included in file." = "      %s  No base translation \"%s\" is included in file.";
+"      %s  Missing option %s in UIConstraints \"*%s %s *%s %s\"." = "      %s  Missing option %s in UIConstraints “*%s %s *%s %s”.";
+"      %s  Missing option %s in cupsUIConstraints %s: \"%s\"" = "      %s  Missing option %s in cupsUIConstraints %s: “%s”";
+"      %s  No base translation \"%s\" is included in file." = "      %s  No base translation “%s” is included in file.";
 "      %s  REQUIRED %s does not define choice None.\n                REF: Page 122, section 5.17" = "      %s  REQUIRED %s does not define choice None.\n                REF: Page 122, section 5.17";
-"      %s  Size \"%s\" defined for %s but not for %s." = "      %s  Size \"%s\" defined for %s but not for %s.";
-"      %s  Size \"%s\" has unexpected dimensions (%gx%g)." = "      %s  Size \"%s\" has unexpected dimensions (%gx%g).";
-"      %s  Size \"%s\" should be \"%s\"." = "      %s  Size \"%s\" should be \"%s\".";
-"      %s  Size \"%s\" should be the Adobe standard name \"%s\"." = "      %s  Size \"%s\" should be the Adobe standard name \"%s\".";
+"      %s  Size \"%s\" defined for %s but not for %s." = "      %s  Size “%s” defined for %s but not for %s.";
+"      %s  Size \"%s\" has unexpected dimensions (%gx%g)." = "      %s  Size “%s” has unexpected dimensions (%gx%g).";
+"      %s  Size \"%s\" should be \"%s\"." = "      %s  Size “%s” should be “%s”.";
+"      %s  Size \"%s\" should be the Adobe standard name \"%s\"." = "      %s  Size “%s” should be the Adobe standard name “%s”.";
 "      %s  cupsICCProfile %s hash value collides with %s." = "      %s  cupsICCProfile %s hash value collides with %s.";
 "      %s  cupsUIResolver %s causes a loop." = "      %s  cupsUIResolver %s causes a loop.";
 "      %s  cupsUIResolver %s does not list at least two different options." = "      %s  cupsUIResolver %s does not list at least two different options.";
 "      **FAIL**  Bad Default%s %s\n                REF: Page 40, section 4.5." = "      **FAIL**  Bad Default%s %s\n                REF: Page 40, section 4.5.";
 "      **FAIL**  Bad DefaultImageableArea %s\n                REF: Page 102, section 5.15." = "      **FAIL**  Bad DefaultImageableArea %s\n                REF: Page 102, section 5.15.";
 "      **FAIL**  Bad DefaultPaperDimension %s\n                REF: Page 103, section 5.15." = "      **FAIL**  Bad DefaultPaperDimension %s\n                REF: Page 103, section 5.15.";
-"      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3." = "      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3.";
-"      **FAIL**  Bad FormatVersion \"%s\"\n                REF: Page 56, section 5.3." = "      **FAIL**  Bad FormatVersion \"%s\"\n                REF: Page 56, section 5.3.";
+"      **FAIL**  Bad FileVersion \"%s\"\n                REF: Page 56, section 5.3." = "      **FAIL**  Bad FileVersion “%s”\n                REF: Page 56, section 5.3.";
+"      **FAIL**  Bad FormatVersion \"%s\"\n                REF: Page 56, section 5.3." = "      **FAIL**  Bad FormatVersion “%s”\n                REF: Page 56, section 5.3.";
 "      **FAIL**  Bad JobPatchFile attribute in file\n                REF: Page 24, section 3.4." = "      **FAIL**  Bad JobPatchFile attribute in file\n                REF: Page 24, section 3.4.";
 "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1." = "      **FAIL**  Bad LanguageEncoding %s - must be ISOLatin1.";
 "      **FAIL**  Bad LanguageVersion %s - must be English." = "      **FAIL**  Bad LanguageVersion %s - must be English.";
-"      **FAIL**  Bad Manufacturer (should be \"%s\")\n                REF: Page 211, table D.1." = "      **FAIL**  Bad Manufacturer (should be \"%s\")\n                REF: Page 211, table D.1.";
-"      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n                REF: Pages 59-60, section 5.3." = "      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n                REF: Pages 59-60, section 5.3.";
-"      **FAIL**  Bad PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3." = "      **FAIL**  Bad PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3.";
-"      **FAIL**  Bad Product - not \"(string)\".\n                REF: Page 62, section 5.3." = "      **FAIL**  Bad Product - not \"(string)\".\n                REF: Page 62, section 5.3.";
+"      **FAIL**  Bad Manufacturer (should be \"%s\")\n                REF: Page 211, table D.1." = "      **FAIL**  Bad Manufacturer (should be “%s”)\n                REF: Page 211, table D.1.";
+"      **FAIL**  Bad ModelName - \"%c\" not allowed in string.\n                REF: Pages 59-60, section 5.3." = "      **FAIL**  Bad ModelName - “%c” not allowed in string.\n                REF: Pages 59-60, section 5.3.";
+"      **FAIL**  Bad PSVersion - not \"(string) int\".\n                REF: Pages 62-64, section 5.3." = "      **FAIL**  Bad PSVersion - not “(string) int”.\n                REF: Pages 62-64, section 5.3.";
+"      **FAIL**  Bad Product - not \"(string)\".\n                REF: Page 62, section 5.3." = "      **FAIL**  Bad Product - not “(string)”.\n                REF: Page 62, section 5.3.";
 "      **FAIL**  Bad ShortNickName - longer than 31 chars.\n                REF: Pages 64-65, section 5.3." = "      **FAIL**  Bad ShortNickName - longer than 31 chars.\n                REF: Pages 64-65, section 5.3.";
 "      **FAIL**  Bad option %s choice %s\n                REF: Page 84, section 5.9" = "      **FAIL**  Bad option %s choice %s\n                REF: Page 84, section 5.9";
 "      **FAIL**  Default option code cannot be interpreted: %s" = "      **FAIL**  Default option code cannot be interpreted: %s";
 "  --cr                    End lines with CR (Mac OS 9)." = "  --cr                    End lines with CR (Mac OS 9).";
 "  --crlf                  End lines with CR + LF (Windows)." = "  --crlf                  End lines with CR + LF (Windows).";
 "  --domain regex          Match domain to regular expression." = "  --domain regex          Match domain to regular expression.";
-"  --exec utility [argument ...] ;\n                          Execute program if true." = "  --exec utility [argument ...] ;\n                          Execute program if true.";
+"  --exec utility [argument ...] ;\n                          Execute program if true." = "  --exec utility [argument ] ;\n                          Execute program if true.";
 "  --false                 Always false." = "  --false                 Always false.";
 "  --help                  Show help." = "  --help                  Show help.";
 "  --help                  Show this help." = "  --help                  Show this help.";
 "  -l                      List attributes." = "  -l                      List attributes.";
 "  -l                      Produce plain text output." = "  -l                      Produce plain text output.";
 "  -l                      Run cupsd on demand." = "  -l                      Run cupsd on demand.";
-"  -l lang[,lang,...]      Specify the output language(s) (locale)." = "  -l lang[,lang,...]      Specify the output language(s) (locale).";
+"  -l lang[,lang,...]      Specify the output language(s) (locale)." = "  -l lang[,lang,]      Specify the output language(s) (locale).";
 "  -m                      Use the ModelName value as the filename." = "  -m                      Use the ModelName value as the filename.";
 "  -m mime/type            Set output MIME type (otherwise application/pdf)." = "  -m mime/type            Set output MIME type (otherwise application/pdf).";
 "  -n copies               Set number of copies." = "  -n copies               Set number of copies.";
 "  -u regex                Match URI to regular expression." = "  -u regex                Match URI to regular expression.";
 "  -v                      Be verbose." = "  -v                      Be verbose.";
 "  -vv                     Be very verbose." = "  -vv                     Be very verbose.";
-"  -x utility [argument ...] ;\n                          Execute program if true." = "  -x utility [argument ...] ;\n                          Execute program if true.";
+"  -x utility [argument ...] ;\n                          Execute program if true." = "  -x utility [argument ] ;\n                          Execute program if true.";
 "  -z                      Compress PPD files using GNU zip." = "  -z                      Compress PPD files using GNU zip.";
 "  IPPFIND_SERVICE_DOMAIN  Domain name" = "  IPPFIND_SERVICE_DOMAIN  Domain name";
 "  IPPFIND_SERVICE_HOSTNAME\n                          Fully-qualified domain name" = "  IPPFIND_SERVICE_HOSTNAME\n                          Fully-qualified domain name";
 "  {}                      URI" = "  {}                      URI";
 " FAIL" = " FAIL";
 " PASS" = " PASS";
-"\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." = "\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5).";
-"\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." = "\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5).";
-"\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." = "\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3).";
-"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." = "\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3).";
-"\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." = "\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11).";
-"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)." = "\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7).";
-"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." = "\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7).";
-"\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." = "\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14).";
-"\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." = "\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4).";
-"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." = "\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3).";
-"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section 4.1.3)." = "\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section 4.1.3).";
-"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section 4.1.9)." = "\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section 4.1.9).";
-"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section 4.1.9)." = "\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section 4.1.9).";
-"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)." = "\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2).";
-"\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." = "\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2).";
-"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section 4.1.8)." = "\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section 4.1.8).";
-"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section 4.1.8)." = "\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section 4.1.8).";
-"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." = "\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10).";
-"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13)." = "\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13).";
-"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15)." = "\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15).";
-"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15)." = "\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15).";
-"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15)." = "\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15).";
-"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)." = "\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1).";
-"\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." = "\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1).";
-"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)." = "\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6).";
-"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)." = "\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6).";
+"\"%s\": Bad URI value \"%s\" - %s (RFC 2911 section 4.1.5)." = "“%s”: Bad URI value “%s” - %s (RFC 2911 section 4.1.5).";
+"\"%s\": Bad URI value \"%s\" - bad length %d (RFC 2911 section 4.1.5)." = "“%s”: Bad URI value “%s” - bad length %d (RFC 2911 section 4.1.5).";
+"\"%s\": Bad attribute name - bad length %d (RFC 2911 section 4.1.3)." = "“%s”: Bad attribute name - bad length %d (RFC 2911 section 4.1.3).";
+"\"%s\": Bad attribute name - invalid character (RFC 2911 section 4.1.3)." = "“%s”: Bad attribute name - invalid character (RFC 2911 section 4.1.3).";
+"\"%s\": Bad boolen value %d (RFC 2911 section 4.1.11)." = "“%s”: Bad boolen value %d (RFC 2911 section 4.1.11).";
+"\"%s\": Bad charset value \"%s\" - bad characters (RFC 2911 section 4.1.7)." = "“%s”: Bad charset value “%s” - bad characters (RFC 2911 section 4.1.7).";
+"\"%s\": Bad charset value \"%s\" - bad length %d (RFC 2911 section 4.1.7)." = "“%s”: Bad charset value “%s” - bad length %d (RFC 2911 section 4.1.7).";
+"\"%s\": Bad dateTime UTC hours %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC hours %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC minutes %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime UTC sign '%c' (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime day %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime day %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime deciseconds %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime deciseconds %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime hours %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime hours %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime minutes %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime minutes %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime month %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime month %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad dateTime seconds %u (RFC 2911 section 4.1.14)." = "“%s”: Bad dateTime seconds %u (RFC 2911 section 4.1.14).";
+"\"%s\": Bad enum value %d - out of range (RFC 2911 section 4.1.4)." = "“%s”: Bad enum value %d - out of range (RFC 2911 section 4.1.4).";
+"\"%s\": Bad keyword value \"%s\" - bad length %d (RFC 2911 section 4.1.3)." = "“%s”: Bad keyword value “%s” - bad length %d (RFC 2911 section 4.1.3).";
+"\"%s\": Bad keyword value \"%s\" - invalid character (RFC 2911 section 4.1.3)." = "“%s”: Bad keyword value “%s” - invalid character (RFC 2911 section 4.1.3).";
+"\"%s\": Bad mimeMediaType value \"%s\" - bad characters (RFC 2911 section 4.1.9)." = "“%s”: Bad mimeMediaType value “%s” - bad characters (RFC 2911 section 4.1.9).";
+"\"%s\": Bad mimeMediaType value \"%s\" - bad length %d (RFC 2911 section 4.1.9)." = "“%s”: Bad mimeMediaType value “%s” - bad length %d (RFC 2911 section 4.1.9).";
+"\"%s\": Bad name value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.2)." = "“%s”: Bad name value “%s” - bad UTF-8 sequence (RFC 2911 section 4.1.2).";
+"\"%s\": Bad name value \"%s\" - bad length %d (RFC 2911 section 4.1.2)." = "“%s”: Bad name value “%s” - bad length %d (RFC 2911 section 4.1.2).";
+"\"%s\": Bad naturalLanguage value \"%s\" - bad characters (RFC 2911 section 4.1.8)." = "“%s”: Bad naturalLanguage value “%s” - bad characters (RFC 2911 section 4.1.8).";
+"\"%s\": Bad naturalLanguage value \"%s\" - bad length %d (RFC 2911 section 4.1.8)." = "“%s”: Bad naturalLanguage value “%s” - bad length %d (RFC 2911 section 4.1.8).";
+"\"%s\": Bad octetString value - bad length %d (RFC 2911 section 4.1.10)." = "“%s”: Bad octetString value - bad length %d (RFC 2911 section 4.1.10).";
+"\"%s\": Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13)." = "“%s”: Bad rangeOfInteger value %d-%d - lower greater than upper (RFC 2911 section 4.1.13).";
+"\"%s\": Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - bad units value (RFC 2911 section 4.1.15).";
+"\"%s\": Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - cross feed resolution must be positive (RFC 2911 section 4.1.15).";
+"\"%s\": Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15)." = "“%s”: Bad resolution value %dx%d%s - feed resolution must be positive (RFC 2911 section 4.1.15).";
+"\"%s\": Bad text value \"%s\" - bad UTF-8 sequence (RFC 2911 section 4.1.1)." = "“%s”: Bad text value “%s” - bad UTF-8 sequence (RFC 2911 section 4.1.1).";
+"\"%s\": Bad text value \"%s\" - bad length %d (RFC 2911 section 4.1.1)." = "“%s”: Bad text value “%s” - bad length %d (RFC 2911 section 4.1.1).";
+"\"%s\": Bad uriScheme value \"%s\" - bad characters (RFC 2911 section 4.1.6)." = "“%s”: Bad uriScheme value “%s” - bad characters (RFC 2911 section 4.1.6).";
+"\"%s\": Bad uriScheme value \"%s\" - bad length %d (RFC 2911 section 4.1.6)." = "“%s”: Bad uriScheme value “%s” - bad length %d (RFC 2911 section 4.1.6).";
 "%-7s %-7.7s %-7d %-31.31s %.0f bytes" = "%-7s %-7.7s %-7d %-31.31s %.0f bytes";
 "%d x %d mm" = "%d x %d mm";
 "%g x %g" = "%g x %g";
 // TRANSLATORS: Message is "subject: error"
 "%s: %s" = "%s: %s";
 "%s: %s failed: %s" = "%s: %s failed: %s";
-"%s: Bad printer URI \"%s\"." = "%s: Bad printer URI \"%s\".";
-"%s: Bad version %s for \"-V\"." = "%s: Bad version %s for \"-V\".";
+"%s: Bad printer URI \"%s\"." = "%s: Bad printer URI “%s”.";
+"%s: Bad version %s for \"-V\"." = "%s: Bad version %s for “-V”.";
 "%s: Don't know what to do." = "%s: Don't know what to do.";
-"%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination \"%s\".";
+"%s: Error - %s environment variable names non-existent destination \"%s\"." = "%s: Error - %s environment variable names non-existent destination “%s”.";
 "%s: Error - add '/version=1.1' to server name." = "%s: Error - add '/version=1.1' to server name.";
 "%s: Error - bad job ID." = "%s: Error - bad job ID.";
 "%s: Error - cannot print files and alter jobs simultaneously." = "%s: Error - cannot print files and alter jobs simultaneously.";
 "%s: Error - cannot print from stdin if files or a job ID are provided." = "%s: Error - cannot print from stdin if files or a job ID are provided.";
-"%s: Error - expected character set after \"-S\" option." = "%s: Error - expected character set after \"-S\" option.";
-"%s: Error - expected content type after \"-T\" option." = "%s: Error - expected content type after \"-T\" option.";
-"%s: Error - expected copies after \"-#\" option." = "%s: Error - expected copies after \"-#\" option.";
-"%s: Error - expected copies after \"-n\" option." = "%s: Error - expected copies after \"-n\" option.";
-"%s: Error - expected destination after \"-P\" option." = "%s: Error - expected destination after \"-P\" option.";
-"%s: Error - expected destination after \"-d\" option." = "%s: Error - expected destination after \"-d\" option.";
-"%s: Error - expected form after \"-f\" option." = "%s: Error - expected form after \"-f\" option.";
-"%s: Error - expected hold name after \"-H\" option." = "%s: Error - expected hold name after \"-H\" option.";
-"%s: Error - expected hostname after \"-H\" option." = "%s: Error - expected hostname after \"-H\" option.";
-"%s: Error - expected hostname after \"-h\" option." = "%s: Error - expected hostname after \"-h\" option.";
-"%s: Error - expected mode list after \"-y\" option." = "%s: Error - expected mode list after \"-y\" option.";
-"%s: Error - expected name after \"-%c\" option." = "%s: Error - expected name after \"-%c\" option.";
-"%s: Error - expected option=value after \"-o\" option." = "%s: Error - expected option=value after \"-o\" option.";
-"%s: Error - expected page list after \"-P\" option." = "%s: Error - expected page list after \"-P\" option.";
-"%s: Error - expected priority after \"-%c\" option." = "%s: Error - expected priority after \"-%c\" option.";
-"%s: Error - expected reason text after \"-r\" option." = "%s: Error - expected reason text after \"-r\" option.";
-"%s: Error - expected title after \"-t\" option." = "%s: Error - expected title after \"-t\" option.";
-"%s: Error - expected username after \"-U\" option." = "%s: Error - expected username after \"-U\" option.";
-"%s: Error - expected username after \"-u\" option." = "%s: Error - expected username after \"-u\" option.";
-"%s: Error - expected value after \"-%c\" option." = "%s: Error - expected value after \"-%c\" option.";
-"%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option." = "%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option.";
+"%s: Error - expected character set after \"-S\" option." = "%s: Error - expected character set after “-S” option.";
+"%s: Error - expected content type after \"-T\" option." = "%s: Error - expected content type after “-T” option.";
+"%s: Error - expected copies after \"-#\" option." = "%s: Error - expected copies after “-#” option.";
+"%s: Error - expected copies after \"-n\" option." = "%s: Error - expected copies after “-n” option.";
+"%s: Error - expected destination after \"-P\" option." = "%s: Error - expected destination after “-P” option.";
+"%s: Error - expected destination after \"-d\" option." = "%s: Error - expected destination after “-d” option.";
+"%s: Error - expected form after \"-f\" option." = "%s: Error - expected form after “-f” option.";
+"%s: Error - expected hold name after \"-H\" option." = "%s: Error - expected hold name after “-H” option.";
+"%s: Error - expected hostname after \"-H\" option." = "%s: Error - expected hostname after “-H” option.";
+"%s: Error - expected hostname after \"-h\" option." = "%s: Error - expected hostname after “-h” option.";
+"%s: Error - expected mode list after \"-y\" option." = "%s: Error - expected mode list after “-y” option.";
+"%s: Error - expected name after \"-%c\" option." = "%s: Error - expected name after “-%c” option.";
+"%s: Error - expected option=value after \"-o\" option." = "%s: Error - expected option=value after “-o” option.";
+"%s: Error - expected page list after \"-P\" option." = "%s: Error - expected page list after “-P” option.";
+"%s: Error - expected priority after \"-%c\" option." = "%s: Error - expected priority after “-%c” option.";
+"%s: Error - expected reason text after \"-r\" option." = "%s: Error - expected reason text after “-r” option.";
+"%s: Error - expected title after \"-t\" option." = "%s: Error - expected title after “-t” option.";
+"%s: Error - expected username after \"-U\" option." = "%s: Error - expected username after “-U” option.";
+"%s: Error - expected username after \"-u\" option." = "%s: Error - expected username after “-u” option.";
+"%s: Error - expected value after \"-%c\" option." = "%s: Error - expected value after “-%c” option.";
+"%s: Error - need \"completed\", \"not-completed\", or \"all\" after \"-W\" option." = "%s: Error - need “completed”, “not-completed”, or “all” after “-W” option.";
 "%s: Error - no default destination available." = "%s: Error - no default destination available.";
 "%s: Error - priority must be between 1 and 100." = "%s: Error - priority must be between 1 and 100.";
 "%s: Error - scheduler not responding." = "%s: Error - scheduler not responding.";
-"%s: Error - too many files - \"%s\"." = "%s: Error - too many files - \"%s\".";
-"%s: Error - unable to access \"%s\" - %s" = "%s: Error - unable to access \"%s\" - %s";
+"%s: Error - too many files - \"%s\"." = "%s: Error - too many files - “%s”.";
+"%s: Error - unable to access \"%s\" - %s" = "%s: Error - unable to access “%s” - %s";
 "%s: Error - unable to queue from stdin - %s." = "%s: Error - unable to queue from stdin - %s.";
-"%s: Error - unknown destination \"%s\"." = "%s: Error - unknown destination \"%s\".";
-"%s: Error - unknown destination \"%s/%s\"." = "%s: Error - unknown destination \"%s/%s\".";
-"%s: Error - unknown option \"%c\"." = "%s: Error - unknown option \"%c\".";
-"%s: Error - unknown option \"%s\"." = "%s: Error - unknown option \"%s\".";
-"%s: Expected job ID after \"-i\" option." = "%s: Expected job ID after \"-i\" option.";
-"%s: Invalid destination name in list \"%s\"." = "%s: Invalid destination name in list \"%s\".";
-"%s: Invalid filter string \"%s\"." = "%s: Invalid filter string \"%s\".";
-"%s: Missing filename for \"-P\"." = "%s: Missing filename for \"-P\".";
-"%s: Missing timeout for \"-T\"." = "%s: Missing timeout for \"-T\".";
-"%s: Missing version for \"-V\"." = "%s: Missing version for \"-V\".";
-"%s: Need job ID (\"-i jobid\") before \"-H restart\"." = "%s: Need job ID (\"-i jobid\") before \"-H restart\".";
+"%s: Error - unknown destination \"%s\"." = "%s: Error - unknown destination “%s”.";
+"%s: Error - unknown destination \"%s/%s\"." = "%s: Error - unknown destination “%s/%s”.";
+"%s: Error - unknown option \"%c\"." = "%s: Error - unknown option “%c”.";
+"%s: Error - unknown option \"%s\"." = "%s: Error - unknown option “%s”.";
+"%s: Expected job ID after \"-i\" option." = "%s: Expected job ID after “-i” option.";
+"%s: Invalid destination name in list \"%s\"." = "%s: Invalid destination name in list “%s”.";
+"%s: Invalid filter string \"%s\"." = "%s: Invalid filter string “%s”.";
+"%s: Missing filename for \"-P\"." = "%s: Missing filename for “-P”.";
+"%s: Missing timeout for \"-T\"." = "%s: Missing timeout for “-T”.";
+"%s: Missing version for \"-V\"." = "%s: Missing version for “-V”.";
+"%s: Need job ID (\"-i jobid\") before \"-H restart\"." = "%s: Need job ID (“-i jobid”) before “-H restart”.";
 "%s: No filter to convert from %s/%s to %s/%s." = "%s: No filter to convert from %s/%s to %s/%s.";
 "%s: Operation failed: %s" = "%s: Operation failed: %s";
 "%s: Sorry, no encryption support." = "%s: Sorry, no encryption support.";
-"%s: Unable to connect to \"%s:%d\": %s" = "%s: Unable to connect to \"%s:%d\": %s";
+"%s: Unable to connect to \"%s:%d\": %s" = "%s: Unable to connect to “%s:%d”: %s";
 "%s: Unable to connect to server." = "%s: Unable to connect to server.";
 "%s: Unable to contact server." = "%s: Unable to contact server.";
 "%s: Unable to create PPD file: %s" = "%s: Unable to create PPD file: %s";
-"%s: Unable to determine MIME type of \"%s\"." = "%s: Unable to determine MIME type of \"%s\".";
-"%s: Unable to open \"%s\": %s" = "%s: Unable to open \"%s\": %s";
+"%s: Unable to determine MIME type of \"%s\"." = "%s: Unable to determine MIME type of “%s”.";
+"%s: Unable to open \"%s\": %s" = "%s: Unable to open “%s”: %s";
 "%s: Unable to open %s: %s" = "%s: Unable to open %s: %s";
 "%s: Unable to open PPD file: %s on line %d." = "%s: Unable to open PPD file: %s on line %d.";
-"%s: Unable to read MIME database from \"%s\" or \"%s\"." = "%s: Unable to read MIME database from \"%s\" or \"%s\".";
-"%s: Unable to resolve \"%s\"." = "%s: Unable to resolve \"%s\".";
-"%s: Unknown destination \"%s\"." = "%s: Unknown destination \"%s\".";
+"%s: Unable to read MIME database from \"%s\" or \"%s\"." = "%s: Unable to read MIME database from “%s” or “%s”.";
+"%s: Unable to resolve \"%s\"." = "%s: Unable to resolve “%s”.";
+"%s: Unknown destination \"%s\"." = "%s: Unknown destination “%s”.";
 "%s: Unknown destination MIME type %s/%s." = "%s: Unknown destination MIME type %s/%s.";
-"%s: Unknown option \"%c\"." = "%s: Unknown option \"%c\".";
-"%s: Unknown option \"%s\"." = "%s: Unknown option \"%s\".";
-"%s: Unknown option \"-%c\"." = "%s: Unknown option \"-%c\".";
+"%s: Unknown option \"%c\"." = "%s: Unknown option “%c”.";
+"%s: Unknown option \"%s\"." = "%s: Unknown option “%s”.";
+"%s: Unknown option \"-%c\"." = "%s: Unknown option “-%c”.";
 "%s: Unknown source MIME type %s/%s." = "%s: Unknown source MIME type %s/%s.";
-"%s: Warning - \"%c\" format modifier not supported - output may not be correct." = "%s: Warning - \"%c\" format modifier not supported - output may not be correct.";
+"%s: Warning - \"%c\" format modifier not supported - output may not be correct." = "%s: Warning - “%c” format modifier not supported - output may not be correct.";
 "%s: Warning - character set option ignored." = "%s: Warning - character set option ignored.";
 "%s: Warning - content type option ignored." = "%s: Warning - content type option ignored.";
 "%s: Warning - form option ignored." = "%s: Warning - form option ignored.";
 "?Invalid help command unknown." = "?Invalid help command unknown.";
 "A Samba password is required to export printer drivers" = "A Samba password is required to export printer drivers";
 "A Samba username is required to export printer drivers" = "A Samba username is required to export printer drivers";
-"A class named \"%s\" already exists." = "A class named \"%s\" already exists.";
-"A printer named \"%s\" already exists." = "A printer named \"%s\" already exists.";
+"A class named \"%s\" already exists." = "A class named “%s” already exists.";
+"A printer named \"%s\" already exists." = "A printer named “%s” already exists.";
 "A0" = "A0";
 "A0 Long Edge" = "A0 Long Edge";
 "A1" = "A1";
 "B7" = "B7";
 "B8" = "B8";
 "B9" = "B9";
-"Bad 'document-format' value \"%s\"." = "Bad 'document-format' value \"%s\".";
+"Bad 'document-format' value \"%s\"." = "Bad 'document-format' value “%s”.";
 "Bad NULL dests pointer" = "Bad NULL dests pointer";
 "Bad OpenGroup" = "Bad OpenGroup";
 "Bad OpenUI/JCLOpenUI" = "Bad OpenUI/JCLOpenUI";
 "Bad arguments to function" = "Bad arguments to function";
 "Bad copies value %d." = "Bad copies value %d.";
 "Bad custom parameter" = "Bad custom parameter";
-"Bad device-uri \"%s\"." = "Bad device-uri \"%s\".";
-"Bad device-uri scheme \"%s\"." = "Bad device-uri scheme \"%s\".";
-"Bad document-format \"%s\"." = "Bad document-format \"%s\".";
-"Bad document-format-default \"%s\"." = "Bad document-format-default \"%s\".";
+"Bad device-uri \"%s\"." = "Bad device-uri “%s”.";
+"Bad device-uri scheme \"%s\"." = "Bad device-uri scheme “%s”.";
+"Bad document-format \"%s\"." = "Bad document-format “%s”.";
+"Bad document-format-default \"%s\"." = "Bad document-format-default “%s”.";
 "Bad filename buffer" = "Bad filename buffer";
 "Bad hostname/address in URI" = "Bad hostname/address in URI";
 "Bad job-name value: %s" = "Bad job-name value: %s";
 "Bad job-name value: Wrong type or count." = "Bad job-name value: Wrong type or count.";
 "Bad job-priority value." = "Bad job-priority value.";
-"Bad job-sheets value \"%s\"." = "Bad job-sheets value \"%s\".";
+"Bad job-sheets value \"%s\"." = "Bad job-sheets value “%s”.";
 "Bad job-sheets value type." = "Bad job-sheets value type.";
 "Bad job-state value." = "Bad job-state value.";
-"Bad job-uri \"%s\"." = "Bad job-uri \"%s\".";
-"Bad notify-pull-method \"%s\"." = "Bad notify-pull-method \"%s\".";
-"Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri \"%s\".";
+"Bad job-uri \"%s\"." = "Bad job-uri “%s”.";
+"Bad notify-pull-method \"%s\"." = "Bad notify-pull-method “%s”.";
+"Bad notify-recipient-uri \"%s\"." = "Bad notify-recipient-uri “%s”.";
 "Bad number-up value %d." = "Bad number-up value %d.";
 "Bad option + choice on line %d." = "Bad option + choice on line %d.";
 "Bad page-ranges values %d-%d." = "Bad page-ranges values %d-%d.";
 "Bad port number in URI" = "Bad port number in URI";
-"Bad port-monitor \"%s\"." = "Bad port-monitor \"%s\".";
+"Bad port-monitor \"%s\"." = "Bad port-monitor “%s”.";
 "Bad printer-state value %d." = "Bad printer-state value %d.";
 "Bad printer-uri." = "Bad printer-uri.";
 "Bad request ID %d." = "Bad request ID %d.";
 "Bad/empty URI" = "Bad/empty URI";
 "Banners" = "Banners";
 "Bond Paper" = "Bond Paper";
-"Boolean expected for waiteof option \"%s\"." = "Boolean expected for waiteof option \"%s\".";
+"Boolean expected for waiteof option \"%s\"." = "Boolean expected for waiteof option “%s”.";
 "Buffer overflow detected, aborting." = "Buffer overflow detected, aborting.";
 "CMYK" = "CMYK";
 "CPCL Label Printer" = "CPCL Label Printer";
 "Cannot share a remote Kerberized printer." = "Cannot share a remote Kerberized printer.";
 "Cassette" = "Cassette";
 "Change Settings" = "Change Settings";
-"Character set \"%s\" not supported." = "Character set \"%s\" not supported.";
+"Character set \"%s\" not supported." = "Character set “%s” not supported.";
 "Classes" = "Classes";
 "Clean Print Heads" = "Clean Print Heads";
 "Close-Job doesn't support the job-uri attribute." = "Close-Job doesn't support the job-uri attribute.";
 "Delete Class" = "Delete Class";
 "Delete Printer" = "Delete Printer";
 "DeskJet Series" = "DeskJet Series";
-"Destination \"%s\" is not accepting jobs." = "Destination \"%s\" is not accepting jobs.";
+"Destination \"%s\" is not accepting jobs." = "Destination “%s” is not accepting jobs.";
 "Device: uri = %s\n        class = %s\n        info = %s\n        make-and-model = %s\n        device-id = %s\n        location = %s" = "Device: uri = %s\n        class = %s\n        info = %s\n        make-and-model = %s\n        device-id = %s\n        location = %s";
 "Direct Thermal Media" = "Direct Thermal Media";
-"Directory \"%s\" contains a relative path." = "Directory \"%s\" contains a relative path.";
-"Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
-"Directory \"%s\" is a file." = "Directory \"%s\" is a file.";
-"Directory \"%s\" not available: %s" = "Directory \"%s\" not available: %s";
-"Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
+"Directory \"%s\" contains a relative path." = "Directory “%s” contains a relative path.";
+"Directory \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "Directory “%s” has insecure permissions (0%o/uid=%d/gid=%d).";
+"Directory \"%s\" is a file." = "Directory “%s” is a file.";
+"Directory \"%s\" not available: %s" = "Directory “%s” not available: %s";
+"Directory \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "Directory “%s” permissions OK (0%o/uid=%d/gid=%d).";
 "Disabled" = "Disabled";
 "Document #%d does not exist in job #%d." = "Document #%d does not exist in job #%d.";
 "Duplexer" = "Duplexer";
 "Error Policy" = "Error Policy";
 "Error reading raster data." = "Error reading raster data.";
 "Error sending raster data." = "Error sending raster data.";
-"Error: need hostname after \"-h\" option." = "Error: need hostname after \"-h\" option.";
+"Error: need hostname after \"-h\" option." = "Error: need hostname after “-h” option.";
 "Every 10 Labels" = "Every 10 Labels";
 "Every 2 Labels" = "Every 2 Labels";
 "Every 3 Labels" = "Every 3 Labels";
 "FanFold German" = "FanFold German";
 "FanFold Legal German" = "FanFold Legal German";
 "Fanfold US" = "Fanfold US";
-"File \"%s\" contains a relative path." = "File \"%s\" contains a relative path.";
-"File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d).";
-"File \"%s\" is a directory." = "File \"%s\" is a directory.";
-"File \"%s\" not available: %s" = "File \"%s\" not available: %s";
-"File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "File \"%s\" permissions OK (0%o/uid=%d/gid=%d).";
+"File \"%s\" contains a relative path." = "File “%s” contains a relative path.";
+"File \"%s\" has insecure permissions (0%o/uid=%d/gid=%d)." = "File “%s” has insecure permissions (0%o/uid=%d/gid=%d).";
+"File \"%s\" is a directory." = "File “%s” is a directory.";
+"File \"%s\" not available: %s" = "File “%s” not available: %s";
+"File \"%s\" permissions OK (0%o/uid=%d/gid=%d)." = "File “%s” permissions OK (0%o/uid=%d/gid=%d).";
 "File Folder " = "File Folder ";
-"File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"." = "File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\".";
+"File device URIs have been disabled. To enable, see the FileDevice directive in \"%s/cups-files.conf\"." = "File device URIs have been disabled. To enable, see the FileDevice directive in “%s/cups-files.conf”.";
 "Finished page %d." = "Finished page %d.";
 "Folio" = "Folio";
 "Forbidden" = "Forbidden";
 "Internet Printing Protocol" = "Internet Printing Protocol";
 "Invalid media name arguments." = "Invalid media name arguments.";
 "Invalid media size." = "Invalid media size.";
-"Invalid printer command \"%s\"." = "Invalid printer command \"%s\".";
+"Invalid printer command \"%s\"." = "Invalid printer command “%s”.";
 "JCL" = "JCL";
 "JIS B0" = "JIS B0";
 "JIS B1" = "JIS B1";
 "LPD/LPR Host or Printer" = "LPD/LPR Host or Printer";
 "Label Printer" = "Label Printer";
 "Label Top" = "Label Top";
-"Language \"%s\" not supported." = "Language \"%s\" not supported.";
+"Language \"%s\" not supported." = "Language “%s” not supported.";
 "Large Address" = "Large Address";
 "LaserJet Series PCL 4/5" = "LaserJet Series PCL 4/5";
 "Letter Oversize" = "Letter Oversize";
 "List Available Printers" = "List Available Printers";
 "Load paper." = "Load paper.";
 "Long-Edge (Portrait)" = "Long-Edge (Portrait)";
-"Looking for printer." = "Looking for printer.";
+"Looking for printer..." = "Looking for printer…";
 "Manual Feed" = "Manual Feed";
 "Media Size" = "Media Size";
 "Media Source" = "Media Source";
 "OpenGroup without a CloseGroup first" = "OpenGroup without a CloseGroup first";
 "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first" = "OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first";
 "Operation Policy" = "Operation Policy";
-"Option \"%s\" cannot be included via %%%%IncludeFeature." = "Option \"%s\" cannot be included via %%%%IncludeFeature.";
+"Option \"%s\" cannot be included via %%%%IncludeFeature." = "Option “%s” cannot be included via %%%%IncludeFeature.";
 "Options Installed" = "Options Installed";
 "Options:" = "Options:";
 "Out of date PPD cache file." = "Out of date PPD cache file.";
 "Tear" = "Tear";
 "Tear-Off" = "Tear-Off";
 "Tear-Off Adjust Position" = "Tear-Off Adjust Position";
-"The \"%s\" attribute is required for print jobs." = "The \"%s\" attribute is required for print jobs.";
+"The \"%s\" attribute is required for print jobs." = "The “%s” attribute is required for print jobs.";
 "The %s attribute cannot be provided with job-ids." = "The %s attribute cannot be provided with job-ids.";
 "The '%s' Job Status attribute cannot be supplied in a job creation request." = "The '%s' Job Status attribute cannot be supplied in a job creation request.";
 "The '%s' operation attribute cannot be supplied in a Create-Job request." = "The '%s' operation attribute cannot be supplied in a Create-Job request.";
-"The PPD file \"%s\" could not be found." = "The PPD file \"%s\" could not be found.";
-"The PPD file \"%s\" could not be opened: %s" = "The PPD file \"%s\" could not be opened: %s";
+"The PPD file \"%s\" could not be found." = "The PPD file “%s” could not be found.";
+"The PPD file \"%s\" could not be opened: %s" = "The PPD file “%s” could not be opened: %s";
 "The PPD file could not be opened." = "The PPD file could not be opened.";
 "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#)." = "The class name may only contain up to 127 printable characters and may not contain spaces, slashes (/), or the pound sign (#).";
 "The developer unit needs to be replaced." = "The developer unit needs to be replaced.";
 "The printer's interlock is open." = "The printer's interlock is open.";
 "The printer's waste bin is almost full." = "The printer's waste bin is almost full.";
 "The printer's waste bin is full." = "The printer's waste bin is full.";
-"The printer-uri \"%s\" contains invalid characters." = "The printer-uri \"%s\" contains invalid characters.";
+"The printer-uri \"%s\" contains invalid characters." = "The printer-uri “%s” contains invalid characters.";
 "The printer-uri attribute is required." = "The printer-uri attribute is required.";
-"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." = "The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\".";
-"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." = "The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\".";
+"The printer-uri must be of the form \"ipp://HOSTNAME/classes/CLASSNAME\"." = "The printer-uri must be of the form “ipp://HOSTNAME/classes/CLASSNAME”.";
+"The printer-uri must be of the form \"ipp://HOSTNAME/printers/PRINTERNAME\"." = "The printer-uri must be of the form “ipp://HOSTNAME/printers/PRINTERNAME”.";
 "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#)." = "The subscription name may not contain spaces, slashes (/), question marks (?), or the pound sign (#).";
-"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it." = "The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it.";
-"The which-jobs value \"%s\" is not supported." = "The which-jobs value \"%s\" is not supported.";
+"The web interface is currently disabled. Run \"cupsctl WebInterface=yes\" to enable it." = "The web interface is currently disabled. Run “cupsctl WebInterface=yes” to enable it.";
+"The which-jobs value \"%s\" is not supported." = "The which-jobs value “%s” is not supported.";
 "There are too many subscriptions." = "There are too many subscriptions.";
 "There was an unrecoverable USB error." = "There was an unrecoverable USB error.";
 "Thermal Transfer Media" = "Thermal Transfer Media";
 "Unable to add RSS subscription" = "Unable to add RSS subscription";
 "Unable to add class" = "Unable to add class";
 "Unable to add document to print job." = "Unable to add document to print job.";
-"Unable to add job for destination \"%s\"." = "Unable to add job for destination \"%s\".";
+"Unable to add job for destination \"%s\"." = "Unable to add job for destination “%s”.";
 "Unable to add printer" = "Unable to add printer";
 "Unable to allocate memory for file types." = "Unable to allocate memory for file types.";
 "Unable to allocate memory for page info" = "Unable to allocate memory for page info";
 "Unable to install Windows 2000 printer driver files (%d)." = "Unable to install Windows 2000 printer driver files (%d).";
 "Unable to install Windows 9x printer driver files (%d)." = "Unable to install Windows 9x printer driver files (%d).";
 "Unable to load help index." = "Unable to load help index.";
-"Unable to locate printer \"%s\"." = "Unable to locate printer \"%s\".";
+"Unable to locate printer \"%s\"." = "Unable to locate printer “%s”.";
 "Unable to locate printer." = "Unable to locate printer.";
 "Unable to modify class" = "Unable to modify class";
 "Unable to modify printer" = "Unable to modify printer";
 "Unable to read print data." = "Unable to read print data.";
 "Unable to rename job document file." = "Unable to rename job document file.";
 "Unable to resolve printer-uri." = "Unable to resolve printer-uri.";
-"Unable to run \"%s\": %s" = "Unable to run \"%s\": %s";
+"Unable to run \"%s\": %s" = "Unable to run “%s”: %s";
 "Unable to see in file" = "Unable to see in file";
 "Unable to send command to printer driver" = "Unable to send command to printer driver";
 "Unable to send data to printer." = "Unable to send data to printer.";
 "Unauthorized" = "Unauthorized";
 "Units" = "Units";
 "Unknown" = "Unknown";
-"Unknown choice \"%s\" for option \"%s\"." = "Unknown choice \"%s\" for option \"%s\".";
-"Unknown encryption option value: \"%s\"." = "Unknown encryption option value: \"%s\".";
-"Unknown file order: \"%s\"." = "Unknown file order: \"%s\".";
-"Unknown format character: \"%c\"." = "Unknown format character: \"%c\".";
+"Unknown choice \"%s\" for option \"%s\"." = "Unknown choice “%s” for option “%s”.";
+"Unknown encryption option value: \"%s\"." = "Unknown encryption option value: “%s”.";
+"Unknown file order: \"%s\"." = "Unknown file order: “%s”.";
+"Unknown format character: \"%c\"." = "Unknown format character: “%c”.";
 "Unknown media size name." = "Unknown media size name.";
-"Unknown option \"%s\" with value \"%s\"." = "Unknown option \"%s\" with value \"%s\".";
-"Unknown option \"%s\"." = "Unknown option \"%s\".";
-"Unknown print mode: \"%s\"." = "Unknown print mode: \"%s\".";
-"Unknown printer-error-policy \"%s\"." = "Unknown printer-error-policy \"%s\".";
-"Unknown printer-op-policy \"%s\"." = "Unknown printer-op-policy \"%s\".";
+"Unknown option \"%s\" with value \"%s\"." = "Unknown option “%s” with value “%s”.";
+"Unknown option \"%s\"." = "Unknown option “%s”.";
+"Unknown print mode: \"%s\"." = "Unknown print mode: “%s”.";
+"Unknown printer-error-policy \"%s\"." = "Unknown printer-error-policy “%s”.";
+"Unknown printer-op-policy \"%s\"." = "Unknown printer-op-policy “%s”.";
 "Unknown request method." = "Unknown request method.";
 "Unknown request version." = "Unknown request version.";
 "Unknown scheme in URI" = "Unknown scheme in URI";
 "Unknown service name." = "Unknown service name.";
-"Unknown version option value: \"%s\"." = "Unknown version option value: \"%s\".";
-"Unsupported 'compression' value \"%s\"." = "Unsupported 'compression' value \"%s\".";
-"Unsupported 'document-format' value \"%s\"." = "Unsupported 'document-format' value \"%s\".";
+"Unknown version option value: \"%s\"." = "Unknown version option value: “%s”.";
+"Unsupported 'compression' value \"%s\"." = "Unsupported 'compression' value “%s”.";
+"Unsupported 'document-format' value \"%s\"." = "Unsupported 'document-format' value “%s”.";
 "Unsupported 'job-name' value." = "Unsupported 'job-name' value.";
-"Unsupported character set \"%s\"." = "Unsupported character set \"%s\".";
-"Unsupported compression \"%s\"." = "Unsupported compression \"%s\".";
-"Unsupported document-format \"%s\"." = "Unsupported document-format \"%s\".";
-"Unsupported document-format \"%s/%s\"." = "Unsupported document-format \"%s/%s\".";
-"Unsupported format \"%s\"." = "Unsupported format \"%s\".";
+"Unsupported character set \"%s\"." = "Unsupported character set “%s”.";
+"Unsupported compression \"%s\"." = "Unsupported compression “%s”.";
+"Unsupported document-format \"%s\"." = "Unsupported document-format “%s”.";
+"Unsupported document-format \"%s/%s\"." = "Unsupported document-format “%s/%s”.";
+"Unsupported format \"%s\"." = "Unsupported format “%s”.";
 "Unsupported margins." = "Unsupported margins.";
 "Unsupported media value." = "Unsupported media value.";
 "Unsupported number-up value %d, using number-up=1." = "Unsupported number-up value %d, using number-up=1.";
 "Upgrade Required" = "Upgrade Required";
 "Usage:\n\n    lpadmin [-h server] -d destination\n    lpadmin [-h server] -x destination\n    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n                       [-r remove-class] [-v device] [-D description]\n                       [-P ppd-file] [-o name=value]\n                       [-u allow:user,user] [-u deny:user,user]" = "Usage:\n\n    lpadmin [-h server] -d destination\n    lpadmin [-h server] -x destination\n    lpadmin [-h server] -p printer [-c add-class] [-i interface] [-m model]\n                       [-r remove-class] [-v device] [-D description]\n                       [-P ppd-file] [-o name=value]\n                       [-u allow:user,user] [-u deny:user,user]";
 "Usage: %s job-id user title copies options [file]" = "Usage: %s job-id user title copies options [file]";
-"Usage: cupsaddsmb [options] printer1 ... printerN" = "Usage: cupsaddsmb [options] printer1 ... printerN";
-"Usage: cupsctl [options] [param=value ... paramN=valueN]" = "Usage: cupsctl [options] [param=value ... paramN=valueN]";
+"Usage: cupsaddsmb [options] printer1 ... printerN" = "Usage: cupsaddsmb [options] printer1  printerN";
+"Usage: cupsctl [options] [param=value ... paramN=valueN]" = "Usage: cupsctl [options] [param=value  paramN=valueN]";
 "Usage: cupsd [options]" = "Usage: cupsd [options]";
 "Usage: cupsfilter [ options ] [ -- ] filename" = "Usage: cupsfilter [ options ] [ -- ] filename";
-"Usage: cupstestdsc [options] filename.ps [... filename.ps]" = "Usage: cupstestdsc [options] filename.ps [... filename.ps]";
-"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" = "Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]";
-"Usage: ippdiscover [options] -a\n       ippdiscover [options] \"service name\"\n\nOptions:" = "Usage: ippdiscover [options] -a\n       ippdiscover [options] \"service name\"\n\nOptions:";
-"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n       ippfind [options] name[.regtype[.domain.]] ... [expression]\n       ippfind --help\n       ippfind --version" = "Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n       ippfind [options] name[.regtype[.domain.]] ... [expression]\n       ippfind --help\n       ippfind --version";
-"Usage: ipptool [options] URI filename [ ... filenameN ]" = "Usage: ipptool [options] URI filename [ ... filenameN ]";
+"Usage: cupstestdsc [options] filename.ps [... filename.ps]" = "Usage: cupstestdsc [options] filename.ps [ filename.ps]";
+"Usage: cupstestppd [options] filename1.ppd[.gz] [... filenameN.ppd[.gz]]" = "Usage: cupstestppd [options] filename1.ppd[.gz] [ filenameN.ppd[.gz]]";
+"Usage: ippdiscover [options] -a\n       ippdiscover [options] \"service name\"\n\nOptions:" = "Usage: ippdiscover [options] -a\n       ippdiscover [options] “service name”\n\nOptions:";
+"Usage: ippfind [options] regtype[,subtype][.domain.] ... [expression]\n       ippfind [options] name[.regtype[.domain.]] ... [expression]\n       ippfind --help\n       ippfind --version" = "Usage: ippfind [options] regtype[,subtype][.domain.] … [expression]\n       ippfind [options] name[.regtype[.domain.]] … [expression]\n       ippfind --help\n       ippfind --version";
+"Usage: ipptool [options] URI filename [ ... filenameN ]" = "Usage: ipptool [options] URI filename [  filenameN ]";
 "Usage: lpmove job/src dest" = "Usage: lpmove job/src dest";
-"Usage: lpoptions [-h server] [-E] -d printer\n       lpoptions [-h server] [-E] [-p printer] -l\n       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n       lpoptions [-h server] [-E] -x printer" = "Usage: lpoptions [-h server] [-E] -d printer\n       lpoptions [-h server] [-E] [-p printer] -l\n       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n       lpoptions [-h server] [-E] -x printer";
+"Usage: lpoptions [-h server] [-E] -d printer\n       lpoptions [-h server] [-E] [-p printer] -l\n       lpoptions [-h server] [-E] -p printer -o option[=value] ...\n       lpoptions [-h server] [-E] -x printer" = "Usage: lpoptions [-h server] [-E] -d printer\n       lpoptions [-h server] [-E] [-p printer] -l\n       lpoptions [-h server] [-E] -p printer -o option[=value] \n       lpoptions [-h server] [-E] -x printer";
 "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]" = "Usage: lpq [-P dest] [-U username] [-h hostname[:port]] [-l] [+interval]";
-"Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" = "Usage: ppdc [options] filename.drv [ ... filenameN.drv ]";
+"Usage: ppdc [options] filename.drv [ ... filenameN.drv ]" = "Usage: ppdc [options] filename.drv [  filenameN.drv ]";
 "Usage: ppdhtml [options] filename.drv >filename.html" = "Usage: ppdhtml [options] filename.drv >filename.html";
-"Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]";
-"Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]";
-"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" = "Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]";
+"Usage: ppdi [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdi [options] filename.ppd [  filenameN.ppd ]";
+"Usage: ppdmerge [options] filename.ppd [ ... filenameN.ppd ]" = "Usage: ppdmerge [options] filename.ppd [  filenameN.ppd ]";
+"Usage: ppdpo [options] -o filename.po filename.drv [ ... filenameN.drv ]" = "Usage: ppdpo [options] -o filename.po filename.drv [  filenameN.drv ]";
 "Usage: snmp [host-or-ip-address]" = "Usage: snmp [host-or-ip-address]";
 "Value uses indefinite length" = "Value uses indefinite length";
 "VarBind uses indefinite length" = "VarBind uses indefinite length";
 "completed" = "completed";
 "cups-deviced failed to execute." = "cups-deviced failed to execute.";
 "cups-driverd failed to execute." = "cups-driverd failed to execute.";
-"cupsaddsmb: No PPD file for printer \"%s\" - %s" = "cupsaddsmb: No PPD file for printer \"%s\" - %s";
+"cupsaddsmb: No PPD file for printer \"%s\" - %s" = "cupsaddsmb: No PPD file for printer “%s” - %s";
 "cupsctl: Cannot set Listen or Port directly." = "cupsctl: Cannot set Listen or Port directly.";
 "cupsctl: Unable to connect to server: %s" = "cupsctl: Unable to connect to server: %s";
-"cupsctl: Unknown option \"%s\"" = "cupsctl: Unknown option \"%s\"";
-"cupsctl: Unknown option \"-%c\"" = "cupsctl: Unknown option \"-%c\"";
-"cupsd: Expected config filename after \"-c\" option." = "cupsd: Expected config filename after \"-c\" option.";
-"cupsd: Expected cups-files.conf filename after \"-s\" option." = "cupsd: Expected cups-files.conf filename after \"-s\" option.";
+"cupsctl: Unknown option \"%s\"" = "cupsctl: Unknown option “%s”";
+"cupsctl: Unknown option \"-%c\"" = "cupsctl: Unknown option “-%c”";
+"cupsd: Expected config filename after \"-c\" option." = "cupsd: Expected config filename after “-c” option.";
+"cupsd: Expected cups-files.conf filename after \"-s\" option." = "cupsd: Expected cups-files.conf filename after “-s” option.";
 "cupsd: On-demand support not compiled in, running in normal mode." = "cupsd: On-demand support not compiled in, running in normal mode.";
 "cupsd: Relative cups-files.conf filename not allowed." = "cupsd: Relative cups-files.conf filename not allowed.";
 "cupsd: Unable to get current directory." = "cupsd: Unable to get current directory.";
 "cupsd: Unable to get path to cups-files.conf file." = "cupsd: Unable to get path to cups-files.conf file.";
-"cupsd: Unknown argument \"%s\" - aborting." = "cupsd: Unknown argument \"%s\" - aborting.";
-"cupsd: Unknown option \"%c\" - aborting." = "cupsd: Unknown option \"%c\" - aborting.";
+"cupsd: Unknown argument \"%s\" - aborting." = "cupsd: Unknown argument “%s” - aborting.";
+"cupsd: Unknown option \"%c\" - aborting." = "cupsd: Unknown option “%c” - aborting.";
 "cupsfilter: Invalid document number %d." = "cupsfilter: Invalid document number %d.";
 "cupsfilter: Invalid job ID %d." = "cupsfilter: Invalid job ID %d.";
 "cupsfilter: Only one filename can be specified." = "cupsfilter: Only one filename can be specified.";
 "ippfind: Expected semi-colon after %s." = "ippfind: Expected semi-colon after %s.";
 "ippfind: Missing close brace in substitution." = "ippfind: Missing close brace in substitution.";
 "ippfind: Missing close parenthesis." = "ippfind: Missing close parenthesis.";
-"ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before \"--and\".";
-"ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before \"--or\".";
+"ippfind: Missing expression before \"--and\"." = "ippfind: Missing expression before “--and”.";
+"ippfind: Missing expression before \"--or\"." = "ippfind: Missing expression before “--or”.";
 "ippfind: Missing key name after %s." = "ippfind: Missing key name after %s.";
 "ippfind: Missing open parenthesis." = "ippfind: Missing open parenthesis.";
 "ippfind: Missing program after %s." = "ippfind: Missing program after %s.";
 "ippfind: Out of memory." = "ippfind: Out of memory.";
 "ippfind: Too many parenthesis." = "ippfind: Too many parenthesis.";
 "ippfind: Unable to browse or resolve: %s" = "ippfind: Unable to browse or resolve: %s";
-"ippfind: Unable to execute \"%s\": %s" = "ippfind: Unable to execute \"%s\": %s";
+"ippfind: Unable to execute \"%s\": %s" = "ippfind: Unable to execute “%s”: %s";
 "ippfind: Unable to use Bonjour: %s" = "ippfind: Unable to use Bonjour: %s";
-"ippfind: Unknown variable \"{%s}\"." = "ippfind: Unknown variable \"{%s}\".";
-"ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." = "ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\".";
+"ippfind: Unknown variable \"{%s}\"." = "ippfind: Unknown variable “{%s}”.";
+"ipptool: \"-i\" and \"-n\" are incompatible with \"-P\" and \"-X\"." = "ipptool: “-i” and “-n” are incompatible with “-P” and “-X”.";
 "ipptool: Bad URI - %s." = "ipptool: Bad URI - %s.";
-"ipptool: Invalid seconds for \"-i\"." = "ipptool: Invalid seconds for \"-i\".";
+"ipptool: Invalid seconds for \"-i\"." = "ipptool: Invalid seconds for “-i”.";
 "ipptool: May only specify a single URI." = "ipptool: May only specify a single URI.";
-"ipptool: Missing count for \"-n\"." = "ipptool: Missing count for \"-n\".";
-"ipptool: Missing filename for \"-f\"." = "ipptool: Missing filename for \"-f\".";
-"ipptool: Missing name=value for \"-d\"." = "ipptool: Missing name=value for \"-d\".";
-"ipptool: Missing seconds for \"-i\"." = "ipptool: Missing seconds for \"-i\".";
+"ipptool: Missing count for \"-n\"." = "ipptool: Missing count for “-n”.";
+"ipptool: Missing filename for \"-f\"." = "ipptool: Missing filename for “-f”.";
+"ipptool: Missing name=value for \"-d\"." = "ipptool: Missing name=value for “-d”.";
+"ipptool: Missing seconds for \"-i\"." = "ipptool: Missing seconds for “-i”.";
 "ipptool: URI required before test file." = "ipptool: URI required before test file.";
-"ipptool: Unknown option \"-%c\"." = "ipptool: Unknown option \"-%c\".";
+"ipptool: Unknown option \"-%c\"." = "ipptool: Unknown option “-%c”.";
 "job-printer-uri attribute missing." = "job-printer-uri attribute missing.";
 "lpadmin: Class name can only contain printable characters." = "lpadmin: Class name can only contain printable characters.";
-"lpadmin: Expected PPD after \"-P\" option." = "lpadmin: Expected PPD after \"-P\" option.";
-"lpadmin: Expected allow/deny:userlist after \"-u\" option." = "lpadmin: Expected allow/deny:userlist after \"-u\" option.";
-"lpadmin: Expected class after \"-r\" option." = "lpadmin: Expected class after \"-r\" option.";
-"lpadmin: Expected class name after \"-c\" option." = "lpadmin: Expected class name after \"-c\" option.";
-"lpadmin: Expected description after \"-D\" option." = "lpadmin: Expected description after \"-D\" option.";
-"lpadmin: Expected device URI after \"-v\" option." = "lpadmin: Expected device URI after \"-v\" option.";
-"lpadmin: Expected file type(s) after \"-I\" option." = "lpadmin: Expected file type(s) after \"-I\" option.";
-"lpadmin: Expected hostname after \"-h\" option." = "lpadmin: Expected hostname after \"-h\" option.";
-"lpadmin: Expected interface after \"-i\" option." = "lpadmin: Expected interface after \"-i\" option.";
-"lpadmin: Expected location after \"-L\" option." = "lpadmin: Expected location after \"-L\" option.";
-"lpadmin: Expected model after \"-m\" option." = "lpadmin: Expected model after \"-m\" option.";
-"lpadmin: Expected name after \"-R\" option." = "lpadmin: Expected name after \"-R\" option.";
-"lpadmin: Expected name=value after \"-o\" option." = "lpadmin: Expected name=value after \"-o\" option.";
-"lpadmin: Expected printer after \"-p\" option." = "lpadmin: Expected printer after \"-p\" option.";
-"lpadmin: Expected printer name after \"-d\" option." = "lpadmin: Expected printer name after \"-d\" option.";
-"lpadmin: Expected printer or class after \"-x\" option." = "lpadmin: Expected printer or class after \"-x\" option.";
+"lpadmin: Expected PPD after \"-P\" option." = "lpadmin: Expected PPD after “-P” option.";
+"lpadmin: Expected allow/deny:userlist after \"-u\" option." = "lpadmin: Expected allow/deny:userlist after “-u” option.";
+"lpadmin: Expected class after \"-r\" option." = "lpadmin: Expected class after “-r” option.";
+"lpadmin: Expected class name after \"-c\" option." = "lpadmin: Expected class name after “-c” option.";
+"lpadmin: Expected description after \"-D\" option." = "lpadmin: Expected description after “-D” option.";
+"lpadmin: Expected device URI after \"-v\" option." = "lpadmin: Expected device URI after “-v” option.";
+"lpadmin: Expected file type(s) after \"-I\" option." = "lpadmin: Expected file type(s) after “-I” option.";
+"lpadmin: Expected hostname after \"-h\" option." = "lpadmin: Expected hostname after “-h” option.";
+"lpadmin: Expected interface after \"-i\" option." = "lpadmin: Expected interface after “-i” option.";
+"lpadmin: Expected location after \"-L\" option." = "lpadmin: Expected location after “-L” option.";
+"lpadmin: Expected model after \"-m\" option." = "lpadmin: Expected model after “-m” option.";
+"lpadmin: Expected name after \"-R\" option." = "lpadmin: Expected name after “-R” option.";
+"lpadmin: Expected name=value after \"-o\" option." = "lpadmin: Expected name=value after “-o” option.";
+"lpadmin: Expected printer after \"-p\" option." = "lpadmin: Expected printer after “-p” option.";
+"lpadmin: Expected printer name after \"-d\" option." = "lpadmin: Expected printer name after “-d” option.";
+"lpadmin: Expected printer or class after \"-x\" option." = "lpadmin: Expected printer or class after “-x” option.";
 "lpadmin: No member names were seen." = "lpadmin: No member names were seen.";
 "lpadmin: Printer %s is already a member of class %s." = "lpadmin: Printer %s is already a member of class %s.";
 "lpadmin: Printer %s is not a member of class %s." = "lpadmin: Printer %s is not a member of class %s.";
 "lpadmin: Unable to connect to server: %s" = "lpadmin: Unable to connect to server: %s";
 "lpadmin: Unable to create temporary file" = "lpadmin: Unable to create temporary file";
 "lpadmin: Unable to delete option:\n         You must specify a printer name first." = "lpadmin: Unable to delete option:\n         You must specify a printer name first.";
-"lpadmin: Unable to open PPD \"%s\": %s on line %d." = "lpadmin: Unable to open PPD \"%s\": %s on line %d.";
-"lpadmin: Unable to open PPD file \"%s\" - %s" = "lpadmin: Unable to open PPD file \"%s\" - %s";
+"lpadmin: Unable to open PPD \"%s\": %s on line %d." = "lpadmin: Unable to open PPD “%s”: %s on line %d.";
+"lpadmin: Unable to open PPD file \"%s\" - %s" = "lpadmin: Unable to open PPD file “%s” - %s";
 "lpadmin: Unable to remove a printer from the class:\n         You must specify a printer name first." = "lpadmin: Unable to remove a printer from the class:\n         You must specify a printer name first.";
 "lpadmin: Unable to set the printer options:\n         You must specify a printer name first." = "lpadmin: Unable to set the printer options:\n         You must specify a printer name first.";
-"lpadmin: Unknown allow/deny option \"%s\"." = "lpadmin: Unknown allow/deny option \"%s\".";
-"lpadmin: Unknown argument \"%s\"." = "lpadmin: Unknown argument \"%s\".";
-"lpadmin: Unknown option \"%c\"." = "lpadmin: Unknown option \"%c\".";
+"lpadmin: Unknown allow/deny option \"%s\"." = "lpadmin: Unknown allow/deny option “%s”.";
+"lpadmin: Unknown argument \"%s\"." = "lpadmin: Unknown argument “%s”.";
+"lpadmin: Unknown option \"%c\"." = "lpadmin: Unknown option “%c”.";
 "lpadmin: Warning - content type list ignored." = "lpadmin: Warning - content type list ignored.";
 "lpc> " = "lpc> ";
-"lpinfo: Expected 1284 device ID string after \"--device-id\"." = "lpinfo: Expected 1284 device ID string after \"--device-id\".";
-"lpinfo: Expected language after \"--language\"." = "lpinfo: Expected language after \"--language\".";
-"lpinfo: Expected make and model after \"--make-and-model\"." = "lpinfo: Expected make and model after \"--make-and-model\".";
-"lpinfo: Expected product string after \"--product\"." = "lpinfo: Expected product string after \"--product\".";
-"lpinfo: Expected scheme list after \"--exclude-schemes\"." = "lpinfo: Expected scheme list after \"--exclude-schemes\".";
-"lpinfo: Expected scheme list after \"--include-schemes\"." = "lpinfo: Expected scheme list after \"--include-schemes\".";
-"lpinfo: Expected timeout after \"--timeout\"." = "lpinfo: Expected timeout after \"--timeout\".";
-"lpinfo: Unknown argument \"%s\"." = "lpinfo: Unknown argument \"%s\".";
-"lpinfo: Unknown option \"%c\"." = "lpinfo: Unknown option \"%c\".";
-"lpinfo: Unknown option \"%s\"." = "lpinfo: Unknown option \"%s\".";
+"lpinfo: Expected 1284 device ID string after \"--device-id\"." = "lpinfo: Expected 1284 device ID string after “--device-id”.";
+"lpinfo: Expected language after \"--language\"." = "lpinfo: Expected language after “--language”.";
+"lpinfo: Expected make and model after \"--make-and-model\"." = "lpinfo: Expected make and model after “--make-and-model”.";
+"lpinfo: Expected product string after \"--product\"." = "lpinfo: Expected product string after “--product”.";
+"lpinfo: Expected scheme list after \"--exclude-schemes\"." = "lpinfo: Expected scheme list after “--exclude-schemes”.";
+"lpinfo: Expected scheme list after \"--include-schemes\"." = "lpinfo: Expected scheme list after “--include-schemes”.";
+"lpinfo: Expected timeout after \"--timeout\"." = "lpinfo: Expected timeout after “--timeout”.";
+"lpinfo: Unknown argument \"%s\"." = "lpinfo: Unknown argument “%s”.";
+"lpinfo: Unknown option \"%c\"." = "lpinfo: Unknown option “%c”.";
+"lpinfo: Unknown option \"%s\"." = "lpinfo: Unknown option “%s”.";
 "lpmove: Unable to connect to server: %s" = "lpmove: Unable to connect to server: %s";
-"lpmove: Unknown argument \"%s\"." = "lpmove: Unknown argument \"%s\".";
-"lpmove: Unknown option \"%c\"." = "lpmove: Unknown option \"%c\".";
+"lpmove: Unknown argument \"%s\"." = "lpmove: Unknown argument “%s”.";
+"lpmove: Unknown option \"%c\"." = "lpmove: Unknown option “%c”.";
 "lpoptions: No printers." = "lpoptions: No printers.";
 "lpoptions: Unable to add printer or instance: %s" = "lpoptions: Unable to add printer or instance: %s";
 "lpoptions: Unable to get PPD file for %s: %s" = "lpoptions: Unable to get PPD file for %s: %s";
 "lpoptions: Unable to open PPD file for %s." = "lpoptions: Unable to open PPD file for %s.";
 "lpoptions: Unknown printer or class." = "lpoptions: Unknown printer or class.";
-"lpstat: error - %s environment variable names non-existent destination \"%s\"." = "lpstat: error - %s environment variable names non-existent destination \"%s\".";
+"lpstat: error - %s environment variable names non-existent destination \"%s\"." = "lpstat: error - %s environment variable names non-existent destination “%s”.";
 "members of class %s:" = "members of class %s:";
 "no entries" = "no entries";
 "no system default destination" = "no system default destination";
 "notify-events not specified." = "notify-events not specified.";
-"notify-recipient-uri URI \"%s\" is already used." = "notify-recipient-uri URI \"%s\" is already used.";
-"notify-recipient-uri URI \"%s\" uses unknown scheme." = "notify-recipient-uri URI \"%s\" uses unknown scheme.";
+"notify-recipient-uri URI \"%s\" is already used." = "notify-recipient-uri URI “%s” is already used.";
+"notify-recipient-uri URI \"%s\" uses unknown scheme." = "notify-recipient-uri URI “%s” uses unknown scheme.";
 "pending" = "pending";
-"ppdc: Adding include directory \"%s\"." = "ppdc: Adding include directory \"%s\".";
+"ppdc: Adding include directory \"%s\"." = "ppdc: Adding include directory “%s”.";
 "ppdc: Adding/updating UI text from %s." = "ppdc: Adding/updating UI text from %s.";
 "ppdc: Bad boolean value (%s) on line %d of %s." = "ppdc: Bad boolean value (%s) on line %d of %s.";
 "ppdc: Bad font attribute: %s" = "ppdc: Bad font attribute: %s";
-"ppdc: Bad resolution name \"%s\" on line %d of %s." = "ppdc: Bad resolution name \"%s\" on line %d of %s.";
+"ppdc: Bad resolution name \"%s\" on line %d of %s." = "ppdc: Bad resolution name “%s” on line %d of %s.";
 "ppdc: Bad status keyword %s on line %d of %s." = "ppdc: Bad status keyword %s on line %d of %s.";
 "ppdc: Bad variable substitution ($%c) on line %d of %s." = "ppdc: Bad variable substitution ($%c) on line %d of %s.";
 "ppdc: Choice found on line %d of %s with no Option." = "ppdc: Choice found on line %d of %s with no Option.";
 "ppdc: Expected two option names on line %d of %s." = "ppdc: Expected two option names on line %d of %s.";
 "ppdc: Expected value after %s on line %d of %s." = "ppdc: Expected value after %s on line %d of %s.";
 "ppdc: Expected version after Font on line %d of %s." = "ppdc: Expected version after Font on line %d of %s.";
-"ppdc: Invalid #include/#po filename \"%s\"." = "ppdc: Invalid #include/#po filename \"%s\".";
+"ppdc: Invalid #include/#po filename \"%s\"." = "ppdc: Invalid #include/#po filename “%s”.";
 "ppdc: Invalid cost for filter on line %d of %s." = "ppdc: Invalid cost for filter on line %d of %s.";
 "ppdc: Invalid empty MIME type for filter on line %d of %s." = "ppdc: Invalid empty MIME type for filter on line %d of %s.";
 "ppdc: Invalid empty program name for filter on line %d of %s." = "ppdc: Invalid empty program name for filter on line %d of %s.";
-"ppdc: Invalid option section \"%s\" on line %d of %s." = "ppdc: Invalid option section \"%s\" on line %d of %s.";
-"ppdc: Invalid option type \"%s\" on line %d of %s." = "ppdc: Invalid option type \"%s\" on line %d of %s.";
-"ppdc: Loading driver information file \"%s\"." = "ppdc: Loading driver information file \"%s\".";
-"ppdc: Loading messages for locale \"%s\"." = "ppdc: Loading messages for locale \"%s\".";
-"ppdc: Loading messages from \"%s\"." = "ppdc: Loading messages from \"%s\".";
-"ppdc: Missing #endif at end of \"%s\"." = "ppdc: Missing #endif at end of \"%s\".";
+"ppdc: Invalid option section \"%s\" on line %d of %s." = "ppdc: Invalid option section “%s” on line %d of %s.";
+"ppdc: Invalid option type \"%s\" on line %d of %s." = "ppdc: Invalid option type “%s” on line %d of %s.";
+"ppdc: Loading driver information file \"%s\"." = "ppdc: Loading driver information file “%s”.";
+"ppdc: Loading messages for locale \"%s\"." = "ppdc: Loading messages for locale “%s”.";
+"ppdc: Loading messages from \"%s\"." = "ppdc: Loading messages from “%s”.";
+"ppdc: Missing #endif at end of \"%s\"." = "ppdc: Missing #endif at end of “%s”.";
 "ppdc: Missing #if on line %d of %s." = "ppdc: Missing #if on line %d of %s.";
 "ppdc: Need a msgid line before any translation strings on line %d of %s." = "ppdc: Need a msgid line before any translation strings on line %d of %s.";
 "ppdc: No message catalog provided for locale %s." = "ppdc: No message catalog provided for locale %s.";
 "ppdc: Option %s redefined with a different type on line %d of %s." = "ppdc: Option %s redefined with a different type on line %d of %s.";
 "ppdc: Option constraint must *name on line %d of %s." = "ppdc: Option constraint must *name on line %d of %s.";
 "ppdc: Too many nested #if's on line %d of %s." = "ppdc: Too many nested #if's on line %d of %s.";
-"ppdc: Unable to create PPD file \"%s\" - %s." = "ppdc: Unable to create PPD file \"%s\" - %s.";
+"ppdc: Unable to create PPD file \"%s\" - %s." = "ppdc: Unable to create PPD file “%s” - %s.";
 "ppdc: Unable to create output directory %s: %s" = "ppdc: Unable to create output directory %s: %s";
 "ppdc: Unable to create output pipes: %s" = "ppdc: Unable to create output pipes: %s";
 "ppdc: Unable to execute cupstestppd: %s" = "ppdc: Unable to execute cupstestppd: %s";
 "ppdc: Unable to find #po file %s on line %d of %s." = "ppdc: Unable to find #po file %s on line %d of %s.";
-"ppdc: Unable to find include file \"%s\" on line %d of %s." = "ppdc: Unable to find include file \"%s\" on line %d of %s.";
-"ppdc: Unable to find localization for \"%s\" - %s" = "ppdc: Unable to find localization for \"%s\" - %s";
-"ppdc: Unable to load localization file \"%s\" - %s" = "ppdc: Unable to load localization file \"%s\" - %s";
+"ppdc: Unable to find include file \"%s\" on line %d of %s." = "ppdc: Unable to find include file “%s” on line %d of %s.";
+"ppdc: Unable to find localization for \"%s\" - %s" = "ppdc: Unable to find localization for “%s” - %s";
+"ppdc: Unable to load localization file \"%s\" - %s" = "ppdc: Unable to load localization file “%s” - %s";
 "ppdc: Unable to open %s: %s" = "ppdc: Unable to open %s: %s";
 "ppdc: Undefined variable (%s) on line %d of %s." = "ppdc: Undefined variable (%s) on line %d of %s.";
 "ppdc: Unexpected text on line %d of %s." = "ppdc: Unexpected text on line %d of %s.";
 "ppdc: Unknown driver type %s on line %d of %s." = "ppdc: Unknown driver type %s on line %d of %s.";
-"ppdc: Unknown duplex type \"%s\" on line %d of %s." = "ppdc: Unknown duplex type \"%s\" on line %d of %s.";
-"ppdc: Unknown media size \"%s\" on line %d of %s." = "ppdc: Unknown media size \"%s\" on line %d of %s.";
-"ppdc: Unknown message catalog format for \"%s\"." = "ppdc: Unknown message catalog format for \"%s\".";
-"ppdc: Unknown token \"%s\" seen on line %d of %s." = "ppdc: Unknown token \"%s\" seen on line %d of %s.";
-"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." = "ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s.";
+"ppdc: Unknown duplex type \"%s\" on line %d of %s." = "ppdc: Unknown duplex type “%s” on line %d of %s.";
+"ppdc: Unknown media size \"%s\" on line %d of %s." = "ppdc: Unknown media size “%s” on line %d of %s.";
+"ppdc: Unknown message catalog format for \"%s\"." = "ppdc: Unknown message catalog format for “%s”.";
+"ppdc: Unknown token \"%s\" seen on line %d of %s." = "ppdc: Unknown token “%s” seen on line %d of %s.";
+"ppdc: Unknown trailing characters in real number \"%s\" on line %d of %s." = "ppdc: Unknown trailing characters in real number “%s” on line %d of %s.";
 "ppdc: Unterminated string starting with %c on line %d of %s." = "ppdc: Unterminated string starting with %c on line %d of %s.";
-"ppdc: Warning - overlapping filename \"%s\"." = "ppdc: Warning - overlapping filename \"%s\".";
+"ppdc: Warning - overlapping filename \"%s\"." = "ppdc: Warning - overlapping filename “%s”.";
 "ppdc: Writing %s." = "ppdc: Writing %s.";
-"ppdc: Writing PPD files to directory \"%s\"." = "ppdc: Writing PPD files to directory \"%s\".";
-"ppdmerge: Bad LanguageVersion \"%s\" in %s." = "ppdmerge: Bad LanguageVersion \"%s\" in %s.";
+"ppdc: Writing PPD files to directory \"%s\"." = "ppdc: Writing PPD files to directory “%s”.";
+"ppdmerge: Bad LanguageVersion \"%s\" in %s." = "ppdmerge: Bad LanguageVersion “%s” in %s.";
 "ppdmerge: Ignoring PPD file %s." = "ppdmerge: Ignoring PPD file %s.";
 "ppdmerge: Unable to backup %s to %s - %s" = "ppdmerge: Unable to backup %s to %s - %s";
 "printer %s disabled since %s -" = "printer %s disabled since %s -";
index c0a27b8c0e1ca0d48689a4292325886ca1f719cb..143412d1b7bfe9e4b2e8562f05fad3c04414be1d 100644 (file)
@@ -32,7 +32,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.4.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2012-09-29 11:21+0200\n"
 "Last-Translator: Àngel Mompó <mecatxis@gmail.com>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
@@ -3647,8 +3647,8 @@ msgstr ""
 msgid "Long-Edge (Portrait)"
 msgstr "Costat-llarg (vertical)"
 
-msgid "Looking for printer."
-msgstr "S'està buscant la impressora."
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "Alimentació manual"
@@ -6152,6 +6152,9 @@ msgstr "La variable-bindings fa servir una longitud indefinida"
 #~ msgid "Large Address - 1 4/10 x 3 1/2\""
 #~ msgstr "Adreça gran - 1 4/10 x 3 1/2\""
 
+#~ msgid "Looking for printer."
+#~ msgstr "S'està buscant la impressora."
+
 #~ msgid "New Stylus Color Series"
 #~ msgstr "Sèrie New Stylus Color"
 
index 94c752d88651baf39bc11f5cebfbaa9bef0aa02a..8e03517635cfcf78779844fce14052319fda03b3 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2012-09-14 10:26+0100\n"
 "Last-Translator: Jan Bartos <jan.bartos@madeta.cz>\n"
 "Language-Team: Czech\n"
@@ -3441,7 +3441,7 @@ msgstr ""
 msgid "Long-Edge (Portrait)"
 msgstr "Delší okraj (na výšku)"
 
-msgid "Looking for printer."
+msgid "Looking for printer..."
 msgstr ""
 
 msgid "Manual Feed"
index 93dff404e52ba71ef06bde685863ff1e7370cedc..089ca04095fb0ceb02829f85619a85e1702f07ee 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2015-05-09 22:25+0100\n"
 "Last-Translator: Joachim Schwender <joachim.schwender@web.de>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3464,8 +3464,8 @@ msgstr "Lade Papier."
 msgid "Long-Edge (Portrait)"
 msgstr "Lange Kante (Hochformat)"
 
-msgid "Looking for printer."
-msgstr "Suche nach Drucker."
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "Manuelle Papierzufuhr"
@@ -5755,6 +5755,9 @@ msgstr "variable-bindings hat unbestimmte Länge"
 #~ msgid "Enter password:"
 #~ msgstr "Neues Passwort eingeben :"
 
+#~ msgid "Looking for printer."
+#~ msgstr "Suche nach Drucker."
+
 #~ msgid "New Stylus Color Series"
 #~ msgstr "Neue Stylus Color Serie"
 
index 966b07fff99339b4098a34882a3222f7a36b3b29..fcef34c9ad7e05121d9036c30eb244cd73252416 100644 (file)
@@ -16,7 +16,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2014-09-23 23:45+0100\n"
 "Last-Translator: Juan Pablo González Riopedre <jpgriopedre@yahoo.es>\n"
 "Language-Team: Spanish\n"
@@ -3726,8 +3726,8 @@ msgstr "Cargar papel."
 msgid "Long-Edge (Portrait)"
 msgstr "Lado largo (retrato)"
 
-msgid "Looking for printer."
-msgstr "Buscando impresora."
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "Alimentación manual"
@@ -6120,6 +6120,9 @@ msgstr "sin título"
 msgid "variable-bindings uses indefinite length"
 msgstr "variable-bindings usa una longitud indefinida"
 
+#~ msgid "Looking for printer."
+#~ msgstr "Buscando impresora."
+
 #~ msgid ""
 #~ "The '%s' Job Description attribute cannot be supplied in a job creation "
 #~ "request."
index df2be2a0b1d4819aab57ccca3da791d1536b2380..385fe0ef67f05e682575450ae2ac5871e14a65ff 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2012-12-12 11:12+0100\n"
 "Last-Translator: denis meramdjougoma <dcmeram@libertysurf.fr>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3438,7 +3438,7 @@ msgstr ""
 msgid "Long-Edge (Portrait)"
 msgstr "Bord le plus long (Portrait)"
 
-msgid "Looking for printer."
+msgid "Looking for printer..."
 msgstr ""
 
 msgid "Manual Feed"
index 7526aeef8c72c5cd72da29ee01f2b64dc6d29a92..1a2ae3f7fd9ddcbbac823d516ee7b4d4c993d33f 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 1.6\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2013-07-14 12:00+0200\n"
 "Last-Translator: Giovanni Scafora <giovanni@archlinux.org>\n"
 "Language-Team: Arch Linux Italian Team <giovanni@archlinux.org>\n"
@@ -3721,8 +3721,8 @@ msgstr ""
 msgid "Long-Edge (Portrait)"
 msgstr "Long-Edge (Portrait)"
 
-msgid "Looking for printer."
-msgstr "Cerca una stampante."
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "Alimentazione manuale"
@@ -6111,6 +6111,9 @@ msgstr "variable-bindings utilizza una lunghezza indefinita"
 #~ msgid "Enter password:"
 #~ msgstr "Digitare la password:"
 
+#~ msgid "Looking for printer."
+#~ msgstr "Cerca una stampante."
+
 #~ msgid "New Stylus Color Series"
 #~ msgstr "Nuova Stylus Color Series"
 
index a81d595bbfd676073c77d5fdb0535b23eafa0375..39bd73589a0b7aee064f1926b92ea121d92808b4 100644 (file)
@@ -28,7 +28,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2014-11-15 19:27+0900\n"
 "Last-Translator: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
 "Language-Team: OPFC TRANSCUPS <opfc-transcups@sourceforge.jp>\n"
@@ -3685,8 +3685,8 @@ msgstr "用紙を補給してください。"
 msgid "Long-Edge (Portrait)"
 msgstr "長辺給紙 (縦向き)"
 
-msgid "Looking for printer."
-msgstr "プリンターを探しています。"
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "手差し"
@@ -6105,6 +6105,9 @@ msgstr "variable-bindings の長さが不定"
 #~ msgid "Enter password:"
 #~ msgstr "パスワードを入力:"
 
+#~ msgid "Looking for printer."
+#~ msgstr "プリンターを探しています。"
+
 #~ msgid "New Stylus Color Series"
 #~ msgstr "New Stylus Color シリーズ"
 
index 83dae086279bab19a017ad6ca8dc700b24943718..88a618c5828c1217bf96ad7fa5b09fbe12018414 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: CUPS 2.0\n"
 "Report-Msgid-Bugs-To: http://www.cups.org/str.php\n"
-"POT-Creation-Date: 2015-06-08 17:14-0400\n"
+"POT-Creation-Date: 2015-07-20 14:24-0400\n"
 "PO-Revision-Date: 2015-01-28 12:00-0800\n"
 "Last-Translator: Aleksandr Proklov\n"
 "Language-Team: PuppyRus Linux Team\n"
@@ -3647,8 +3647,8 @@ msgstr "Загрузка бумаги."
 msgid "Long-Edge (Portrait)"
 msgstr "По длинной стороне (книжная)"
 
-msgid "Looking for printer."
-msgstr "Поиск принтера."
+msgid "Looking for printer..."
+msgstr ""
 
 msgid "Manual Feed"
 msgstr "Ручная подача"
@@ -6002,6 +6002,9 @@ msgstr "Для variable-bindings длина не установлена"
 #~ "    Комментарий %%EndComments отсутствует.\n"
 #~ "        REF: Стр. 41, %%EndComments"
 
+#~ msgid "Looking for printer."
+#~ msgstr "Поиск принтера."
+
 #~ msgid ""
 #~ "The '%s' Job Description attribute cannot be supplied in a job creation "
 #~ "request."
index bb8da28262a57c644f166fe1398a36c31e13b2e9..0bedd970df49b6b4aad23a4053fe9b9ec1b7213a 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id: po2strings.c 11558 2014-02-06 18:33:34Z msweet $"
+ * "$Id: po2strings.c 12794 2015-07-20 18:26:20Z msweet $"
  *
  * Convert a GNU gettext .po file to an Apple .strings file.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  *
  * These coded instructions, statements, and computer programs are the
  * property of Apple Inc. and are protected by Federal copyright
@@ -49,6 +49,9 @@
  * characters like newline and the double quote character.
  */
 
+static char    *normalize_string(const char *idstr, char *buffer, size_t bufsize);
+
+
 /*
  *   main() - Convert .po file to .strings.
  */
@@ -66,7 +69,8 @@ main(int  argc,                               /* I - Number of command-line args */
                        *ptr,           /* Pointer into buffer */
                        *temp,          /* New string */
                        *msgid,         /* msgid string */
-                       *msgstr;        /* msgstr string */
+                       *msgstr,        /* msgstr string */
+                       normalized[8192];/* Normalized msgid string */
   size_t               length;         /* Length of combined strings */
   int                  use_msgid;      /* Use msgid strings for msgstr? */
 
@@ -190,8 +194,7 @@ main(int  argc,                             /* I - Number of command-line args */
         if (msgid && msgstr)
        {
          if (*msgid)
-            cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid,
-                          (use_msgid || !*msgstr) ? msgid : msgstr);
+            cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid, normalize_string((use_msgid || !*msgstr) ? msgid : msgstr, normalized, sizeof(normalized)));
        }
 
        if (msgid)
@@ -270,8 +273,7 @@ main(int  argc,                             /* I - Number of command-line args */
   if (msgid && msgstr)
   {
     if (*msgid)
-      cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid,
-                    (use_msgid || !*msgstr) ? msgid : msgstr);
+      cupsFilePrintf(strings, "\"%s\" = \"%s\";\n", msgid, normalize_string((use_msgid || !*msgstr) ? msgid : msgstr, normalized, sizeof(normalized)));
   }
 
   if (msgid)
@@ -288,5 +290,79 @@ main(int  argc,                            /* I - Number of command-line args */
 
 
 /*
- * End of "$Id: po2strings.c 11558 2014-02-06 18:33:34Z msweet $".
+ * 'normalize_string()' - Normalize a msgid string.
+ *
+ * This function converts ASCII ellipsis and double quotes to their Unicode
+ * counterparts.
+ */
+
+static char *                          /* O - Normalized string */
+normalize_string(const char *idstr,    /* I - msgid string */
+                 char       *buffer,   /* I - Normalized string buffer */
+                 size_t     bufsize)   /* I - Size of string buffer */
+{
+  char *bufptr = buffer,               /* Pointer into buffer */
+       *bufend = buffer + bufsize - 3; /* End of buffer */
+  int  quote = 0,                      /* Quote direction */
+       html = 0;                       /* HTML text */
+
+
+  while (*idstr && bufptr < bufend)
+  {
+    if (!strncmp(idstr, "<A ", 3))
+      html = 1;
+    else if (html && *idstr == '>')
+      html = 0;
+
+    if (*idstr == '.' && idstr[1] == '.' && idstr[2] == '.')
+    {
+     /*
+      * Convert ... to Unicode ellipsis...
+      */
+
+      *bufptr++ = (char)0xE2;
+      *bufptr++ = (char)0x80;
+      *bufptr++ = (char)0xA6;
+      idstr += 2;
+    }
+    else if (!html && *idstr == '\\' && idstr[1] == '\"' && (quote || strchr(idstr + 2, '\"') != NULL))
+    {
+      if (quote)
+      {
+       /*
+        * Convert \" to Unicode right (curley) double quote.
+        */
+
+       *bufptr++ = (char)0xE2;
+       *bufptr++ = (char)0x80;
+       *bufptr++ = (char)0x9D;
+      }
+      else
+      {
+       /*
+        * Convert \" to Unicode left (curley) double quote.
+        */
+
+       *bufptr++ = (char)0xE2;
+       *bufptr++ = (char)0x80;
+       *bufptr++ = (char)0x9C;
+      }
+
+      quote = !quote;
+      idstr ++;
+    }
+    else
+      *bufptr++ = *idstr;
+
+    idstr ++;
+  }
+
+  *bufptr = '\0';
+
+  return (buffer);
+}
+
+
+/*
+ * End of "$Id: po2strings.c 12794 2015-07-20 18:26:20Z msweet $".
  */
index dc1a8c0a4f57edcd6f52c93259df941af9d0656e..e01cf58ff0cf903b5f2158416c5a7ed2db2bc961 100644 (file)
@@ -1,9 +1,9 @@
 #
-# "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $"
+# "$Id: Makefile 12814 2015-07-30 15:03:33Z msweet $"
 #
 # Man page makefile for CUPS.
 #
-# Copyright 2007-2014 by Apple Inc.
+# Copyright 2007-2015 by Apple Inc.
 # Copyright 1993-2006 by Easy Software Products.
 #
 # These coded instructions, statements, and computer programs are the
@@ -43,6 +43,7 @@ MAN5  =       classes.conf.$(MAN5EXT) \
                cups-files.conf.$(MAN5EXT) \
                cups-snmp.conf.$(MAN5EXT) \
                cupsd.conf.$(MAN5EXT) \
+               cupsd-logs.$(MAN5EXT) \
                ipptoolfile.$(MAN5EXT) \
                mailto.conf.$(MAN5EXT) \
                mime.convs.$(MAN5EXT) \
@@ -61,7 +62,6 @@ MAN8  =       cupsaccept.$(MAN8EXT) \
                cups-snmp.$(MAN8EXT) \
                cupsd.$(MAN8EXT) \
                cupsd-helper.$(MAN8EXT) \
-               cupsd-logs.$(MAN8EXT) \
                cupsenable.$(MAN8EXT) \
                lpadmin.$(MAN8EXT) \
                lpinfo.$(MAN8EXT) \
@@ -228,5 +228,5 @@ mantohtml:  mantohtml.o ../cups/$(LIBCUPSSTATIC)
 
 
 #
-# End of "$Id: Makefile 11919 2014-06-11 15:38:28Z msweet $".
+# End of "$Id: Makefile 12814 2015-07-30 15:03:33Z msweet $".
 #
index 13de1269400928d95acafcea76aac7095732fbf2..9d38954aa476fe8fb3700f30364b5c870da000d0 100644 (file)
@@ -1,9 +1,9 @@
 .\"
-.\" "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $"
+.\" "$Id: cupsd.conf.man.in 12767 2015-06-30 15:57:39Z msweet $"
 .\"
 .\" cupsd.conf man page for CUPS.
 .\"
-.\" Copyright 2007-2014 by Apple Inc.
+.\" Copyright 2007-2015 by Apple Inc.
 .\" Copyright 1997-2006 by Easy Software Products.
 .\"
 .\" These coded instructions, statements, and computer programs are the
@@ -12,7 +12,7 @@
 .\" which should have been included with this file.  If this file is
 .\" file is missing or damaged, see the license at "http://www.cups.org/".
 .\"
-.TH cupsd.conf 5 "CUPS" "20 October 2014" "Apple Inc."
+.TH cupsd.conf 5 "CUPS" "30 June 2015" "Apple Inc."
 .SH NAME
 cupsd.conf \- server configuration file for cups
 .SH DESCRIPTION
@@ -369,7 +369,8 @@ The following percent sequences are recognized:
     "%u" inserts the username.
 
 .fi
-The default is "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}".
+The default is the empty string, which disables page logging.
+The string "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}" creates a page log with the standard items.
 .\"#PassEnv
 .TP 5
 \fBPassEnv \fIvariable \fR[ ... \fIvariable \fR]
@@ -869,7 +870,7 @@ Require authentication for accesses from outside the 10. network:
 .BR subscriptions.conf (5),
 CUPS Online Help (http://localhost:631/help)
 .SH COPYRIGHT
-Copyright \[co] 2007-2014 by Apple Inc.
+Copyright \[co] 2007-2015 by Apple Inc.
 .\"
-.\" End of "$Id: cupsd.conf.man.in 12362 2014-12-12 19:50:49Z msweet $".
+.\" End of "$Id: cupsd.conf.man.in 12767 2015-06-30 15:57:39Z msweet $".
 .\"
index befa11703040f4991228375da97922a5a5839736..0b8ecda64b706caa91575cccda51b0a1b72a2d50 100644 (file)
 
 Summary: CUPS
 Name: cups
-Version: 2.1b1
+Version: 2.1rc1
 Release: 1
 Epoch: 1
 License: GPL
 Group: System Environment/Daemons
-Source: http://www.cups.org/software/2.1b1/cups-2.1b1-source.tar.bz2
+Source: http://www.cups.org/software/2.1rc1/cups-2.1rc1-source.tar.bz2
 Url: http://www.cups.org
 Packager: Anonymous <anonymous@foo.com>
 Vendor: Apple Inc.
index fe1e55536b90e96e3b669b76d811f3e471cfa42a..854e3340c19f171d97bb1fa430355e048398cbbe 100644 (file)
@@ -1,5 +1,5 @@
 //
-// "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $"
+// "$Id: sample.drv 12789 2015-07-20 14:51:28Z msweet $"
 //
 // Driver info file for CUPS-supplied PPDs.
 //
@@ -130,7 +130,7 @@ Copyright "file is missing or damaged, see the license at \"http://www.cups.org/
 
 Font *
 
-Version "2.0"
+Version "2.1"
 
 // Dymo Label Printer
 {
@@ -1168,5 +1168,5 @@ Version "2.0"
 }
 
 //
-// End of "$Id: sample.drv 12201 2014-10-15 19:11:12Z msweet $".
+// End of "$Id: sample.drv 12789 2015-07-20 14:51:28Z msweet $".
 //
index 22cad512bf9c3c26023c5300a79bb9a4c9543c30..70ed94aa67b78583a3e731c62d6cf832da20a318 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $"
+ * "$Id: client.c 12751 2015-06-24 18:22:32Z msweet $"
  *
  * Client routines for the CUPS scheduler.
  *
@@ -2159,6 +2159,9 @@ cupsdSendError(cupsd_client_t *con,       /* I - Connection */
                http_status_t  code,    /* I - Error code */
               int            auth_type)/* I - Authentication type */
 {
+  char location[HTTP_MAX_VALUE];       /* Location field */
+
+
   cupsdLogClient(con, CUPSD_LOG_DEBUG2, "cupsdSendError code=%d, auth_type=%d",
                 code, auth_type);
 
@@ -2191,8 +2194,12 @@ cupsdSendError(cupsd_client_t *con,      /* I - Connection */
   * never disable it in that case.
   */
 
+  strlcpy(location, httpGetField(con->http, HTTP_FIELD_LOCATION), sizeof(location));
+
   httpClearFields(con->http);
 
+  httpSetField(con->http, HTTP_FIELD_LOCATION, location);
+
   if (code >= HTTP_STATUS_BAD_REQUEST && con->type != CUPSD_AUTH_NEGOTIATE)
     httpSetKeepAlive(con->http, HTTP_KEEPALIVE_OFF);
 
@@ -4065,5 +4072,5 @@ write_pipe(cupsd_client_t *con)           /* I - Client connection */
 
 
 /*
- * End of "$Id: client.c 12700 2015-06-08 18:32:35Z msweet $".
+ * End of "$Id: client.c 12751 2015-06-24 18:22:32Z msweet $".
  */
index cbd1b7ce36fe060a4a125422cbbe01ad21862a9b..f3e6514b28e142b6db9ced3859b9907aaac834b8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $"
+ * "$Id: conf.c 12819 2015-07-31 13:52:00Z msweet $"
  *
  * Configuration routines for the CUPS scheduler.
  *
@@ -4104,121 +4104,106 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
   * Verify that we have an explicit policy for Validate-Job, Cancel-Jobs,
   * Cancel-My-Jobs, Close-Job, and CUPS-Get-Document, which ensures that
   * upgrades do not introduce new security issues...
+  *
+  * CUPS STR #4659: Allow a lone <Limit All> policy.
   */
 
-  if ((op = cupsdFindPolicyOp(pol, IPP_VALIDATE_JOB)) == NULL ||
-      op->op == IPP_ANY_OPERATION)
+  if (cupsArrayCount(pol->ops) > 1)
   {
-    if ((op = cupsdFindPolicyOp(pol, IPP_PRINT_JOB)) != NULL &&
-       op->op != IPP_ANY_OPERATION)
+    if ((op = cupsdFindPolicyOp(pol, IPP_VALIDATE_JOB)) == NULL ||
+       op->op == IPP_ANY_OPERATION)
     {
-     /*
-      * Add a new limit for Validate-Job using the Print-Job limit as a
-      * template...
-      */
+      if ((op = cupsdFindPolicyOp(pol, IPP_PRINT_JOB)) != NULL &&
+         op->op != IPP_ANY_OPERATION)
+      {
+       /*
+       * Add a new limit for Validate-Job using the Print-Job limit as a
+       * template...
+       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Validate-Job defined in policy %s "
-                     "- using Print-Job's policy.", pol->name);
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Validate-Job defined in policy %s - using Print-Job's policy.", pol->name);
 
-      cupsdAddPolicyOp(pol, op, IPP_VALIDATE_JOB);
+       cupsdAddPolicyOp(pol, op, IPP_VALIDATE_JOB);
+      }
+      else
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Validate-Job defined in policy %s and no suitable template found.", pol->name);
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Validate-Job defined in policy %s "
-                     "and no suitable template found.", pol->name);
-  }
 
-  if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_JOBS)) == NULL ||
-      op->op == IPP_ANY_OPERATION)
-  {
-    if ((op = cupsdFindPolicyOp(pol, IPP_PAUSE_PRINTER)) != NULL &&
-       op->op != IPP_ANY_OPERATION)
+    if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_JOBS)) == NULL ||
+       op->op == IPP_ANY_OPERATION)
     {
-     /*
-      * Add a new limit for Cancel-Jobs using the Pause-Printer limit as a
-      * template...
-      */
+      if ((op = cupsdFindPolicyOp(pol, IPP_PAUSE_PRINTER)) != NULL &&
+         op->op != IPP_ANY_OPERATION)
+      {
+       /*
+       * Add a new limit for Cancel-Jobs using the Pause-Printer limit as a
+       * template...
+       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Cancel-Jobs defined in policy %s "
-                     "- using Pause-Printer's policy.", pol->name);
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-Jobs defined in policy %s - using Pause-Printer's policy.", pol->name);
 
-      cupsdAddPolicyOp(pol, op, IPP_CANCEL_JOBS);
+       cupsdAddPolicyOp(pol, op, IPP_CANCEL_JOBS);
+      }
+      else
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-Jobs defined in policy %s and no suitable template found.", pol->name);
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Cancel-Jobs defined in policy %s "
-                     "and no suitable template found.", pol->name);
-  }
 
-  if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_MY_JOBS)) == NULL ||
-      op->op == IPP_ANY_OPERATION)
-  {
-    if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
-       op->op != IPP_ANY_OPERATION)
+    if ((op = cupsdFindPolicyOp(pol, IPP_CANCEL_MY_JOBS)) == NULL ||
+       op->op == IPP_ANY_OPERATION)
     {
-     /*
-      * Add a new limit for Cancel-My-Jobs using the Send-Document limit as
-      * a template...
-      */
+      if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
+         op->op != IPP_ANY_OPERATION)
+      {
+       /*
+       * Add a new limit for Cancel-My-Jobs using the Send-Document limit as
+       * a template...
+       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Cancel-My-Jobs defined in policy %s "
-                     "- using Send-Document's policy.", pol->name);
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-My-Jobs defined in policy %s - using Send-Document's policy.", pol->name);
 
-      cupsdAddPolicyOp(pol, op, IPP_CANCEL_MY_JOBS);
+       cupsdAddPolicyOp(pol, op, IPP_CANCEL_MY_JOBS);
+      }
+      else
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Cancel-My-Jobs defined in policy %s and no suitable template found.", pol->name);
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Cancel-My-Jobs defined in policy %s "
-                     "and no suitable template found.", pol->name);
-  }
 
-  if ((op = cupsdFindPolicyOp(pol, IPP_CLOSE_JOB)) == NULL ||
-      op->op == IPP_ANY_OPERATION)
-  {
-    if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
-       op->op != IPP_ANY_OPERATION)
+    if ((op = cupsdFindPolicyOp(pol, IPP_CLOSE_JOB)) == NULL ||
+       op->op == IPP_ANY_OPERATION)
     {
-     /*
-      * Add a new limit for Close-Job using the Send-Document limit as a
-      * template...
-      */
+      if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
+         op->op != IPP_ANY_OPERATION)
+      {
+       /*
+       * Add a new limit for Close-Job using the Send-Document limit as a
+       * template...
+       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Close-Job defined in policy %s "
-                     "- using Send-Document's policy.", pol->name);
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Close-Job defined in policy %s - using Send-Document's policy.", pol->name);
 
-      cupsdAddPolicyOp(pol, op, IPP_CLOSE_JOB);
+       cupsdAddPolicyOp(pol, op, IPP_CLOSE_JOB);
+      }
+      else
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for Close-Job defined in policy %s and no suitable template found.", pol->name);
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for Close-Job defined in policy %s "
-                     "and no suitable template found.", pol->name);
-  }
 
-  if ((op = cupsdFindPolicyOp(pol, CUPS_GET_DOCUMENT)) == NULL ||
-      op->op == IPP_ANY_OPERATION)
-  {
-    if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
-       op->op != IPP_ANY_OPERATION)
+    if ((op = cupsdFindPolicyOp(pol, CUPS_GET_DOCUMENT)) == NULL ||
+       op->op == IPP_ANY_OPERATION)
     {
-     /*
-      * Add a new limit for CUPS-Get-Document using the Send-Document
-      * limit as a template...
-      */
+      if ((op = cupsdFindPolicyOp(pol, IPP_SEND_DOCUMENT)) != NULL &&
+         op->op != IPP_ANY_OPERATION)
+      {
+       /*
+       * Add a new limit for CUPS-Get-Document using the Send-Document
+       * limit as a template...
+       */
 
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for CUPS-Get-Document defined in policy %s "
-                     "- using Send-Document's policy.", pol->name);
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for CUPS-Get-Document defined in policy %s - using Send-Document's policy.", pol->name);
 
-      cupsdAddPolicyOp(pol, op, CUPS_GET_DOCUMENT);
+       cupsdAddPolicyOp(pol, op, CUPS_GET_DOCUMENT);
+      }
+      else
+       cupsdLogMessage(CUPSD_LOG_WARN, "No limit for CUPS-Get-Document defined in policy %s and no suitable template found.", pol->name);
     }
-    else
-      cupsdLogMessage(CUPSD_LOG_WARN,
-                     "No limit for CUPS-Get-Document defined in policy %s "
-                     "and no suitable template found.", pol->name);
   }
 
  /*
@@ -4228,18 +4213,14 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
 
   if (!pol->job_access)
   {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                   "No JobPrivateAccess defined in policy %s "
-                   "- using defaults.", pol->name);
+    cupsdLogMessage(CUPSD_LOG_WARN, "No JobPrivateAccess defined in policy %s - using defaults.", pol->name);
     cupsdAddString(&(pol->job_access), "@OWNER");
     cupsdAddString(&(pol->job_access), "@SYSTEM");
   }
 
   if (!pol->job_attrs)
   {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                   "No JobPrivateValues defined in policy %s "
-                   "- using defaults.", pol->name);
+    cupsdLogMessage(CUPSD_LOG_WARN, "No JobPrivateValues defined in policy %s - using defaults.", pol->name);
     cupsdAddString(&(pol->job_attrs), "job-name");
     cupsdAddString(&(pol->job_attrs), "job-originating-host-name");
     cupsdAddString(&(pol->job_attrs), "job-originating-user-name");
@@ -4248,18 +4229,14 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
 
   if (!pol->sub_access)
   {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                   "No SubscriptionPrivateAccess defined in policy %s "
-                   "- using defaults.", pol->name);
+    cupsdLogMessage(CUPSD_LOG_WARN, "No SubscriptionPrivateAccess defined in policy %s - using defaults.", pol->name);
     cupsdAddString(&(pol->sub_access), "@OWNER");
     cupsdAddString(&(pol->sub_access), "@SYSTEM");
   }
 
   if (!pol->sub_attrs)
   {
-    cupsdLogMessage(CUPSD_LOG_WARN,
-                   "No SubscriptionPrivateValues defined in policy %s "
-                   "- using defaults.", pol->name);
+    cupsdLogMessage(CUPSD_LOG_WARN, "No SubscriptionPrivateValues defined in policy %s - using defaults.", pol->name);
     cupsdAddString(&(pol->sub_attrs), "notify-events");
     cupsdAddString(&(pol->sub_attrs), "notify-pull-method");
     cupsdAddString(&(pol->sub_attrs), "notify-recipient-uri");
@@ -4270,5 +4247,5 @@ set_policy_defaults(cupsd_policy_t *pol)/* I - Policy */
 
 
 /*
- * End of "$Id: conf.c 12689 2015-06-03 19:49:54Z msweet $".
+ * End of "$Id: conf.c 12819 2015-07-31 13:52:00Z msweet $".
  */
index 8b279025e8ac7728c33e6f1dd352d16cead20aed..7da6572384319b81047ff8af8d98914228107252 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: cups-driverd.cxx 12733 2015-06-12 01:21:05Z msweet $"
  *
  * PPD/driver support for CUPS.
  *
@@ -33,7 +33,7 @@
  * Constants...
  */
 
-#define PPD_SYNC       0x50504437      /* Sync word for ppds.dat (PPD7) */
+#define PPD_SYNC       0x50504438      /* Sync word for ppds.dat (PPD8) */
 #define PPD_MAX_LANG   32              /* Maximum languages */
 #define PPD_MAX_PROD   32              /* Maximum products */
 #define PPD_MAX_VERS   32              /* Maximum versions */
 #define PPD_TYPE_PDF           1       /* PDF PPD */
 #define PPD_TYPE_RASTER                2       /* CUPS raster PPD */
 #define PPD_TYPE_FAX           3       /* Facsimile/MFD PPD */
-#define PPD_TYPE_UNKNOWN       4       /* Other/hybrid PPD */
-#define PPD_TYPE_DRV           5       /* Driver info file */
-#define PPD_TYPE_ARCHIVE       6       /* Archive file */
+#define PPD_TYPE_OBJECT_ANY    4       /* 3D (AMF/STL/g-code) PPD */
+#define PPD_TYPE_OBJECT_DIRECT 5       /* 3D (AMF/STL/g-code) PPD over any connection */
+#define PPD_TYPE_OBJECT_STORAGE        6       /* 3D (AMF/STL/g-code) PPD for storage to SD card, etc. */
+#define PPD_TYPE_UNKNOWN       7       /* Other/hybrid PPD */
+#define PPD_TYPE_DRV           8       /* Driver info file */
+#define PPD_TYPE_ARCHIVE       9       /* Archive file */
 
 #define TAR_BLOCK      512             /* Number of bytes in a block */
 #define TAR_BLOCKS     10              /* Blocking factor */
@@ -135,6 +138,9 @@ static const char * const PPDTypes[] =      /* ppd-type values */
                          "pdf",
                          "raster",
                          "fax",
+                         "object",
+                         "object-direct",
+                         "object-storage",
                          "unknown",
                          "drv",
                          "archive"
@@ -1172,11 +1178,11 @@ list_ppds(int        request_id,        /* I - Request ID */
   load_drivers(include, exclude);
 
  /*
-  * Add the raw and IPP Everywhere drivers...
+  * Add the raw driver...
   */
 
-  add_ppd("", "everywhere", "en", "Generic", "IPP Everywhere", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "everywhere");
-  add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0, PPD_TYPE_UNKNOWN, "raw");
+  add_ppd("", "raw", "en", "Raw", "Raw Queue", "", "", "", 0, 0, 0,
+          PPD_TYPE_UNKNOWN, "raw");
 
  /*
   * Send IPP attributes...
@@ -2095,12 +2101,28 @@ load_ppd(const char  *filename,         /* I - Real filename */
       if (!_cups_strncasecmp(ptr, "true", 4))
        type = PPD_TYPE_FAX;
     }
-    else if (!strncmp(line, "*cupsFilter:", 12) && type == PPD_TYPE_POSTSCRIPT)
+    else if ((!strncmp(line, "*cupsFilter:", 12) || !strncmp(line, "*cupsFilter2:", 13)) && type == PPD_TYPE_POSTSCRIPT)
     {
       if (strstr(line + 12, "application/vnd.cups-raster"))
        type = PPD_TYPE_RASTER;
       else if (strstr(line + 12, "application/vnd.cups-pdf"))
        type = PPD_TYPE_PDF;
+      else if (strstr(line + 12, "application/amf") ||
+               strstr(line + 12, "application/g-code") ||
+               strstr(line + 12, "application/sla"))
+       type = PPD_TYPE_OBJECT_ANY;
+    }
+    else if (!strncmp(line, "*cups3DWorkflows:", 17))
+    {
+      int is_direct = strstr(line + 17, "direct") != NULL;
+      int is_storage = strstr(line + 17, "storage") != NULL;
+
+      if (is_direct && !is_storage)
+        type = PPD_TYPE_OBJECT_DIRECT;
+      if (!is_direct && is_storage)
+        type = PPD_TYPE_OBJECT_STORAGE;
+      else
+        type = PPD_TYPE_OBJECT_ANY;
     }
     else if (!strncmp(line, "*cupsModelNumber:", 17))
       sscanf(line, "*cupsModelNumber:%d", &model_number);
@@ -2903,5 +2925,5 @@ regex_string(const char *s)               /* I - String to compare */
 
 
 /*
- * End of "$Id: cups-driverd.cxx 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: cups-driverd.cxx 12733 2015-06-12 01:21:05Z msweet $".
  */
index defccb16ed794b69298d161686ca1168ec1a8157..5c50f9bed8967a32001950118ed1c16256454de5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $"
+ * "$Id: ipp.c 12777 2015-07-07 17:24:06Z msweet $"
  *
  * IPP routines for the CUPS scheduler.
  *
@@ -3312,6 +3312,8 @@ cancel_all_jobs(cupsd_client_t  *con,     /* I - Client connection */
   }
 
   con->response->request.status.status_code = IPP_OK;
+
+  cupsdCheckJobs();
 }
 
 
@@ -11148,5 +11150,5 @@ validate_user(cupsd_job_t    *job,      /* I - Job */
 
 
 /*
- * End of "$Id: ipp.c 12700 2015-06-08 18:32:35Z msweet $".
+ * End of "$Id: ipp.c 12777 2015-07-07 17:24:06Z msweet $".
  */
index d572a6433610152bdd02fd147cd8d943565028c4..e6b86b7b76cf8d398cdb0f96aac2a97a41fc4627 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $"
+ * "$Id: job.c 12777 2015-07-07 17:24:06Z msweet $"
  *
  * Job management routines for the CUPS scheduler.
  *
@@ -213,8 +213,6 @@ cupsdCancelJobs(const char *dest,   /* I - Destination to cancel */
                         "Job canceled by user.");
     }
   }
-
-  cupsdCheckJobs();
 }
 
 
@@ -392,7 +390,9 @@ cupsdCheckJobs(void)
          * Start the job...
          */
 
+         cupsArraySave(ActiveJobs);
          start_job(job, printer);
+         cupsArrayRestore(ActiveJobs);
        }
       }
     }
@@ -3524,13 +3524,6 @@ finalize_job(cupsd_job_t *job,           /* I - Job */
 
   job->printer->job = NULL;
   job->printer      = NULL;
-
- /*
-  * Try printing another job...
-  */
-
-  if (printer_state != IPP_PRINTER_STOPPED)
-    cupsdCheckJobs();
 }
 
 
@@ -4847,6 +4840,8 @@ update_job(cupsd_job_t *job)              /* I - Job to check */
                *ptr;                   /* Pointer update... */
   int          loglevel,               /* Log level for message */
                event = 0;              /* Events? */
+  cupsd_printer_t *printer = job->printer;
+                                       /* Printer */
   static const char * const levels[] = /* Log levels */
                {
                  "NONE",
@@ -5220,10 +5215,11 @@ update_job(cupsd_job_t *job)            /* I - Job to check */
     finalize_job(job, 1);
 
    /*
-    * Check for new jobs...
+    * Try printing another job...
     */
 
-    cupsdCheckJobs();
+    if (printer->state != IPP_PRINTER_STOPPED)
+      cupsdCheckJobs();
   }
 }
 
@@ -5343,5 +5339,5 @@ update_job_attrs(cupsd_job_t *job,        /* I - Job to update */
 
 
 /*
- * End of "$Id: job.c 12700 2015-06-08 18:32:35Z msweet $".
+ * End of "$Id: job.c 12777 2015-07-07 17:24:06Z msweet $".
  */
index 85202d3e37aaa938fb5677be464c204820fea4c5..a5a69e0823e62e09bd80f0c3abf53eee0b78b6fe 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $"
+ * "$Id: log.c 12816 2015-07-30 15:38:57Z msweet $"
  *
  * Log file routines for the CUPS scheduler.
  *
@@ -595,6 +595,7 @@ cupsdLogJob(cupsd_job_t *job,               /* I - Job */
     asl_object_t       m;              /* Log message */
     char               job_id[32],     /* job-id string */
                        completed[32];  /* job-impressions-completed string */
+    cupsd_printer_t *printer = job ? (job->printer ? job->printer : (job->dest ? cupsdFindDest(job->dest) : NULL)) : NULL;
     static const char * const job_states[] =
     {                                  /* job-state strings */
       "Pending",
@@ -606,19 +607,23 @@ cupsdLogJob(cupsd_job_t *job,             /* I - Job */
       "Completed"
     };
 
-    snprintf(job_id, sizeof(job_id), "%d", job->id);
-
     m = asl_new(ASL_TYPE_MSG);
     asl_set(m, ASL_KEY_FACILITY, "org.cups.cupsd");
-    asl_set(m, PWG_Event, "JobStateChanged");
-    asl_set(m, PWG_ServiceURI, job->printer->uri);
-    asl_set(m, PWG_JobID, job_id);
-    asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
-
-    if (job->impressions)
+    if (printer)
+      asl_set(m, PWG_ServiceURI, printer->uri);
+    if (job)
     {
-      snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
-      asl_set(m, PWG_JobImpressionsCompleted, completed);
+      snprintf(job_id, sizeof(job_id), "%d", job->id);
+
+      asl_set(m, PWG_Event, "JobStateChanged");
+      asl_set(m, PWG_JobID, job_id);
+      asl_set(m, PWG_JobState, job_states[job->state_value - IPP_JSTATE_PENDING]);
+
+      if (job->impressions)
+      {
+       snprintf(completed, sizeof(completed), "%d", ippGetInteger(job->impressions, 0));
+       asl_set(m, PWG_JobImpressionsCompleted, completed);
+      }
     }
 
     va_start(ap, message);
@@ -632,6 +637,7 @@ cupsdLogJob(cupsd_job_t *job,               /* I - Job */
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
   if (!strcmp(ErrorLog, "syslog"))
   {
+    cupsd_printer_t *printer = job->printer ? job->printer : job->dest ? cupsdFindDest(job->dest) : NULL;
     static const char * const job_states[] =
     {                                  /* job-state strings */
       "Pending",
@@ -655,17 +661,22 @@ cupsdLogJob(cupsd_job_t *job,             /* I - Job */
 
     va_end(ap);
 
-    sd_journal_send("MESSAGE=%s", log_line,
-                    "PRIORITY=%i", log_levels[level],
-                   PWG_Event"=JobStateChanged",
-                   PWG_ServiceURI"=%s", job->printer->uri,
-                   PWG_JobID"=%d", job->id,
-                   PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
-                   PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
-                   NULL);
+    if (job)
+      sd_journal_send("MESSAGE=%s", log_line,
+                     "PRIORITY=%i", log_levels[level],
+                     PWG_Event"=JobStateChanged",
+                     PWG_ServiceURI"=%s", printer ? printer->uri : "",
+                     PWG_JobID"=%d", job->id,
+                     PWG_JobState"=%s", job_states[job->state_value - IPP_JSTATE_PENDING],
+                     PWG_JobImpressionsCompleted"=%d", ippGetInteger(job->impressions, 0),
+                     NULL);
+    else
+      sd_journal_send("MESSAGE=%s", log_line,
+                     "PRIORITY=%i", log_levels[level],
+                     NULL);
+
     return (1);
   }
-
 #endif /* HAVE_ASL_H */
 
  /*
@@ -812,7 +823,9 @@ cupsdLogMessage(int        level,   /* I - Log level */
 #elif defined(HAVE_SYSTEMD_SD_JOURNAL_H)
   if (!strcmp(ErrorLog, "syslog"))
   {
+    va_start(ap, message);
     sd_journal_printv(log_levels[level], message, ap);
+    va_end(ap);
     return (1);
   }
 #endif /* HAVE_ASL_H */
@@ -885,7 +898,7 @@ cupsdLogPage(cupsd_job_t *job,              /* I - Job being printed */
            break;
 
         case 'p' :                     /* Printer name */
-           strlcpy(bufptr, job->printer->name, sizeof(buffer) - (size_t)(bufptr - buffer));
+           strlcpy(bufptr, job->dest, sizeof(buffer) - (size_t)(bufptr - buffer));
            bufptr += strlen(bufptr);
            break;
 
@@ -1497,5 +1510,5 @@ format_log_line(const char *message,      /* I - Printf-style format string */
 
 
 /*
- * End of "$Id: log.c 12691 2015-06-04 18:00:31Z msweet $".
+ * End of "$Id: log.c 12816 2015-07-30 15:38:57Z msweet $".
  */
index feb44689f178a5f4c5d0a68f37aded0e136a6ac4..61956b74d1d8ea9f0019a228ec6ecd4bb10150c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $"
+ * "$Id: printers.c 12733 2015-06-12 01:21:05Z msweet $"
  *
  * Printer routines for the CUPS scheduler.
  *
@@ -3990,10 +3990,10 @@ load_ppd(cupsd_printer_t *p)            /* I - Printer */
 
     if (ppd->num_sizes == 0 || !p->pc)
     {
-      if (!ppdFindAttr(ppd, "APScannerOnly", NULL))
+      if (!ppdFindAttr(ppd, "APScannerOnly", NULL) && !ppdFindAttr(ppd, "cups3D", NULL))
        cupsdLogMessage(CUPSD_LOG_CRIT,
                        "The PPD file for printer %s contains no media "
-                       "options and is therefore invalid!", p->name);
+                       "options and is therefore invalid.", p->name);
 
       ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD,
                   "media-default", NULL, "unknown");
@@ -4682,6 +4682,13 @@ load_ppd(cupsd_printer_t *p)             /* I - Printer */
                   "printer-commands", NULL, "none");
     }
 
+   /*
+    * 3D printer support...
+    */
+
+    if (ppdFindAttr(ppd, "cups3D", NULL))
+      p->type |= CUPS_PRINTER_3D;
+
    /*
     * Show current and available port monitors for this printer...
     */
@@ -5071,5 +5078,5 @@ write_xml_string(cups_file_t *fp, /* I - File to write to */
 
 
 /*
- * End of "$Id: printers.c 12722 2015-06-08 22:00:19Z msweet $".
+ * End of "$Id: printers.c 12733 2015-06-12 01:21:05Z msweet $".
  */
index 88560dac1b603c627d69c1001d18d6fc09ce18bc..6bf7c0a8458204e77c5296121b7ac0e7d3f4c715 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
+# "$Id: run-stp-tests.sh 12820 2015-07-31 14:12:25Z msweet $"
 #
 # Perform the complete set of IPP compliance tests specified in the
 # CUPS Software Test Plan.
@@ -996,7 +996,7 @@ fi
 
 # Warning log messages
 count=`$GREP '^W ' $BASE/log/error_log | $GREP -v CreateProfile | wc -l | awk '{print $1}'`
-if test $count != 18; then
+if test $count != 8; then
        echo "FAIL: $count warning messages, expected 18."
        $GREP '^W ' $BASE/log/error_log
        echo "<P>FAIL: $count warning messages, expected 18.</P>" >>$strfile
@@ -1113,5 +1113,5 @@ if test $fail != 0; then
 fi
 
 #
-# End of "$Id: run-stp-tests.sh 12696 2015-06-08 15:05:11Z msweet $"
+# End of "$Id: run-stp-tests.sh 12820 2015-07-31 14:12:25Z msweet $"
 #
index 156c42d80b37bfd4c06929d09783e2c70d5cef55..81cbb8a090a15236bc3216899a9bb696e00fe621 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $"
+ * "$Id: config.h 12763 2015-06-24 20:12:22Z msweet $"
  *
  * Configuration file for CUPS on Windows.
  *
@@ -96,8 +96,8 @@ typedef unsigned long useconds_t;
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.1svn"
-#define CUPS_MINIMAL "CUPS/2.1svn"
+#define CUPS_SVERSION "CUPS v2.1b2"
+#define CUPS_MINIMAL "CUPS/2.1b2"
 
 
 /*
@@ -799,5 +799,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 12269 2014-11-20 15:37:29Z msweet $".
+ * End of "$Id: config.h 12763 2015-06-24 20:12:22Z msweet $".
  */
index 37c0a31101fcd5af687746741fed2ac3485728b4..6f85ea915268045a901fe26ea58a6ca1a16db7d5 100644 (file)
                278C58E8136B64B000836530 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = /System/Library/Frameworks/SystemConfiguration.framework; sourceTree = "<absolute>"; };
                27A0347B1A8BDB1300650675 /* lpadmin */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lpadmin; sourceTree = BUILT_PRODUCTS_DIR; };
                27D3037D134148CB00F022B1 /* libcups2.def */ = {isa = PBXFileReference; lastKnownFileType = text; name = libcups2.def; path = ../cups/libcups2.def; sourceTree = "<group>"; };
+               27F89DA21B3AC43B00E5A4B7 /* testraster.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = testraster.c; path = ../filter/testraster.c; sourceTree = "<group>"; };
                720DD6C21358FD5F0064AA82 /* snmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = snmp; sourceTree = BUILT_PRODUCTS_DIR; };
                720DD6D21358FDDE0064AA82 /* snmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = snmp.c; path = ../backend/snmp.c; sourceTree = "<group>"; };
                72220EAE1333047D00FCA411 /* libcups.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libcups.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
                                727EF049192E3544001EF690 /* testoptions.c */,
                                727EF04A192E3544001EF690 /* testppd.c */,
                                727EF04B192E3544001EF690 /* testpwg.c */,
+                               27F89DA21B3AC43B00E5A4B7 /* testraster.c */,
                                727EF04C192E3544001EF690 /* testsnmp.c */,
                                727EF04E192E3602001EF690 /* testspeed.c */,
                                727EF04F192E3602001EF690 /* testsub.c */,
index abe5107c683b64b20a8145cf5873c9722a46f706..e145efc30584bd53db73e3bd96ba2a960fd468f7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $"
+ * "$Id: config.h 12763 2015-06-24 20:12:22Z msweet $"
  *
  * Configuration file for CUPS and Xcode.
  *
@@ -22,8 +22,8 @@
  * Version of software...
  */
 
-#define CUPS_SVERSION "CUPS v2.1svn"
-#define CUPS_MINIMAL "CUPS/2.1svn"
+#define CUPS_SVERSION "CUPS v2.1b2"
+#define CUPS_MINIMAL "CUPS/2.1b2"
 
 
 /*
@@ -738,5 +738,5 @@ static __inline int _cups_abs(int i) { return (i < 0 ? -i : i); }
 #endif /* !_CUPS_CONFIG_H_ */
 
 /*
- * End of "$Id: config.h 12687 2015-06-03 17:19:04Z msweet $".
+ * End of "$Id: config.h 12763 2015-06-24 20:12:22Z msweet $".
  */