mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-28 22:57:37 +00:00
148 lines
4.6 KiB
Diff
148 lines
4.6 KiB
Diff
|
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(-)
|
||
|
|
||
|
diff --git a/pcard/pcardext/pcardext.c b/pcard/pcardext/pcardext.c
|
||
|
index c1a8273..37d979b 100644
|
||
|
--- a/pcard/pcardext/pcardext.c
|
||
|
+++ b/pcard/pcardext/pcardext.c
|
||
|
@@ -20,7 +20,7 @@ pcardext - Python extension for HP photocard services
|
||
|
Requires:
|
||
|
Python 2.2+
|
||
|
|
||
|
-Author: Don Welch
|
||
|
+Author: Don Welch
|
||
|
|
||
|
\*****************************************************************************/
|
||
|
|
||
|
@@ -38,9 +38,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;
|
||
|
@@ -56,9 +84,13 @@ int ReadSector(int sector, int nsector, void *buf, int size)
|
||
|
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;
|
||
|
}
|
||
|
@@ -205,7 +237,9 @@ PyObject * pcardext_read( PyObject * self, PyObject * args )
|
||
|
|
||
|
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
|
||
|
{
|
||
|
@@ -233,14 +267,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);
|
||
|
+
|
||
|
}
|
||
|
|
||
|
|
||
|
diff --git a/pcard/photocard.py b/pcard/photocard.py
|
||
|
index 913dc4e..2c73158 100644
|
||
|
--- a/pcard/photocard.py
|
||
|
+++ b/pcard/photocard.py
|
||
|
@@ -30,7 +30,7 @@ from base.codes import *
|
||
|
from base import device, utils, exif
|
||
|
|
||
|
try:
|
||
|
- from . import pcardext
|
||
|
+ import pcardext
|
||
|
except ImportError:
|
||
|
if not os.getenv("HPLIP_BUILD"):
|
||
|
log.error("PCARDEXT could not be loaded. Please check HPLIP installation.")
|
||
|
diff --git a/unload.py b/unload.py
|
||
|
index 3fdd5a3..ce8b069 100755
|
||
|
--- 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
|
||
|
|