On Mon, 15 Oct 2007 at 07:36:30 -0600, Martin Michlmayr wrote: > * Simon McVittie <[EMAIL PROTECTED]> [2007-10-15 11:30]: > > A patch is attached. It makes the following changes to fix the FTBFS:
Um, oops. Patch *really* attached...
--- eunuchs-20050320.1.orig/debian/changelog
+++ eunuchs-20050320.1/debian/changelog
@@ -1,3 +1,11 @@
+eunuchs (20050320.1-0.2) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Port recvmsg.c, sendmsg.c to be compatible with Python 2.5 on 64-bit
+ platforms, as per PEP 353 (Closes: #424552).
+
+ -- Simon McVittie <[EMAIL PROTECTED]> Sun, 14 Oct 2007 11:48:12 +0100
+
eunuchs (20050320.1-0.1) unstable; urgency=low
* Non-maintainer upload.
--- eunuchs-20050320.1.orig/lib/eunuchs/recvmsg.c
+++ eunuchs-20050320.1/lib/eunuchs/recvmsg.c
@@ -1,3 +1,7 @@
+/* PEP 353 support - declare that we will use use Py_ssize_t for the #
+ * specifier in PyArg_Parse etc. */
+#define PY_SSIZE_T_CLEAN
+
#include <Python.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -5,13 +9,19 @@
#include <arpa/inet.h>
#include <assert.h>
+/* More PEP 353 support. In Python <= 2.4 sequences are indexed by int, in
+ * >= 2.5 they are indexed by Py_ssize_t (a signed version of size_t). */
+#ifndef PY_SSIZE_T_MAX
+typedef int Py_ssize_t;
+#endif
+
#define CMSG_BUFSIZE 1000
/* int recvmsg(int s, struct msghdr *msg, int flags); */
static PyObject *my_recvmsg(PyObject *self, PyObject *args, PyObject *keywds) {
int fd;
int flags=0;
- size_t maxsize=8192;
- int ret;
+ int maxsize=8192;
+ Py_ssize_t ret;
struct msghdr msg;
struct sockaddr_in sa;
struct iovec iov[1];
@@ -27,8 +37,13 @@
msg.msg_name = &sa;
msg.msg_namelen = sizeof(sa);
- iov[0].iov_len = maxsize;
- iov[0].iov_base = malloc(maxsize);
+ if (maxsize < 0) {
+ PyErr_SetString(PyExc_TypeError, "maxsize may not be negative");
+ return NULL;
+ }
+
+ iov[0].iov_len = (size_t) maxsize;
+ iov[0].iov_base = malloc(iov[0].iov_len);
if (!iov[0].iov_base) {
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
@@ -78,11 +93,13 @@
spec_dst,
addr);
} else {
+ Py_ssize_t len = cur->cmsg_len - sizeof(struct cmsghdr);
+
entry = Py_BuildValue("(iis#)",
cur->cmsg_level,
cur->cmsg_type,
CMSG_DATA(cur),
- cur->cmsg_len - sizeof(struct cmsghdr)
+ len
);
}
if (PyList_Append(ancillary, entry) < 0) {
--- eunuchs-20050320.1.orig/lib/eunuchs/sendmsg.c
+++ eunuchs-20050320.1/lib/eunuchs/sendmsg.c
@@ -1,3 +1,7 @@
+/* PEP 353 support - declare that we will use use Py_ssize_t for the #
+ * specifier in PyArg_Parse etc. */
+#define PY_SSIZE_T_CLEAN
+
#include <Python.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -5,6 +9,12 @@
#include <arpa/inet.h>
#include <assert.h>
+/* More PEP 353 support. In Python <= 2.4 sequences are indexed by int, in
+ * >= 2.5 they are indexed by Py_ssize_t (a signed version of size_t). */
+#ifndef PY_SSIZE_T_MAX
+typedef int Py_ssize_t;
+#endif
+
#define CMSG_BUFSIZE 1000
/* int sendmsg(int s, struct msghdr *msg, int flags); */
static PyObject *my_sendmsg(PyObject *self, PyObject *args, PyObject *keywds) {
@@ -13,6 +23,7 @@
int ret;
struct msghdr msg;
struct sockaddr_in sa;
+ Py_ssize_t iov_len;
struct iovec iov[1];
char cmsgbuf[CMSG_BUFSIZE];
PyObject *ancillary = NULL;
@@ -29,13 +40,15 @@
if (!PyArg_ParseTupleAndKeywords(args, keywds, "it#si|iO", kwlist,
&fd,
&iov[0].iov_base,
- &iov[0].iov_len,
+ &iov_len,
&host,
&port,
&flags,
&ancillary))
return NULL;
+ iov[0].iov_len = iov_len;
+
memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
@@ -101,7 +114,7 @@
real_controllen += CMSG_SPACE(sizeof *info);
} else {
char *data;
- int len;
+ Py_ssize_t len;
if (PyString_AsStringAndSize(rest, &data, &len))
return NULL; // TODO leaks
signature.asc
Description: Digital signature

