[prev in list] [next in list] [prev in thread] [next in thread] 

List:       cups-commit
Subject:    [cups.commit] [CUPS] r9703 - trunk/scheduler
From:       cups-dev () easysw ! com
Date:       2011-04-20 21:59:16
Message-ID: 10474-cups.commit () news ! easysw ! com
[Download RAW message or body]

Author: mike
Date: 2011-04-20 14:59:16 -0700 (Wed, 20 Apr 2011)
New Revision: 9703
Log:
Add support for Mac OS X driver bundles.


Modified:
   trunk/scheduler/cups-driverd.cxx

Modified: trunk/scheduler/cups-driverd.cxx
===================================================================
--- trunk/scheduler/cups-driverd.cxx	2011-04-20 21:16:08 UTC (rev 9702)
+++ trunk/scheduler/cups-driverd.cxx	2011-04-20 21:59:16 UTC (rev 9703)
@@ -543,8 +543,11 @@
   const char	*datadir;		/* CUPS_DATADIR env var */
   char		line[1024],		/* Line/filename */
 		message[2048];		/* status-message */
+#ifdef __APPLE__
+  const char	*printerDriver,		/* Pointer to .printerDriver extension */
+		*slash;			/* Pointer to next slash */
+#endif /* __APPLE__ */
 
-
   if (name[0] == '/' || strstr(name, "../") || strstr(name, "/.."))
   {
    /*
@@ -575,7 +578,19 @@
 
 #ifdef __APPLE__
   if (!strncmp(name, "System/Library/Printers/PPDs/Contents/Resources/", 48) ||
-      !strncmp(name, "Library/Printers/PPDs/Contents/Resources/", 41))
+      !strncmp(name, "Library/Printers/PPDs/Contents/Resources/", 41) ||
+      (!strncmp(name, "System/Library/Printers/", 24) &&
+       (printerDriver =
+	    strstr(name + 24,
+		   ".printerDriver/Contents/Resources/PPDs")) != NULL &&
+       (slash = strchr(name + 24, '/')) != NULL &&
+       slash > printerDriver) ||
+      (!strncmp(name, "Library/Printers/", 17) &&
+       (printerDriver =
+	    strstr(name + 17,
+		   ".printerDriver/Contents/Resources/PPDs")) != NULL &&
+       (slash = strchr(name + 17, '/')) != NULL &&
+       slash > printerDriver))
   {
    /*
     * Map ppd-name to Mac OS X standard locations...
@@ -583,7 +598,6 @@
 
     snprintf(line, sizeof(line), "/%s", name);
   }
-  else
 
 #elif defined(__linux)
   if (!strncmp(name, "lsb/usr/", 8))
@@ -872,10 +886,14 @@
   * Load PPDs from standard Mac OS X locations...
   */
 
+  load_ppds("/Library/Printers",
+            "Library/Printers", 0);
   load_ppds("/Library/Printers/PPDs/Contents/Resources",
             "Library/Printers/PPDs/Contents/Resources", 0);
   load_ppds("/Library/Printers/PPDs/Contents/Resources/en.lproj",
             "Library/Printers/PPDs/Contents/Resources/en.lproj", 0);
+  load_ppds("/System/Library/Printers",
+            "System/Library/Printers", 0);
   load_ppds("/System/Library/Printers/PPDs/Contents/Resources",
             "System/Library/Printers/PPDs/Contents/Resources", 0);
   load_ppds("/System/Library/Printers/PPDs/Contents/Resources/en.lproj",
@@ -1850,12 +1868,30 @@
       */
 
       if (descend)
+      {
 	if (!load_ppds(filename, name, 1))
 	{
 	  cupsDirClose(dir);
 	  return (1);
 	}
+      }
+      else if ((ptr = filename + strlen(filename) - 14) > filename &&
+	       !strcmp(ptr, ".printerDriver"))
+      {
+       /*
+        * Load PPDs in a printer driver bundle.
+	*/
 
+	strlcat(filename, "/Contents/Resources/PPDs", sizeof(filename));
+	strlcat(name, "/Contents/Resources/PPDs", sizeof(name));
+
+	if (!load_ppds(filename, name, 0))
+	{
+	  cupsDirClose(dir);
+	  return (1);
+	}
+      }
+
       continue;
     }
     else if ((ptr = filename + strlen(filename) - 6) > filename &&

_______________________________________________
cups-commit mailing list
cups-commit@easysw.com
http://lists.easysw.com/mailman/listinfo/cups-commit
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic