From 3699be0d137fc8694ae2f0e030db4af2719af2d8 Mon Sep 17 00:00:00 2001 From: Marcin Zajaczkowski Date: Aug 07 2014 09:30:35 +0000 Subject: add Mark Hamzy's patch to fix issue with PPC builds See https://bugzilla.redhat.com/show_bug.cgi?id=1127310 --- diff --git a/0001-use-Py_ssize_t.patch b/0001-use-Py_ssize_t.patch new file mode 100644 index 0000000..085aadc --- /dev/null +++ b/0001-use-Py_ssize_t.patch @@ -0,0 +1,127 @@ +From 50f7c251523f6be3be3426aa6499e5495a18b442 Mon Sep 17 00:00:00 2001 +From: Mark Hamzy +Date: Wed, 6 Aug 2014 14:06:45 -0500 +Subject: [PATCH] use Py_ssize_t + +>Starting with Python 2.5 the type of the length argument can be controlled by +>defining the macro PY_SSIZE_T_CLEAN before including Python.h. If the macro is +>defined, length is a Py_ssize_t rather than an int. + +dmalcolm@redhat.com says: +"and IIRC that *does* in fact affect "et#" and the other hash-suffixed codes +i.e. PyArg_ParseTupleAndKeywords was expecting bufsize to be a Py_ssize_t, not an int." + +So, changing size_t to Py_ssize_t and ints used as sizes to Py_ssize_t. + +--- + xattr.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/xattr.c b/xattr.c +index cc1fa44..2529e90 100644 +--- a/xattr.c ++++ b/xattr.c +@@ -193,7 +193,7 @@ static int merge_ns(const char *ns, const char *name, + return 0; + } + +-static ssize_t _list_obj(target_t *tgt, char *list, size_t size) { ++static Py_ssize_t _list_obj(target_t *tgt, char *list, Py_ssize_t size) { + if(tgt->type == T_FD) + return flistxattr(tgt->fd, list, size); + else if (tgt->type == T_LINK) +@@ -202,8 +202,8 @@ static ssize_t _list_obj(target_t *tgt, char *list, size_t size) { + return listxattr(tgt->name, list, size); + } + +-static ssize_t _get_obj(target_t *tgt, const char *name, void *value, +- size_t size) { ++static Py_ssize_t _get_obj(target_t *tgt, const char *name, void *value, ++ Py_ssize_t size) { + if(tgt->type == T_FD) + return fgetxattr(tgt->fd, name, value, size); + else if (tgt->type == T_LINK) +@@ -213,7 +213,7 @@ static ssize_t _get_obj(target_t *tgt, const char *name, void *value, + } + + static int _set_obj(target_t *tgt, const char *name, +- const void *value, size_t size, int flags) { ++ const void *value, Py_ssize_t size, int flags) { + if(tgt->type == T_FD) + return fsetxattr(tgt->fd, name, value, size, flags); + else if (tgt->type == T_LINK) +@@ -242,7 +242,7 @@ static int _remove_obj(target_t *tgt, const char *name) { + + */ + const char *matches_ns(const char *ns, const char *name) { +- size_t ns_size; ++ Py_ssize_t ns_size; + if (ns == NULL || *ns == '\0') + return name; + ns_size = strlen(ns); +@@ -275,7 +275,7 @@ pygetxattr(PyObject *self, PyObject *args) + int nofollow = 0; + char *attrname = NULL; + char *buf; +- ssize_t nalloc, nret; ++ Py_ssize_t nalloc, nret; + PyObject *res; + + /* Parse the arguments */ +@@ -352,7 +352,7 @@ xattr_get(PyObject *self, PyObject *args, PyObject *keywds) + const char *fullname; + char *buf; + const char *ns = NULL; +- ssize_t nalloc, nret; ++ Py_ssize_t nalloc, nret; + PyObject *res; + static char *kwlist[] = {"item", "name", "nofollow", "namespace", NULL}; + +@@ -451,7 +451,7 @@ get_all(PyObject *self, PyObject *args, PyObject *keywds) + const char *ns = NULL; + char *buf_list, *buf_val; + const char *s; +- ssize_t nalloc, nlist, nval; ++ Py_ssize_t nalloc, nlist, nval; + PyObject *mylist; + target_t tgt; + static char *kwlist[] = {"item", "nofollow", "namespace", NULL}; +@@ -604,7 +604,7 @@ pysetxattr(PyObject *self, PyObject *args) + int nofollow = 0; + char *attrname = NULL; + char *buf = NULL; +- int bufsize; ++ Py_ssize_t bufsize; + int nret; + int flags = 0; + target_t tgt; +@@ -670,7 +670,7 @@ xattr_set(PyObject *self, PyObject *args, PyObject *keywds) + int nofollow = 0; + char *attrname = NULL; + char *buf = NULL; +- int bufsize; ++ Py_ssize_t bufsize; + int nret; + int flags = 0; + target_t tgt; +@@ -856,7 +856,7 @@ pylistxattr(PyObject *self, PyObject *args) + { + char *buf; + int nofollow=0; +- ssize_t nalloc, nret; ++ Py_ssize_t nalloc, nret; + PyObject *myarg; + PyObject *mylist; + Py_ssize_t nattrs; +@@ -956,7 +956,7 @@ xattr_list(PyObject *self, PyObject *args, PyObject *keywds) + { + char *buf; + int nofollow = 0; +- ssize_t nalloc, nret; ++ Py_ssize_t nalloc, nret; + PyObject *myarg; + PyObject *res; + const char *ns = NULL; +-- +2.0.0 + diff --git a/pyxattr.spec b/pyxattr.spec index 22d587b..0f3e359 100644 --- a/pyxattr.spec +++ b/pyxattr.spec @@ -2,16 +2,14 @@ Name: pyxattr Summary: Extended attributes library wrapper for Python Version: 0.5.3 -Release: 2%{?dist} +Release: 3%{?dist} License: LGPLv2+ Group: Development/Libraries URL: http://pyxattr.k1024.org/ Source: https://pypi.python.org/packages/source/p/%{name}/%{name}-%{version}.tar.gz - +Patch0: 0001-use-Py_ssize_t.patch BuildRequires: libattr-devel - BuildRequires: python2-devel, python-setuptools - %if %{?with_python3} BuildRequires: python3-devel, python3-setuptools %endif # with_python3 @@ -33,13 +31,13 @@ Python 3 version. %prep %setup -q +%patch0 -p1 %if 0%{?with_python3} rm -rf %{py3dir} cp -a . %{py3dir} %endif # with_python3 - %build CFLAGS="%{optflags}" %{__python2} setup.py build @@ -89,6 +87,9 @@ popd %endif # with_python3 %changelog +* Thu Aug 7 2014 Marcin Zajaczkowski - 0.5.3-3 +- add Mark Hamzy's patch to fix issue with PPC builds (bug 1127310) + * Mon Aug 4 2014 Tom Callaway - 0.5.3-2 - fix license handling