cups/cups-snmp-quirks.patch
Jiri Popelka e663022e55 1.4.7.
2011-06-28 11:48:01 +02:00

116 lines
2.9 KiB
Diff

diff -up cups-1.4.7/backend/snmp-supplies.c.snmp-quirks cups-1.4.7/backend/snmp-supplies.c
--- cups-1.4.7/backend/snmp-supplies.c.snmp-quirks 2011-03-10 04:50:59.000000000 +0100
+++ cups-1.4.7/backend/snmp-supplies.c 2011-06-28 11:11:57.944155996 +0200
@@ -49,6 +49,13 @@
/*
+ * Printer quirks...
+ */
+
+#define QUIRK_CAPACITY (1<<0)
+
+
+/*
* Local structures...
*/
@@ -68,6 +75,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...
@@ -79,6 +92,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 */
static int supply_state = -1;
@@ -180,6 +194,15 @@ static const backend_state_t const suppl
{ CUPS_TONER_EMPTY, "toner-empty-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...
@@ -233,6 +256,9 @@ backendSNMPSupplies(
for (i = 0, ptr = value; i < num_supplies; i ++, ptr += strlen(ptr))
{
+ if (quirks & QUIRK_CAPACITY)
+ supplies[i].max_capacity = 100;
+
percent = 100 * supplies[i].level / supplies[i].max_capacity;
if (percent <= 10)
@@ -406,6 +432,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 */
@@ -467,6 +494,7 @@ backend_init_supplies(
current_state = -1;
num_supplies = -1;
charset = -1;
+ quirks = 0;
memset(supplies, 0, sizeof(supplies));
@@ -482,6 +510,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);
/*