@@@ cython and python 3 wip
[mLib-python] / fdutils.pyx
index 71135e6..124ef23 100644 (file)
@@ -48,16 +48,16 @@ def fdsend(sock, file, buffer):
   fdsend(SOCK, FILE, BUFFER) -> RC:
     send FILE over Unix-domain socket SOCK, along with BUFFER
   """
-  cdef void *p
+  cdef const void *p
   cdef Py_ssize_t len
   cdef int rc
-  PyObject_AsReadBuffer(buffer, <cvp *>&p, &len)
+  PyObject_AsReadBuffer(buffer, &p, &len)
   rc = fdpass_send(_getfd(sock), _getfd(file), p, len)
   if rc < 0:
     _oserror()
   return rc
 
-def fdrecv(sock, unsigned size):
+def fdrecv(sock, size_t size):
   """
   fdrecv(SOCK, SIZE) -> FD, BUFFER
     receive file FD and BUFFER of length up to SIZE from Unix-domain SOCK
@@ -67,13 +67,11 @@ def fdrecv(sock, unsigned size):
   cdef Py_ssize_t len
   cdef PyObject *obj
   cdef int fd
-  buf = PyString_FromStringAndSize(NULL, size)
-  p = PyString_AS_STRING(buf)
-  len = fdpass_recv(_getfd(sock), &fd, p, size)
+  buf = BIN_FROMSTRLEN(NULL, size)
+  len = fdpass_recv(_getfd(sock), &fd, BIN_PTR(buf), size)
   if len < 0:
     _oserror()
-  obj = <PyObject *>buf
-  _PyString_Resize(&obj, len)
-  return fd, <object>obj
+  BIN_SETLEN(buf, len)
+  return fd, buf
 
 ###----- That's all, folks --------------------------------------------------