| From: Till Kamppeter <till.kamppeter@gmail.com> |
| Date: Fri, 22 Jul 2016 09:33:04 +0200 |
| Subject: Workaround patch for missing Python3 transition of the old |
| (pre-USB-storage) photo memory card support (pcardext) as this part builds |
| in Python3 environments but with pointer-related warnings which are fatal |
| errors for Ubuntu's build servers. The patch silences the warnings but the |
| memory card support is dropped in Python3 environments. This patch is |
| supplied by the HPLIP upstream developers and will be replaced by a more |
| proper solution in the next upstream release of HPLIP (see LP: #1275353) |
| |
| --- |
| pcard/pcardext/pcardext.c | 59 +++++++++++++++++++++++++++++++++++++---------- |
| pcard/photocard.py | 2 +- |
| unload.py | 5 ++++ |
| 3 files changed, 53 insertions(+), 13 deletions(-) |
| |
| --- a/pcard/pcardext/pcardext.c |
| +++ b/pcard/pcardext/pcardext.c |
| @@ -20,7 +20,7 @@ pcardext - Python extension for HP photo |
| Requires: |
| Python 2.2+ |
| |
| -Author: Don Welch |
| +Author: Don Welch |
| |
| \*****************************************************************************/ |
| |
| @@ -41,9 +41,37 @@ typedef int Py_ssize_t; |
| |
| int verbose=0; |
| |
| +#if PY_MAJOR_VERSION >= 3 |
| + #define MOD_ERROR_VAL NULL |
| + #define MOD_SUCCESS_VAL(val) val |
| + #define MOD_INIT(name) PyMODINIT_FUNC PyInit_##name(void) |
| + #define PyInt_AS_LONG PyLong_AS_LONG |
| + #define MOD_DEF(ob, name, doc, methods) \ |
| + static struct PyModuleDef moduledef = { \ |
| + PyModuleDef_HEAD_INIT, name, doc, -1, methods, }; \ |
| + ob = PyModule_Create(&moduledef); |
| + |
| + |
| + #define PY_String_Bytes PyBytes_FromStringAndSize |
| + #define PY_AsString_Bytes PyBytes_AsStringAndSize |
| + |
| +#else |
| + #define MOD_ERROR_VAL |
| + #define MOD_SUCCESS_VAL(val) |
| + #define MOD_INIT(name) void init##name(void) |
| + #define MOD_DEF(ob, name, doc, methods) \ |
| + ob = Py_InitModule3(name, methods, doc); |
| + |
| + #define PY_String_Bytes PyString_FromStringAndSize |
| + #define PY_AsString_Bytes PyString_AsStringAndSize |
| + |
| +#endif |
| + |
| PyObject * readsectorFunc = NULL; |
| PyObject * writesectorFunc = NULL; |
| |
| + |
| + |
| int ReadSector(int sector, int nsector, void *buf, int size) |
| { |
| PyObject * result; |
| @@ -59,9 +87,13 @@ int ReadSector(int sector, int nsector, |
| if( result ) |
| { |
| Py_ssize_t len = 0; |
| - PyString_AsStringAndSize( result, &result_str, &len ); |
| + |
| + //PyString_AsStringAndSize( result, &result_str, &len ); |
| + //PyBytes_AsStringAndSize( result, &result_str, &len ); |
| + PY_AsString_Bytes( result, &result_str, &len ); |
| |
| - if( len < nsector*FAT_HARDSECT ) |
| + |
| + if( len < nsector*FAT_HARDSECT ) |
| { |
| goto abort; |
| } |
| @@ -208,7 +240,9 @@ PyObject * pcardext_read( PyObject * sel |
| |
| if( FatReadFileExt( name, offset, len, buffer ) == len ) |
| { |
| - return PyString_FromStringAndSize( (char *)buffer, len ); |
| + // return PyString_FromStringAndSize( (char *)buffer, len ); |
| + return PY_String_Bytes( (char *)buffer, len ); |
| + // return PyBytes_FromStringAndSize( (char *)buffer, len ); |
| } |
| else |
| { |
| @@ -236,14 +270,15 @@ static PyMethodDef pcardext_methods[] = |
| |
| static char pcardext_documentation[] = "Python extension for HP photocard services"; |
| |
| -void initpcardext( void ) |
| -{ |
| - PyObject * mod = Py_InitModule4( "pcardext", pcardext_methods, |
| - pcardext_documentation, (PyObject*)NULL, |
| - PYTHON_API_VERSION ); |
| - |
| - if (mod == NULL) |
| - return; |
| +MOD_INIT(pcardext) { |
| + |
| + PyObject* mod ; |
| + MOD_DEF(mod, "pcardext", pcardext_documentation, pcardext_methods); |
| + if (mod == NULL) |
| + return MOD_ERROR_VAL; |
| + |
| + return MOD_SUCCESS_VAL(mod); |
| + |
| } |
| |
| |
| --- a/unload.py |
| +++ b/unload.py |
| @@ -44,6 +44,11 @@ except ImportError: |
| |
| # Local |
| from base.g import * |
| +from base.sixext import PY3 |
| +if PY3: |
| + log.error("This functionality is not spported in python3 environment.") |
| + sys.exit(1) |
| + |
| from base import device, utils, tui, module |
| from prnt import cups |
| |