]> git.ipfire.org Git - people/amarx/ipfire-3.x.git/blobdiff - cups/patches/cups-snmp-quirks.patch
Move all packages to root.
[people/amarx/ipfire-3.x.git] / cups / patches / cups-snmp-quirks.patch
diff --git a/cups/patches/cups-snmp-quirks.patch b/cups/patches/cups-snmp-quirks.patch
new file mode 100644 (file)
index 0000000..0308676
--- /dev/null
@@ -0,0 +1,115 @@
+diff -up cups-1.4.3/backend/snmp-supplies.c.snmp-quirks cups-1.4.3/backend/snmp-supplies.c
+--- cups-1.4.3/backend/snmp-supplies.c.snmp-quirks     2009-11-20 01:27:57.000000000 +0000
++++ cups-1.4.3/backend/snmp-supplies.c 2010-06-09 16:27:05.515019804 +0100
+@@ -38,6 +38,13 @@
+ /*
++ * Printer quirks...
++ */
++
++#define QUIRK_CAPACITY        (1<<0)
++
++
++/*
+  * Local structures...
+  */
+@@ -57,6 +64,12 @@ typedef struct                              /**** Printer state ta
+   const char  *keyword;               /* IPP printer-state-reasons keyword */
+ } backend_state_t;
++typedef struct                                /**** Quirk names table ****/
++{
++  int         bit;                    /* Quirk bit */
++  const char  *keyword;               /* cupsSNMPQuirks keyword */
++} quirk_name_t;
++
+ /*
+  * Local globals...
+@@ -68,6 +81,7 @@ static int           current_state = -1;
+ static int            charset = -1;   /* Character set for supply names */
+ static int            num_supplies = 0;
+                                       /* Number of supplies found */
++static int            quirks = 0;     /* Printer quirks */
+ static backend_supplies_t supplies[CUPS_MAX_SUPPLIES];
+                                       /* Supply information */
+@@ -153,6 +167,15 @@ static const backend_state_t const print
+                         { CUPS_TC_outputFull, "output-area-full-warning" }
+                       };
++static const quirk_name_t const quirk_names[] =
++                      {
++                       /*
++                        * The prtMarkerSuppliesLevel values are
++                        * percentages, not levels relative to the
++                        * stated capacity.
++                        */
++                        { QUIRK_CAPACITY, "capacity" }
++                      };
+ /*
+  * Local functions...
+@@ -208,6 +231,9 @@ backendSNMPSupplies(
+       if (i)
+         *ptr++ = ',';
++      if (quirks & QUIRK_CAPACITY)
++      supplies[i].max_capacity = 100;
++
+       if (supplies[i].max_capacity > 0)
+         sprintf(ptr, "%d", 100 * supplies[i].level / supplies[i].max_capacity);
+       else
+@@ -305,6 +331,7 @@ backend_init_supplies(
+     http_addr_t *addr)                        /* I - Printer address */
+ {
+   int         i,                      /* Looping var */
++              len,                    /* Quirk name length */
+               type;                   /* Current marker type */
+   cups_file_t *cachefile;             /* Cache file */
+   const char  *cachedir;              /* CUPS_CACHEDIR value */
+@@ -366,6 +393,7 @@ backend_init_supplies(
+   current_state = -1;
+   num_supplies  = -1;
+   charset       = -1;
++  quirks      = 0;
+   memset(supplies, 0, sizeof(supplies));
+@@ -381,6 +409,34 @@ backend_init_supplies(
+     return;
+   }
++  if (ppd &&
++      (ppdattr = ppdFindAttr(ppd, "cupsSNMPQuirks", NULL)) != NULL &&
++      ppdattr->value)
++  {
++    ptr = ppdattr->value;
++    while (*ptr != '\0')
++    {
++     /*
++      * Match keyword against quirk_names table.
++      */
++
++      for (i = 0; i < sizeof (quirk_names) / sizeof (quirk_names[0]); i++)
++      {
++      len = strlen (quirk_names[i].keyword);
++      if (!strncmp (ptr, quirk_names[i].keyword, len) &&
++          (ptr[len] == '\0' || ptr[len] == ' '))
++        quirks |= quirk_names[i].bit;
++      }
++
++     /*
++      * Advance to next keyword.
++      */
++
++      ptr += strcspn (ptr, " ");
++      ptr += strspn (ptr, " ");
++    }
++  }
++
+   ppdClose(ppd);
+  /*