]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
The ppdhtml and ppdpo utilities crashed when the -D option was used before a
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 15 May 2015 19:16:58 +0000 (19:16 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Fri, 15 May 2015 19:16:58 +0000 (19:16 +0000)
driver information file (STR #4627)

git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@12633 a1ca3aef-8c08-0410-bb20-df032aa958be

CHANGES-2.0.txt
ppdc/ppdhtml.cxx
ppdc/ppdpo.cxx

index 01326f19dc463bead27c1ee1c360cf13f85a0d00..6e5db56c3f048a6f660f5ab0a6e55d77662569dc 100644 (file)
@@ -21,6 +21,8 @@ CHANGES IN CUPS V2.0.3
        - The sample Epson driver could crash (STR #4616)
        - The IPP backend now correctly monitors jobs
          (<rdar://problem/20495955>)
+       - The ppdhtml and ppdpo utilities crashed when the -D option was used
+         before a driver information file (STR #4627)
        - Added Russian translation (STR #4577)
 
 
index d5678898d386ba84c9af7f4787b7574c0109926a..881187636c60afa7feafe393d41c7d42ddc1335e 100644 (file)
@@ -1,21 +1,16 @@
 //
 // "$Id$"
 //
-//   PPD to HTML utility for the CUPS PPD Compiler.
+// PPD to HTML utility for the CUPS PPD Compiler.
 //
-//   Copyright 2007-2011 by Apple Inc.
-//   Copyright 2002-2005 by Easy Software Products.
+// Copyright 2007-2015 by Apple Inc.
+// Copyright 2002-2005 by Easy Software Products.
 //
-//   These coded instructions, statements, and computer programs are the
-//   property of Apple Inc. and are protected by Federal copyright
-//   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
-//   which should have been included with this file.  If this file is
-//   file is missing or damaged, see the license at "http://www.cups.org/".
-//
-// Contents:
-//
-//   main()  - Main entry for the PPD to HTML utility.
-//   usage() - Show usage and exit.
+// These coded instructions, statements, and computer programs are the
+// property of Apple Inc. and are protected by Federal copyright
+// law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+// which should have been included with this file.  If this file is
+// file is missing or damaged, see the license at "http://www.cups.org/".
 //
 
 //
@@ -58,7 +53,7 @@ main(int  argc,                               // I - Number of command-line arguments
   _cupsSetLocale(argv);
 
   // Scan the command-line...
-  src = 0;
+  src = new ppdcSource();
 
   for (i = 1; i < argc; i ++)
     if (argv[i][0] == '-')
@@ -97,65 +92,75 @@ main(int  argc,                             // I - Number of command-line arguments
     else
     {
       // Open and load the driver info file...
-      src = new ppdcSource(argv[i]);
-
-      // Create a composite group with all of the features from the
-      // drivers in the info file...
-      composite = new ppdcGroup("", "");
-
-      for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
-        for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next())
-         for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
-         {
-           if ((compo = composite->find_option(o->name->value)) == NULL)
-             composite->add_option(new ppdcOption(o));
-         }
-
-      puts("<html>");
-      printf("<head><title>Driver Summary for %s</title></head>\n", argv[i]);
-      printf("<body><h1>Driver Summary for %s</h1>\n", argv[i]);
-      printf("<p><table border='1'><thead><tr><th>Printer</th><th>Media Size</th>");
-      for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next())
-        printf("<th>%s</th>", compo->text->value);
-      puts("</tr></thead><tbody>");
-
-      // Write HTML summary...
-      for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
-      {
-        // Write the summary for this driver...
-       printf("<tr valign='top'><td nowrap>%s</td><td nowrap>", d->model_name->value);
-       for (size = (ppdcMediaSize *)d->sizes->first(); size;
-            size = (ppdcMediaSize *)d->sizes->next())
-          printf("%s<br>", size->text->value);
-        printf("</td>");
-
-        for (compo = (ppdcOption *)composite->options->first(); compo;
-            compo = (ppdcOption *)composite->options->next())
-         if ((o = d->find_option(compo->name->value)) != NULL)
-         {
-           printf("<td nowrap>");
-           for (c = (ppdcChoice *)o->choices->first(); c;
-                c = (ppdcChoice *)o->choices->next())
-             printf("%s<br>", c->text->value);
-           printf("</td>");
-         }
-         else
-           printf("<td>N/A</td>");
-
-        puts("</tr>");
-      }
-
-      puts("</tbody></table></p>");
-      puts("</body>");
-      puts("</html>");
-      // Delete the printer driver information...
-      composite->release();
-      src->release();
+      src->read_file(argv[i]);
+    }
+
+  if ((d = (ppdcDriver *)src->drivers->first()) != NULL)
+  {
+    // Create a composite group with all of the features from the
+    // drivers in the info file...
+    composite = new ppdcGroup("", "");
+
+    while (d != NULL)
+    {
+      for (g = (ppdcGroup *)d->groups->first(); g; g = (ppdcGroup *)d->groups->next())
+       for (o = (ppdcOption *)g->options->first(); o; o = (ppdcOption *)g->options->next())
+       {
+         if ((compo = composite->find_option(o->name->value)) == NULL)
+           composite->add_option(new ppdcOption(o));
+       }
+
+      d = (ppdcDriver *)src->drivers->next();
     }
 
-  // If no drivers have been loaded, display the program usage message.
-  if (!src)
+    puts("<html>");
+    printf("<head><title>Driver Summary for %s</title></head>\n", argv[i]);
+    printf("<body><h1>Driver Summary for %s</h1>\n", argv[i]);
+    printf("<p><table border='1'><thead><tr><th>Printer</th><th>Media Size</th>");
+    for (compo = (ppdcOption *)composite->options->first(); compo; compo = (ppdcOption *)composite->options->next())
+      printf("<th>%s</th>", compo->text->value);
+    puts("</tr></thead><tbody>");
+
+    // Write HTML summary...
+    for (d = (ppdcDriver *)src->drivers->first(); d; d = (ppdcDriver *)src->drivers->next())
+    {
+      // Write the summary for this driver...
+      printf("<tr valign='top'><td nowrap>%s</td><td nowrap>", d->model_name->value);
+      for (size = (ppdcMediaSize *)d->sizes->first(); size;
+          size = (ppdcMediaSize *)d->sizes->next())
+       printf("%s<br>", size->text->value);
+      printf("</td>");
+
+      for (compo = (ppdcOption *)composite->options->first(); compo;
+          compo = (ppdcOption *)composite->options->next())
+       if ((o = d->find_option(compo->name->value)) != NULL)
+       {
+         printf("<td nowrap>");
+         for (c = (ppdcChoice *)o->choices->first(); c;
+              c = (ppdcChoice *)o->choices->next())
+           printf("%s<br>", c->text->value);
+         printf("</td>");
+       }
+       else
+         printf("<td>N/A</td>");
+
+      puts("</tr>");
+    }
+
+    puts("</tbody></table></p>");
+    puts("</body>");
+    puts("</html>");
+
+    // Delete the printer driver information...
+    composite->release();
+  }
+  else
+  {
+    // If no drivers have been loaded, display the program usage message.
     usage();
+  }
+
+  src->release();
 
   // Return with no errors.
   return (0);
index 01513fd55f83ed621228136dfb8ee81e54a4ddff..132d4593e0dae075301fe42c7b33fdd2af3993ff 100644 (file)
@@ -1,22 +1,16 @@
 //
 // "$Id$"
 //
-//   PPD file message catalog program for the CUPS PPD Compiler.
+// PPD file message catalog program for the CUPS PPD Compiler.
 //
-//   Copyright 2007-2012 by Apple Inc.
-//   Copyright 2002-2005 by Easy Software Products.
+// Copyright 2007-2015 by Apple Inc.
+// Copyright 2002-2005 by Easy Software Products.
 //
-//   These coded instructions, statements, and computer programs are the
-//   property of Apple Inc. and are protected by Federal copyright
-//   law.  Distribution and use rights are outlined in the file "LICENSE.txt"
-//   which should have been included with this file.  If this file is
-//   file is missing or damaged, see the license at "http://www.cups.org/".
-//
-// Contents:
-//
-//   main()           - Main entry for the PPD compiler.
-//   add_ui_strings() - Add all UI strings from the driver.
-//   usage()          - Show usage and exit.
+// These coded instructions, statements, and computer programs are the
+// property of Apple Inc. and are protected by Federal copyright
+// law.  Distribution and use rights are outlined in the file "LICENSE.txt"
+// which should have been included with this file.  If this file is
+// file is missing or damaged, see the license at "http://www.cups.org/".
 //
 
 //
@@ -58,7 +52,7 @@ main(int  argc,                               // I - Number of command-line arguments
 
   // Scan the command-line...
   catalog = new ppdcCatalog("en");
-  src     = 0;
+  src     = new ppdcSource();
   verbose = 0;
   outfile = 0;
 
@@ -123,23 +117,28 @@ main(int  argc,                           // I - Number of command-line arguments
                        _("ppdc: Loading driver information file \"%s\"."),
                        argv[i]);
 
-      src = new ppdcSource(argv[i]);
+      src->read_file(argv[i]);
+    }
 
-      // Add UI strings...
-      for (d = (ppdcDriver *)src->drivers->first();
-           d;
-          d = (ppdcDriver *)src->drivers->next())
-      {
-       if (verbose)
-         _cupsLangPrintf(stderr, _("ppdc: Adding/updating UI text from %s."),
-                         argv[i]);
+  // If no drivers have been loaded, display the program usage message.
+  if ((d = (ppdcDriver *)src->drivers->first()) != NULL)
+  {
+    // Add UI strings...
+    while (d != NULL)
+    {
+      if (verbose)
+       _cupsLangPrintf(stderr, _("ppdc: Adding/updating UI text from %s."), argv[i]);
 
-        add_ui_strings(d, catalog);
-      }
+      add_ui_strings(d, catalog);
 
-      // Delete the printer driver information...
-      src->release();
+      d = (ppdcDriver *)src->drivers->next();
     }
+  }
+  else
+    usage();
+
+  // Delete the printer driver information...
+  src->release();
 
   // Write the message catalog...
   if (!outfile)
@@ -149,10 +148,6 @@ main(int  argc,                            // I - Number of command-line arguments
 
   catalog->release();
 
-  // If no drivers have been loaded, display the program usage message.
-  if (!src)
-    usage();
-
   // Return with no errors.
   return (0);
 }