From ce3660feb692ab0e5271c9b627edce46843d75d5 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Jul 23 2017 21:53:57 +0000 Subject: Fix rpmfd_write on big endian arches. --- diff --git a/0058-Define-PY_SSIZE_T_CLEAN.patch b/0058-Define-PY_SSIZE_T_CLEAN.patch new file mode 100644 index 0000000..5e145c5 --- /dev/null +++ b/0058-Define-PY_SSIZE_T_CLEAN.patch @@ -0,0 +1,31 @@ +From ff1be07909a9e78295f416b3535dc6aaecbc0350 Mon Sep 17 00:00:00 2001 +From: Lubos Kardos +Date: Fri, 18 Sep 2015 15:29:25 +0200 +Subject: [PATCH] Define PY_SSIZE_T_CLEAN + +When PyArg_ParseTupleAndKeywords() is used with format argument "s#" +that means get a string and his length then the length is returned as +as a Py_ssize_t in python3 but as an int in python2, which casues +a problem because rpmfd_write() that uses PyArg_ParseTupleAndKeywords() +expects the length as a Py_ssize_t always. This problem affects big +endian systems with python2 as default. If PY_SSIZE_T_CLEAN is defined +then PyArg_ParseTupleAndKeywords() returns the length as a Py_ssize_t +in both python2 and python3. + +(cherry picked from commit f0a58d1dced6215b7caaa70db17d54834e0cd44e) +--- + python/rpmsystem-py.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/python/rpmsystem-py.h b/python/rpmsystem-py.h +index 50e8770..c8423e3 100644 +--- a/python/rpmsystem-py.h ++++ b/python/rpmsystem-py.h +@@ -5,6 +5,7 @@ + #include + #endif + ++#define PY_SSIZE_T_CLEAN + #include + #include + diff --git a/0059-Fix-error-handling-in-rpmio-Python-binding-test-case.patch b/0059-Fix-error-handling-in-rpmio-Python-binding-test-case.patch new file mode 100644 index 0000000..5c3df7a --- /dev/null +++ b/0059-Fix-error-handling-in-rpmio-Python-binding-test-case.patch @@ -0,0 +1,23 @@ +From 788eaf73c9b09cc86724264f7558568374b6eb9f Mon Sep 17 00:00:00 2001 +From: Florian Festi +Date: Wed, 23 Sep 2015 11:30:12 +0200 +Subject: [PATCH] Fix error handling in rpmio Python binding test case + +(cherry picked from commit 3c74e34e8d8c5b3db024dbe04a352e807ed2b627) +--- + tests/rpmpython.at | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tests/rpmpython.at b/tests/rpmpython.at +index 949673b..eac31b2 100644 +--- a/tests/rpmpython.at ++++ b/tests/rpmpython.at +@@ -53,7 +53,7 @@ for iot in [ 'fpio', 'fdio', 'ufdio', 'gzdio' ]: + fd = rpm.fd(fn, 'r', iot) + rdata = fd.read() + if rdata != data: +- myprint('%s read fail (got %d bytes)' % (iot, len(rdata), rdata)) ++ myprint('%s read fail (got %d bytes)\n%s' % (iot, len(rdata), rdata)) + # compressed io types can't seek + if iot == 'ufdio': + fd.seek(0)