]> git.ipfire.org Git - thirdparty/cups.git/blobdiff - cups/testconflicts.c
Import CUPS v1.7.1
[thirdparty/cups.git] / cups / testconflicts.c
index 6d526493ba668a65dadacaa7ff7dbb9018a29239..0ccca82524ec192a66ac76966744f58443beb02e 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * "$Id$"
+ * "$Id: testconflicts.c 3755 2012-03-30 05:59:14Z msweet $"
  *
- *   PPD constraint test program for the Common UNIX Printing System (CUPS).
+ *   PPD constraint test program for CUPS.
  *
- *   Copyright 2008 by Apple Inc.
+ *   Copyright 2008-2012 by Apple Inc.
  *
  *   These coded instructions, statements, and computer programs are the
  *   property of Apple Inc. and are protected by Federal copyright
@@ -23,7 +23,8 @@
  */
 
 #include "cups.h"
-#include "string.h"
+#include "ppd.h"
+#include "string-private.h"
 
 
 /*
@@ -36,9 +37,14 @@ main(int  argc,                              /* I - Number of command-line arguments */
 {
   int          i;                      /* Looping var */
   ppd_file_t   *ppd;                   /* PPD file loaded from disk */
-  char         line[256];              /* Input buffer */
+  char         line[256],              /* Input buffer */
+               *ptr,                   /* Pointer into buffer */
+               *optr,                  /* Pointer to first option name */
+               *cptr;                  /* Pointer to first choice */
   int          num_options;            /* Number of options */
   cups_option_t        *options;               /* Options */
+  char         *option,                /* Current option */
+               *choice;                /* Current choice */
 
 
   if (argc != 2)
@@ -61,38 +67,72 @@ main(int  argc,                             /* I - Number of command-line arguments */
 
   ppdMarkDefaults(ppd);
 
+  option = NULL;
+  choice = NULL;
+
   for (;;)
   {
     num_options = 0;
     options     = NULL;
 
-    if (!cupsResolveConflicts(ppd, NULL, NULL, &num_options, &options))
+    if (!cupsResolveConflicts(ppd, option, choice, &num_options, &options))
       puts("Unable to resolve conflicts!");
-    else if (num_options > 0)
+    else if ((!option && num_options > 0) || (option && num_options > 1))
     {
       fputs("Resolved conflicts with the following options:\n   ", stdout);
       for (i = 0; i < num_options; i ++)
-       printf(" %s=%s", options[i].name, options[i].value);
+        if (!option || _cups_strcasecmp(option, options[i].name))
+         printf(" %s=%s", options[i].name, options[i].value);
       putchar('\n');
 
       cupsFreeOptions(num_options, options);
     }
 
+    if (option)
+    {
+      free(option);
+      option = NULL;
+    }
+
+    if (choice)
+    {
+      free(choice);
+      choice = NULL;
+    }
+
     printf("\nNew Option(s): ");
     fflush(stdout);
     if (!fgets(line, sizeof(line), stdin) || line[0] == '\n')
       break;
 
-    num_options = cupsParseOptions(line, 0, &options);
+    for (ptr = line; isspace(*ptr & 255); ptr ++);
+    for (optr = ptr; *ptr && *ptr != '='; ptr ++);
+    if (!*ptr)
+      break;
+    for (*ptr++ = '\0', cptr = ptr; *ptr && !isspace(*ptr & 255); ptr ++);
+    if (!*ptr)
+      break;
+    *ptr++ = '\0';
+
+    option      = strdup(optr);
+    choice      = strdup(cptr);
+    num_options = cupsParseOptions(ptr, 0, &options);
+
+    ppdMarkOption(ppd, option, choice);
     if (cupsMarkOptions(ppd, num_options, options))
       puts("Options Conflict!");
     cupsFreeOptions(num_options, options);
   }
 
+  if (option)
+    free(option);
+  if (choice)
+    free(choice);
+
   return (0);
 }
 
 
 /*
- * End of "$Id$".
+ * End of "$Id: testconflicts.c 3755 2012-03-30 05:59:14Z msweet $".
  */