--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/cups/patches/18104362.patch Fri Jul 31 02:20:49 2015 -0700
@@ -0,0 +1,213 @@
+/*-------------------------------------------------------------------------------------------------
+This patch is taken from the community.
+Details can be found at https://www.cups.org/str.php?L4627
+---------------------------------------------------------------------------------------------------*/
+
+--- ppdc/ppdpo.cxx 2009-04-03 10:35:17.000000000 -0700
++++ ppdc/ppdpo.cxx 2015-05-18 02:34:42.016321242 -0700
+@@ -58,7 +58,7 @@
+
+ // Scan the command-line...
+ catalog = new ppdcCatalog("en");
+- src = 0;
++ src = new ppdcSource();
+ verbose = 0;
+ outfile = 0;
+
+@@ -123,24 +123,26 @@
+ _("ppdc: Loading driver information file \"%s\"...\n"),
+ argv[i]);
+
+- src = new ppdcSource(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...\n"),
+- argv[i]);
+-
+- add_ui_strings(d, catalog);
+- }
++ src->read_file(argv[i]);
++ }
+
+- // Delete the printer driver information...
+- src->release();
++ // 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);
++ d = (ppdcDriver *)src->drivers->next();
+ }
++ }
++ else
++ usage();
++
++// Delete the printer driver information...
++ src->release();
+
+ // Write the message catalog...
+ if (!outfile)
+@@ -150,10 +152,6 @@
+
+ catalog->release();
+
+- // If no drivers have been loaded, display the program usage message.
+- if (!src)
+- usage();
+-
+ // Return with no errors.
+ return (0);
+ }
+
+
+
+
+--- ppdc/ppdhtml.cxx 2009-04-03 10:35:17.000000000 -0700
++++ ppdc/ppdhtml.cxx 2015-05-18 02:34:50.033654707 -0700
+@@ -58,7 +58,7 @@
+ _cupsSetLocale(argv);
+
+ // Scan the command-line...
+- src = 0;
++ src = new ppdcSource();
+
+ for (i = 1; i < argc; i ++)
+ if (argv[i][0] == '-')
+@@ -97,67 +97,75 @@
+ else
+ {
+ // Open and load the driver info file...
+- src = new ppdcSource(argv[i]);
++ 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("", "");
+
+- 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();
++ 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();
+ }
++ 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>");
+
+- // If no drivers have been loaded, display the program usage message.
+- if (!src)
++ // 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 with no errors.
+ return (0);
+ }
+