X-Git-Url: https://git.distorted.org.uk/~mdw/mLib-python/blobdiff_plain/ae68e889be24648e94d936e1aea614d2d1a0e7a8..HEAD:/fdutils.pyx diff --git a/fdutils.pyx b/fdutils.pyx index 7923d44..71135e6 100644 --- a/fdutils.pyx +++ b/fdutils.pyx @@ -1,56 +1,73 @@ -# -*-pyrex-*- -# -# $Id$ -# -# Messing with file descriptors -# -# (c) 2007 Straylight/Edgeware -# - -#----- Licensing notice ----------------------------------------------------- -# -# This file is part of the Python interface to mLib. -# -# mLib/Python is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# mLib/Python is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with mLib/Python; if not, write to the Free Software Foundation, -# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +### -*-pyrex-*- +### +### Messing with file descriptors +### +### (c) 2007 Straylight/Edgeware +### + +###----- Licensing notice --------------------------------------------------- +### +### This file is part of the Python interface to mLib. +### +### mLib/Python is free software; you can redistribute it and/or modify +### it under the terms of the GNU General Public License as published by +### the Free Software Foundation; either version 2 of the License, or +### (at your option) any later version. +### +### mLib/Python is distributed in the hope that it will be useful, +### but WITHOUT ANY WARRANTY; without even the implied warranty of +### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +### GNU General Public License for more details. +### +### You should have received a copy of the GNU General Public License +### along with mLib/Python; if not, write to the Free Software Foundation, +### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. def fdflags(file, unsigned fbic = 0, unsigned fxor = 0, unsigned fdbic = 0, unsigned fdxor = 0): + """ + fdflags(FILE, [fbic = 0], [fxor = 0], [fdbic = 0], [fdxor = 0]) + + Set fcntl(2) file and descriptor flags. If these are FL and FD, then + update: + + * FL = (FL & ~FBIC) ^ FXOR + * FD = (FD & ~FDBIC) ^ FDXOR + + FILE may be integer file descriptor or an object with `fileno' method. + """ cdef int rc - rc = _fdflags(_getfd(fd), fbix, fxor, fdbic, fdxor) + rc = _fdflags(_getfd(file), fbic, fxor, fdbic, fdxor) if rc < 0: _oserror() return rc def fdsend(sock, file, buffer): + """ + fdsend(SOCK, FILE, BUFFER) -> RC: + send FILE over Unix-domain socket SOCK, along with BUFFER + """ cdef void *p - cdef int len + cdef Py_ssize_t len cdef int rc - PyObject_AsReadBuffer(buffer, &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): + """ + fdrecv(SOCK, SIZE) -> FD, BUFFER + receive file FD and BUFFER of length up to SIZE from Unix-domain SOCK + """ cdef void *p cdef buf - cdef int len + cdef Py_ssize_t len cdef PyObject *obj cdef int fd - buf = PyString_FromStringAndSize(NULL, len) + buf = PyString_FromStringAndSize(NULL, size) p = PyString_AS_STRING(buf) len = fdpass_recv(_getfd(sock), &fd, p, size) if len < 0: @@ -59,4 +76,4 @@ def fdrecv(sock, unsigned size): _PyString_Resize(&obj, len) return fd, obj -#----- That's all, folks ---------------------------------------------------- +###----- That's all, folks --------------------------------------------------