| Imported from gentoo: |
| https://bugs.gentoo.org/show_bug.cgi?id=428672 |
| |
| diff -Naur hplip-3.12.6_old/prnt/cupsext/cupsext.c hplip-3.12.6/prnt/cupsext/cupsext.c |
| --- hplip-3.12.6_old/prnt/cupsext/cupsext.c 2012-08-04 09:18:18.388330038 +0200 |
| +++ hplip-3.12.6/prnt/cupsext/cupsext.c 2012-08-04 09:18:27.855181327 +0200 |
| @@ -87,6 +87,46 @@ |
| #define PY_SSIZE_T_MIN INT_MIN
|
| #endif
|
|
|
| +#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5)
|
| +#define HAVE_CUPS_1_6 1
|
| +#endif
|
| +
|
| +#ifndef HAVE_CUPS_1_6
|
| +#define ippGetCount(attr) attr->num_values
|
| +#define ippGetGroupTag(attr) attr->group_tag
|
| +#define ippGetValueTag(attr) attr->value_tag
|
| +#define ippGetName(attr) attr->name
|
| +#define ippGetBoolean(attr, element) attr->values[element].boolean
|
| +#define ippGetInteger(attr, element) attr->values[element].integer
|
| +#define ippGetStatusCode(ipp) ipp->request.status.status_code
|
| +#define ippGetString(attr, element, language) attr->values[element].string.text
|
| +
|
| +static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp )
|
| +{
|
| + if (!ipp)
|
| + return (NULL);
|
| + return (ipp->current = ipp->attrs);
|
| +}
|
| +
|
| +static ipp_attribute_t * ippNextAttribute( ipp_t *ipp )
|
| +{
|
| + if (!ipp || !ipp->current)
|
| + return (NULL);
|
| + return (ipp->current = ipp->current->next);
|
| +}
|
| +
|
| +static int ippSetOperation( ipp_t *ipp, ipp_op_t op )
|
| +{
|
| + ipp->request.op.operation_id = op;
|
| + return (1);
|
| +}
|
| +
|
| +static int ippSetRequestId( ipp_t *ipp, int request_id )
|
| +{
|
| + ipp->request.any.request_id = request_id;
|
| + return (1);
|
| +}
|
| +#endif
|
|
|
| int g_num_options = 0;
|
| cups_option_t * g_options;
|
| @@ -333,8 +373,8 @@ |
| request = ippNew();
|
| language = cupsLangDefault();
|
|
|
| - request->request.op.operation_id = CUPS_GET_PRINTERS;
|
| - request->request.any.request_id = 1;
|
| + ippSetOperation( request, CUPS_GET_PRINTERS );
|
| + ippSetRequestId ( request, 1);
|
|
|
| ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
| "attributes-charset", NULL, cupsLangEncoding( language ) );
|
| @@ -378,10 +418,10 @@ |
| ipp_pstate_t state;
|
| int i = 0;
|
|
|
| - for ( attr = response->attrs; attr != NULL; attr = attr->next )
|
| + for ( attr = ippFirstAttribute( response ); attr != NULL; attr = ippNextAttribute( response ) )
|
| {
|
| - while ( attr != NULL && attr->group_tag != IPP_TAG_PRINTER )
|
| - attr = attr->next;
|
| + while ( attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER )
|
| + attr = ippNextAttribute( response );
|
|
|
| if ( attr == NULL )
|
| break;
|
| @@ -390,41 +430,41 @@ |
| state = IPP_PRINTER_IDLE;
|
| accepting = 0;
|
|
|
| - while ( attr != NULL && attr->group_tag == IPP_TAG_PRINTER )
|
| + while ( attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER )
|
| {
|
| - if ( strcmp( attr->name, "printer-name" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_NAME )
|
| - name = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "device-uri" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_URI )
|
| - device_uri = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "printer-uri-supported" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_URI )
|
| - printer_uri = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "printer-info" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_TEXT )
|
| - info = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "printer-location" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_TEXT )
|
| - location = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "printer-make-and-model" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_TEXT )
|
| - make_model = attr->values[ 0 ].string.text;
|
| -
|
| - else if ( strcmp( attr->name, "printer-state" ) == 0 &&
|
| - attr->value_tag == IPP_TAG_ENUM )
|
| - state = ( ipp_pstate_t ) attr->values[ 0 ].integer;
|
| -
|
| - else if (!strcmp(attr->name, "printer-is-accepting-jobs") &&
|
| - attr->value_tag == IPP_TAG_BOOLEAN)
|
| - accepting = attr->values[ 0 ].boolean;
|
| + if ( strcmp( ippGetName( attr ), "printer-name" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_NAME )
|
| + name = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "device-uri" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_URI )
|
| + device_uri = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "printer-uri-supported" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_URI )
|
| + printer_uri = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "printer-info" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_TEXT )
|
| + info = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "printer-location" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_TEXT )
|
| + location = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "printer-make-and-model" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_TEXT )
|
| + make_model = ippGetString( attr, 0, NULL );
|
| +
|
| + else if ( strcmp( ippGetName( attr ), "printer-state" ) == 0 &&
|
| + ippGetValueTag( attr ) == IPP_TAG_ENUM )
|
| + state = ( ipp_pstate_t ) ippGetInteger( attr, 0 );
|
| +
|
| + else if (!strcmp(ippGetName( attr ), "printer-is-accepting-jobs") &&
|
| + ippGetValueTag( attr ) == IPP_TAG_BOOLEAN)
|
| + accepting = ippGetBoolean( attr, 0 );
|
|
|
| - attr = attr->next;
|
| + attr = ippNextAttribute( response );
|
| }
|
|
|
| if ( device_uri == NULL )
|
| @@ -522,8 +562,8 @@ |
| request = ippNew();
|
| language = cupsLangDefault();
|
|
|
| - request->request.op.operation_id = CUPS_ADD_PRINTER;
|
| - request->request.any.request_id = 1;
|
| + ippSetOperation( request, CUPS_ADD_PRINTER );
|
| + ippSetRequestId ( request, 1 );
|
|
|
| ippAddString( request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
|
| "attributes-charset", NULL, cupsLangEncoding( language ) );
|
| @@ -568,7 +608,7 @@ |
| }
|
| else
|
| {
|
| - status = response->request.status.status_code;
|
| + status = ippGetStatusCode( response );
|
| //ippDelete( response );
|
| r = 1;
|
| }
|
| @@ -631,8 +671,8 @@ |
| */
|
| request = ippNew();
|
|
|
| - request->request.op.operation_id = CUPS_DELETE_PRINTER;
|
| - request->request.op.request_id = 1;
|
| + ippSetOperation( request, CUPS_DELETE_PRINTER );
|
| + ippSetRequestId ( request, 1 );
|
|
|
| language = cupsLangDefault();
|
|
|
| @@ -650,7 +690,7 @@ |
| */
|
| response = cupsDoRequest( http, request, "/admin/" );
|
|
|
| - if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )
|
| + if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )
|
| {
|
| r = 1;
|
| }
|
| @@ -721,8 +761,8 @@ |
|
|
| request = ippNew();
|
|
|
| - request->request.op.operation_id = CUPS_SET_DEFAULT;
|
| - request->request.op.request_id = 1;
|
| + ippSetOperation( request, CUPS_SET_DEFAULT );
|
| + ippSetRequestId ( request, 1 );
|
|
|
| language = cupsLangDefault();
|
|
|
| @@ -743,7 +783,7 @@ |
|
|
| response = cupsDoRequest( http, request, "/admin/" );
|
|
|
| - if ( ( response != NULL ) && ( response->request.status.status_code <= IPP_OK_CONFLICT ) )
|
| + if ( ( response != NULL ) && ( ippGetStatusCode( response ) <= IPP_OK_CONFLICT ) )
|
| {
|
| r = 1;
|
| }
|
| @@ -797,8 +837,8 @@ |
|
|
| request = ippNew();
|
|
|
| - request->request.op.operation_id = op;
|
| - request->request.op.request_id = 1;
|
| + ippSetOperation( request, op );
|
| + ippSetRequestId ( request, 1 );
|
|
|
| language = cupsLangDefault();
|
|
|
| @@ -822,7 +862,7 @@ |
|
|
| response = cupsDoRequest(http, request, "/admin/");
|
|
|
| - if (( response != NULL ) && (response->request.status.status_code <= IPP_OK_CONFLICT))
|
| + if (( response != NULL ) && (ippGetStatusCode( response ) <= IPP_OK_CONFLICT))
|
| {
|
| r = 1;
|
| }
|
| @@ -837,7 +877,7 @@ |
| if ( response != NULL )
|
| ippDelete( response );
|
|
|
| - return Py_BuildValue( "i", r );;
|
| + return Py_BuildValue( "i", r );
|
| }
|
|
|
|
|
| @@ -1116,8 +1156,8 @@ |
|
|
| request = ippNew();
|
|
|
| - request->request.op.operation_id = CUPS_GET_PPDS;
|
| - request->request.op.request_id = 1;
|
| + ippSetOperation( request, CUPS_GET_PPDS );
|
| + ippSetRequestId ( request, 1 );
|
|
|
| language = cupsLangDefault();
|
|
|
| @@ -1143,43 +1183,43 @@ |
| if ((response = cupsDoRequest(http, request, "/")) != NULL)
|
| {
|
|
|
| - for (attr = response->attrs; attr; attr = attr->next)
|
| + for (attr = ippFirstAttribute( response ); attr; attr = ippNextAttribute( response ))
|
| {
|
| PyObject *dict;
|
| char *ppdname = NULL;
|
|
|
| - while (attr && attr->group_tag != IPP_TAG_PRINTER)
|
| - attr = attr->next;
|
| + while (attr && ippGetGroupTag( attr ) != IPP_TAG_PRINTER)
|
| + attr = ippNextAttribute( response );
|
|
|
| if (!attr)
|
| break;
|
|
|
| dict = PyDict_New ();
|
|
|
| - for (; attr && attr->group_tag == IPP_TAG_PRINTER; attr = attr->next)
|
| + for (; attr && ippGetGroupTag( attr ) == IPP_TAG_PRINTER; attr = ippNextAttribute( response ))
|
| {
|
| PyObject *val = NULL;
|
|
|
| - if (!strcmp (attr->name, "ppd-name") && attr->value_tag == IPP_TAG_NAME)
|
| + if (!strcmp (ippGetName( attr ), "ppd-name") && ippGetValueTag( attr ) == IPP_TAG_NAME)
|
| {
|
| - ppdname = attr->values[0].string.text;
|
| + ppdname = ippGetString( attr, 0, NULL );
|
|
|
| //sprintf( buf, "print '%s'", ppdname);
|
| //PyRun_SimpleString( buf );
|
| }
|
|
|
| - else if (attr->value_tag == IPP_TAG_TEXT || attr->value_tag == IPP_TAG_NAME || attr->value_tag == IPP_TAG_KEYWORD)
|
| - //else if ((!strcmp (attr->name, "ppd-natural-language") && attr->value_tag == IPP_TAG_LANGUAGE) ||
|
| - // (!strcmp (attr->name, "ppd-make-and-model") && attr->value_tag == IPP_TAG_TEXT) ||
|
| - // (!strcmp (attr->name, "ppd-make") && attr->value_tag == IPP_TAG_TEXT) ||
|
| - // (!strcmp (attr->name, "ppd-device-id") && attr->value_tag == IPP_TAG_TEXT))
|
| + else if (ippGetValueTag( attr ) == IPP_TAG_TEXT || ippGetValueTag( attr ) == IPP_TAG_NAME || ippGetValueTag( attr ) == IPP_TAG_KEYWORD)
|
| + //else if ((!strcmp (ippGetName( attr ), "ppd-natural-language") && ippGetValueTag( attr ) == IPP_TAG_LANGUAGE) ||
|
| + // (!strcmp (ippGetName( attr ), "ppd-make-and-model") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||
|
| + // (!strcmp (ippGetName( attr ), "ppd-make") && ippGetValueTag( attr ) == IPP_TAG_TEXT) ||
|
| + // (!strcmp (ippGetName( attr ), "ppd-device-id") && ippGetValueTag( attr ) == IPP_TAG_TEXT))
|
| {
|
| - val = PyObj_from_UTF8(attr->values[0].string.text);
|
| + val = PyObj_from_UTF8(ippGetString( attr, 0, NULL ));
|
| }
|
|
|
| if (val)
|
| {
|
| - PyDict_SetItemString (dict, attr->name, val);
|
| + PyDict_SetItemString (dict, ippGetName( attr ), val);
|
| Py_DECREF (val);
|
| }
|
| }
|
| diff -Naur hplip-3.12.6_old/scan/sane/hpaio.c hplip-3.12.6/scan/sane/hpaio.c |
| --- hplip-3.12.6_old/scan/sane/hpaio.c 2012-08-04 09:18:21.458389913 +0200 |
| +++ hplip-3.12.6/scan/sane/hpaio.c 2012-08-04 09:18:27.875181720 +0200 |
| @@ -47,6 +47,43 @@ |
| #define DEBUG_DECLARE_ONLY |
| #include "sanei_debug.h" |
| |
| +#if (CUPS_VERSION_MAJOR > 1) || (CUPS_VERSION_MINOR > 5) |
| +#define HAVE_CUPS_1_6 1 |
| +#endif |
| + |
| +#ifndef HAVE_CUPS_1_6 |
| +#define ippGetGroupTag(attr) attr->group_tag |
| +#define ippGetValueTag(attr) attr->value_tag |
| +#define ippGetName(attr) attr->name |
| +#define ippGetString(attr, element, language) attr->values[element].string.text |
| + |
| +static ipp_attribute_t * ippFirstAttribute( ipp_t *ipp ) |
| +{ |
| + if (!ipp) |
| + return (NULL); |
| + return (ipp->current = ipp->attrs); |
| +} |
| + |
| +static ipp_attribute_t * ippNextAttribute( ipp_t *ipp ) |
| +{ |
| + if (!ipp || !ipp->current) |
| + return (NULL); |
| + return (ipp->current = ipp->current->next); |
| +} |
| + |
| +static int ippSetOperation( ipp_t *ipp, ipp_op_t op ) |
| +{ |
| + ipp->request.op.operation_id = op; |
| + return (1); |
| +} |
| + |
| +static int ippSetRequestId( ipp_t *ipp, int request_id ) |
| +{ |
| + ipp->request.any.request_id = request_id; |
| + return (1); |
| +} |
| +#endif |
| + |
| static SANE_Device **DeviceList = NULL; |
| |
| static int AddDeviceList(char *uri, char *model, SANE_Device ***pd) |
| @@ -186,8 +223,8 @@ |
| /* Assemble the IPP request */ |
| request = ippNew(); |
| |
| - request->request.op.operation_id = CUPS_GET_PRINTERS; |
| - request->request.any.request_id = 1; |
| + ippSetOperation( request, CUPS_GET_PRINTERS ); |
| + ippSetRequestId( request, 1 ); |
| |
| ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, "attributes-charset", NULL, "utf-8"); |
| ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE, "attributes-natural-language", NULL, "en"); |
| @@ -197,20 +234,20 @@ |
| if ((response = cupsDoRequest(http, request, "/")) == NULL) |
| goto bugout; |
| |
| - for (attr = response->attrs; attr != NULL; attr = attr->next) |
| + for (attr = ippFirstAttribute ( response ); attr != NULL; attr = ippNextAttribute( response )) |
| { |
| /* Skip leading attributes until we hit a printer. */ |
| - while (attr != NULL && attr->group_tag != IPP_TAG_PRINTER) |
| - attr = attr->next; |
| + while (attr != NULL && ippGetGroupTag( attr ) != IPP_TAG_PRINTER) |
| + attr = ippNextAttribute( response ); |
| |
| if (attr == NULL) |
| break; |
| |
| - while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) |
| + while (attr != NULL && ippGetGroupTag( attr ) == IPP_TAG_PRINTER) |
| { |
| - if (strcmp(attr->name, "device-uri") == 0 && attr->value_tag == IPP_TAG_URI && AddCupsList(attr->values[0].string.text, printer) == 0) |
| + if (strcmp(ippGetName( attr ), "device-uri") == 0 && ippGetValueTag( attr ) == IPP_TAG_URI && AddCupsList(ippGetString( attr, 0, NULL ), printer) == 0) |
| cnt++; |
| - attr = attr->next; |
| + attr = ippNextAttribute( response ); |
| } |
| |
| if (attr == NULL) |