| diff --git a/CUPS.xs b/CUPS.xs |
| index 2da9558..109f73f 100644 |
| --- a/CUPS.xs |
| +++ b/CUPS.xs |
| @@ -5,9 +5,17 @@ |
| #include "ppport.h" |
| |
| #include <cups/cups.h> |
| +#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) |
| +#define HAVE_CUPS_1_6 1 |
| +#endif |
| + |
| /*#include <cups/backend.h>*/ |
| #include <cups/http.h> |
| -#include <cups/image.h> |
| +#ifdef HAVE_CUPS_1_6 |
| + #include <cupsfilters/image.h> |
| +#else |
| + #include <cups/image.h> |
| +#endif |
| #include <cups/ipp.h> |
| #include <cups/ppd.h> |
| #include <cups/file.h> |
| @@ -19,6 +27,17 @@ |
| #include "const-c.inc" |
| #include "packer.c" |
| |
| +#ifndef HAVE_CUPS_1_6 |
| +#define ippGetGroupTag(attr) attr->group_tag |
| +#define ippGetName(attr) attr->name |
| +#define ippGetValueTag(attr) attr->value_tag |
| +#define ippGetInteger(attr, element) attr->values[element].integer |
| +#define ippGetString(attr, element, language) attr->values[element].string.text |
| +#define ippGetStatusCode(ipp) ipp->request.status.status_code |
| +#define ippFirstAttribute(ipp) ipp->current = ipp->attrs |
| +#define ippNextAttribute(ipp) ipp->current = ipp->current->next |
| +#endif |
| + |
| static SV *password_cb = (SV*) NULL; |
| |
| const char * |
| @@ -200,7 +219,7 @@ NETCUPS_getPPDMakes() |
| if (response != NULL) { |
| attr = ippFindAttribute(response, "ppd-make", IPP_TAG_TEXT); |
| rv = sv_newmortal(); |
| - sv_setpv(rv, attr->values[0].string.text); |
| + sv_setpv(rv, ippGetString(attr, 0, NULL)); |
| XPUSHs(rv); |
| count++; |
| |
| @@ -211,7 +230,7 @@ NETCUPS_getPPDMakes() |
| } |
| |
| rv = sv_newmortal(); |
| - sv_setpv(rv, attr->values[0].string.text); |
| + sv_setpv(rv, ippGetString(attr, 0, NULL)); |
| XPUSHs(rv); |
| count++; |
| } |
| @@ -252,7 +271,7 @@ NETCUPS_getAllPPDs () |
| "ppd-make-and-model", |
| IPP_TAG_TEXT); |
| rv = sv_newmortal(); |
| - sv_setpv(rv, attr->values[0].string.text); |
| + sv_setpv(rv, ippGetString(attr, 0, NULL)); |
| XPUSHs(rv); |
| count++; |
| while (attr != NULL) { |
| @@ -263,7 +282,7 @@ NETCUPS_getAllPPDs () |
| break; |
| } |
| rv = sv_newmortal(); |
| - sv_setpv(rv, attr->values[0].string.text); |
| + sv_setpv(rv, ippGetString(attr, 0, NULL)); |
| XPUSHs(rv); |
| count++; |
| } |
| @@ -356,14 +375,14 @@ NETCUPS_getPPDFileName(ppdfilename); |
| if (response != NULL) { |
| attr = ippFindAttribute(response, "ppd-name", IPP_TAG_NAME ); |
| while ((attr != NULL) && (i < 1)) { |
| - tmpppd = attr->values[0].string.text; |
| + tmpppd = ippGetString(attr, 0, NULL); |
| attr = ippFindNextAttribute(response, |
| "ppd-make", |
| IPP_TAG_TEXT); |
| attr = ippFindNextAttribute(response, |
| "ppd-make-and-model", |
| IPP_TAG_TEXT); |
| - if (strcmp(attr->values[0].string.text, ppdfilename) == 0 ) { |
| + if (strcmp(ippGetString(attr, 0, NULL), ppdfilename) == 0 ) { |
| /* return tmpppd; */ |
| strcpy(test, tmpppd); |
| break; |
| @@ -410,12 +429,12 @@ NETCUPS_getDeviceAttribute( device, attribute, attribute_type ) |
| attr = ippFindNextAttribute(response, "printer-name", IPP_TAG_NAME); |
| |
| while (attr != NULL) { |
| - if (strcmp(attr->values[0].string.text, device) == 0) { |
| + if (strcmp(ippGetString(attr, 0, NULL), device) == 0) { |
| attr = ippFindNextAttribute( response, |
| attribute, |
| attribute_type); |
| rv = sv_newmortal(); |
| - sv_setpv( rv, attr->values[0].string.text); |
| + sv_setpv( rv, ippGetString(attr, 0, NULL)); |
| XPUSHs( rv ); |
| break; |
| } |
| @@ -858,15 +877,15 @@ NETCUPS_getAttributes( ipp ) |
| SV* rv = NULL; |
| int count = 0; |
| ipp_attribute_t* attr = NULL; |
| - for (attr = ipp->attrs; attr != NULL; attr = attr->next) |
| + for (attr = ippFirstAttribute(ipp); attr != NULL; attr = ippNextAttribute(ipp)) |
| { |
| - while (attr != NULL && attr->group_tag != IPP_TAG_JOB) |
| - attr = attr->next; |
| + while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB) |
| + attr = ippNextAttribute(ipp); |
| |
| if (attr == NULL) |
| break; |
| rv = sv_newmortal(); |
| - sv_setpv( rv, attr->name ); |
| + sv_setpv( rv, ippGetName(attr) ); |
| XPUSHs( rv ); |
| count++; |
| } |
| @@ -880,27 +899,27 @@ NETCUPS_getAttributeValue( ipp, name ) |
| SV* rv = NULL; |
| int count = 0; |
| ipp_attribute_t* attr = NULL; |
| - for (attr = ipp->attrs; attr != NULL; attr = attr->next) |
| + for (attr = ippFirstAttribute(ipp); attr != NULL; attr = ippNextAttribute(ipp)) |
| { |
| - while (attr != NULL && attr->group_tag != IPP_TAG_JOB) |
| - attr = attr->next; |
| + while (attr != NULL && ippGetGroupTag(attr) != IPP_TAG_JOB) |
| + attr = ippNextAttribute(ipp); |
| |
| if (attr == NULL) |
| break; |
| |
| - if( !strcmp( attr->name, name ) ) |
| + if( !strcmp( ippGetName(attr), name ) ) |
| { |
| rv = sv_newmortal(); |
| - if( ( attr->value_tag == IPP_TAG_INTEGER ) || |
| - ( attr->value_tag == IPP_TAG_ENUM ) ) |
| + if( ( ippGetValueTag(attr) == IPP_TAG_INTEGER ) || |
| + ( ippGetValueTag(attr) == IPP_TAG_ENUM ) ) |
| { |
| /* We have a number with any luck ... */ |
| - sv_setiv( rv, attr->values[0].integer ); |
| + sv_setiv( rv, ippGetInteger(attr, 0) ); |
| } |
| else |
| { |
| /* We have a string ... maybe ... try to set it. */ |
| - sv_setpv( rv, attr->values[0].string.text ); |
| + sv_setpv( rv, ippGetString(attr, 0, NULL) ); |
| } |
| |
| XPUSHs( rv ); |