cpython: 6e6532d313a1 (original) (raw)

new file mode 100644 --- /dev/null +++ b/Modules/clinic/fcntlmodule.c.h @@ -0,0 +1,188 @@ +/[clinic input] +preserve +[clinic start generated code]/ + +PyDoc_STRVAR(fcntl_fcntl__doc__, +"fcntl($module, fd, code, arg=None, /)\n" +"--\n" +"\n" +"Perform the operation code on file descriptor fd.\n" +"\n" +"The values used for code are operating system dependent, and are available\n" +"as constants in the fcntl module, using the same names as used in\n" +"the relevant C header files. The argument arg is optional, and\n" +"defaults to 0; it may be an int or a string. If arg is given as a string,\n" +"the return value of fcntl is a string of that length, containing the\n" +"resulting value put in the arg buffer by the operating system. The length\n" +"of the arg string is not allowed to exceed 1024 bytes. If the arg given\n" +"is an integer or if none is specified, the result value is an integer\n" +"corresponding to the return value of the fcntl call in the C code."); + +#define FCNTL_FCNTL_METHODDEF [](#l1.25)

+ +static PyObject * +fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg); + +static PyObject * +fcntl_fcntl(PyModuleDef *module, PyObject *args) +{

+

+ +exit:

+} + +PyDoc_STRVAR(fcntl_ioctl__doc__, +"ioctl($module, fd, op, arg=None, mutate_flag=True, /)\n" +"--\n" +"\n" +"Perform the operation op on file descriptor fd.\n" +"\n" +"The values used for op are operating system dependent, and are available as\n" +"constants in the fcntl or termios library modules, using the same names as\n" +"used in the relevant C header files.\n" +"\n" +"The argument arg is optional, and defaults to 0; it may be an int or a\n" +"buffer containing character data (most likely a string or an array).\n" +"\n" +"If the argument is a mutable buffer (such as an array) and if the\n" +"mutate_flag argument (which is only allowed in this case) is true then the\n" +"buffer is (in effect) passed to the operating system and changes made by\n" +"the OS will be reflected in the contents of the buffer after the call has\n" +"returned. The return value is the integer returned by the ioctl system\n" +"call.\n" +"\n" +"If the argument is a mutable buffer and the mutable_flag argument is not\n" +"passed or is false, the behavior is as if a string had been passed. This\n" +"behavior will change in future releases of Python.\n" +"\n" +"If the argument is an immutable buffer (most likely a string) then a copy\n" +"of the buffer is passed to the operating system and the return value is a\n" +"string of the same length containing whatever the operating system put in\n" +"the buffer. The length of the arg buffer in this case is not allowed to\n" +"exceed 1024 bytes.\n" +"\n" +"If the arg given is an integer or if none is specified, the result value is\n" +"an integer corresponding to the return value of the ioctl call in the C\n" +"code."); + +#define FCNTL_IOCTL_METHODDEF [](#l1.83)

+ +static PyObject * +fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); + +static PyObject * +fcntl_ioctl(PyModuleDef *module, PyObject *args) +{

+

+ +exit:

+} + +PyDoc_STRVAR(fcntl_flock__doc__, +"flock($module, fd, code, /)\n" +"--\n" +"\n" +"Perform the lock operation op on file descriptor fd.\n" +"\n" +"See the Unix manual page for flock(2) for details (On some systems, this\n" +"function is emulated using fcntl())."); + +#define FCNTL_FLOCK_METHODDEF [](#l1.117)

+ +static PyObject * +fcntl_flock_impl(PyModuleDef *module, int fd, int code); + +static PyObject * +fcntl_flock(PyModuleDef *module, PyObject *args) +{

+

+ +exit:

+} + +PyDoc_STRVAR(fcntl_lockf__doc__, +"lockf($module, fd, code, lenobj=None, startobj=None, whence=0, /)\n" +"--\n" +"\n" +"A wrapper around the fcntl() locking calls.\n" +"\n" +"fd is the file descriptor of the file to lock or unlock, and operation is one\n" +"of the following values:\n" +"\n" +" LOCK_UN - unlock\n" +" LOCK_SH - acquire a shared lock\n" +" LOCK_EX - acquire an exclusive lock\n" +"\n" +"When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with\n" +"LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the\n" +"lock cannot be acquired, an IOError will be raised and the exception will\n" +"have an errno attribute set to EACCES or EAGAIN (depending on the operating\n" +"system -- for portability, check for either value).\n" +"\n" +"length is the number of bytes to lock, with the default meaning to lock to\n" +"EOF. start is the byte offset, relative to whence, to that the lock\n" +"starts. whence is as with fileobj.seek(), specifically:\n" +"\n" +" 0 - relative to the start of the file (SEEK_SET)\n" +" 1 - relative to the current buffer position (SEEK_CUR)\n" +" 2 - relative to the end of the file (SEEK_END)"); + +#define FCNTL_LOCKF_METHODDEF [](#l1.167)

+ +static PyObject * +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); + +static PyObject * +fcntl_lockf(PyModuleDef *module, PyObject *args) +{

+

+ +exit:

+} +/[clinic end generated code: output=84bdde73a92f7c61 input=a9049054013a1b77]/

--- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -15,6 +15,12 @@ #include <stropts.h> #endif +/[clinic input] +output preset file +module fcntl +[clinic start generated code]/ +/[clinic end generated code: output=da39a3ee5e6b4b0d input=c7356fdb126a904a]/ + static int conv_descriptor(PyObject *object, int *target) { @@ -26,48 +32,72 @@ conv_descriptor(PyObject *object, int t return 1; } +/ Must come after conv_descriptor definition. / +#include "clinic/fcntlmodule.c.h" -/ fcntl(fd, op, [arg]) / +/[clinic input] +fcntl.fcntl +

+ +Perform the operation code on file descriptor fd. + +The values used for code are operating system dependent, and are available +as constants in the fcntl module, using the same names as used in +the relevant C header files. The argument arg is optional, and +defaults to 0; it may be an int or a string. If arg is given as a string, +the return value of fcntl is a string of that length, containing the +resulting value put in the arg buffer by the operating system. The length +of the arg string is not allowed to exceed 1024 bytes. If the arg given +is an integer or if none is specified, the result value is an integer +corresponding to the return value of the fcntl call in the C code. +[clinic start generated code]*/ static PyObject * -fcntl_fcntl(PyObject *self, PyObject *args) +fcntl_fcntl_impl(PyModuleDef module, int fd, int code, PyObject arg) +/[clinic end generated code: output=afc5bfa74a03ef0d input=4850c13a41e86930]/ {

+

+

@@ -76,29 +106,53 @@ fcntl_fcntl(PyObject *self, PyObject ar return PyLong_FromLong((long)ret); } -PyDoc_STRVAR(fcntl_doc, -"fcntl(fd, op, [arg])\n[](#l2.122) -\n[](#l2.123) -Perform the operation op on file descriptor fd. The values used\n[](#l2.124) -for op are operating system dependent, and are available\n[](#l2.125) -as constants in the fcntl module, using the same names as used in\n[](#l2.126) -the relevant C header files. The argument arg is optional, and\n[](#l2.127) -defaults to 0; it may be an int or a string. If arg is given as a string,\n[](#l2.128) -the return value of fcntl is a string of that length, containing the\n[](#l2.129) -resulting value put in the arg buffer by the operating system. The length\n[](#l2.130) -of the arg string is not allowed to exceed 1024 bytes. If the arg given\n[](#l2.131) -is an integer or if none is specified, the result value is an integer\n[](#l2.132) -corresponding to the return value of the fcntl call in the C code."); + +/[clinic input] +fcntl.ioctl +

+ +Perform the operation op on file descriptor fd. + +The values used for op are operating system dependent, and are available as +constants in the fcntl or termios library modules, using the same names as +used in the relevant C header files. + +The argument arg is optional, and defaults to 0; it may be an int or a +buffer containing character data (most likely a string or an array). +If the argument is a mutable buffer (such as an array) and if the +mutate_flag argument (which is only allowed in this case) is true then the +buffer is (in effect) passed to the operating system and changes made by +the OS will be reflected in the contents of the buffer after the call has +returned. The return value is the integer returned by the ioctl system +call. -/* ioctl(fd, op, [arg]) / +If the argument is a mutable buffer and the mutable_flag argument is not +passed or is false, the behavior is as if a string had been passed. This +behavior will change in future releases of Python. + +If the argument is an immutable buffer (most likely a string) then a copy +of the buffer is passed to the operating system and the return value is a +string of the same length containing whatever the operating system put in +the buffer. The length of the arg buffer in this case is not allowed to +exceed 1024 bytes. + +If the arg given is an integer or if none is specified, the result value is +an integer corresponding to the return value of the ioctl call in the C +code. +[clinic start generated code]/ static PyObject * -fcntl_ioctl(PyObject *self, PyObject *args) +fcntl_ioctl_impl(PyModuleDef module, int fd, unsigned int code, PyObject ob_arg, int mutate_arg) +/[clinic end generated code: output=ad47738c118622bf input=a55a6ee8e494c449]/ { #define IOCTL_BUFSZ 1024

+

-

#undef IOCTL_BUFSZ } -PyDoc_STRVAR(ioctl_doc, -"ioctl(fd, op[, arg[, mutate_flag]])\n[](#l2.366) -\n[](#l2.367) -Perform the operation op on file descriptor fd. The values used for op\n[](#l2.368) -are operating system dependent, and are available as constants in the\n[](#l2.369) -fcntl or termios library modules, using the same names as used in the\n[](#l2.370) -relevant C header files.\n[](#l2.371) -\n[](#l2.372) -The argument arg is optional, and defaults to 0; it may be an int or a\n[](#l2.373) -buffer containing character data (most likely a string or an array). \n[](#l2.374) -\n[](#l2.375) -If the argument is a mutable buffer (such as an array) and if the\n[](#l2.376) -mutate_flag argument (which is only allowed in this case) is true then the\n[](#l2.377) -buffer is (in effect) passed to the operating system and changes made by\n[](#l2.378) -the OS will be reflected in the contents of the buffer after the call has\n[](#l2.379) -returned. The return value is the integer returned by the ioctl system\n[](#l2.380) -call.\n[](#l2.381) -\n[](#l2.382) -If the argument is a mutable buffer and the mutable_flag argument is not\n[](#l2.383) -passed or is false, the behavior is as if a string had been passed. This\n[](#l2.384) -behavior will change in future releases of Python.\n[](#l2.385) -\n[](#l2.386) -If the argument is an immutable buffer (most likely a string) then a copy\n[](#l2.387) -of the buffer is passed to the operating system and the return value is a\n[](#l2.388) -string of the same length containing whatever the operating system put in\n[](#l2.389) -the buffer. The length of the arg buffer in this case is not allowed to\n[](#l2.390) -exceed 1024 bytes.\n[](#l2.391) -\n[](#l2.392) -If the arg given is an integer or if none is specified, the result value is\n[](#l2.393) -an integer corresponding to the return value of the ioctl call in the C\n[](#l2.394) -code."); +/*[clinic input] +fcntl.flock

-/* flock(fd, operation) / +Perform the lock operation op on file descriptor fd. + +See the Unix manual page for flock(2) for details (On some systems, this +function is emulated using fcntl()). +[clinic start generated code]/ static PyObject * -fcntl_flock(PyObject *self, PyObject args) +fcntl_flock_impl(PyModuleDef module, int fd, int code) +/[clinic end generated code: output=c9035133a7dbfc96 input=b762aa9448d05e43]/ {

- #ifdef HAVE_FLOCK Py_BEGIN_ALLOW_THREADS ret = flock(fd, code); @@ -299,29 +323,49 @@ fcntl_flock(PyObject *self, PyObject *ar PyErr_SetFromErrno(PyExc_IOError); return NULL; }

} -PyDoc_STRVAR(flock_doc, -"flock(fd, operation)\n[](#l2.436) -\n[](#l2.437) -Perform the lock operation op on file descriptor fd. See the Unix \n[](#l2.438) -manual page for flock(2) for details. (On some systems, this function is\n[](#l2.439) -emulated using fcntl().)"); - -/* lockf(fd, operation) / +/[clinic input] +fcntl.lockf +

+ +A wrapper around the fcntl() locking calls. + +fd is the file descriptor of the file to lock or unlock, and operation is one +of the following values: +

+ +When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with +LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the +lock cannot be acquired, an IOError will be raised and the exception will +have an errno attribute set to EACCES or EAGAIN (depending on the operating +system -- for portability, check for either value). + +length is the number of bytes to lock, with the default meaning to lock to +EOF. start is the byte offset, relative to whence, to that the lock +starts. whence is as with fileobj.seek(), specifically: +

+[clinic start generated code]*/ + static PyObject * -fcntl_lockf(PyObject *self, PyObject *args) +fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject lenobj, PyObject startobj, int whence) +/[clinic end generated code: output=5536df2892bf3ce9 input=44856fa06db36184]/ {

-

#ifndef LOCK_SH #define LOCK_SH 1 /* shared lock */ @@ -374,43 +418,17 @@ fcntl_lockf(PyObject *self, PyObject *ar PyErr_SetFromErrno(PyExc_IOError); return NULL; }

} -PyDoc_STRVAR(lockf_doc, -"lockf (fd, operation, length=0, start=0, whence=0)\n[](#l2.504) -\n[](#l2.505) -This is essentially a wrapper around the fcntl() locking calls. fd is the\n[](#l2.506) -file descriptor of the file to lock or unlock, and operation is one of the\n[](#l2.507) -following values:\n[](#l2.508) -\n[](#l2.509)

-\n[](#l2.513) -When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with\n[](#l2.514) -LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the\n[](#l2.515) -lock cannot be acquired, an IOError will be raised and the exception will\n[](#l2.516) -have an errno attribute set to EACCES or EAGAIN (depending on the operating\n[](#l2.517) -system -- for portability, check for either value).\n[](#l2.518) -\n[](#l2.519) -length is the number of bytes to lock, with the default meaning to lock to\n[](#l2.520) -EOF. start is the byte offset, relative to whence, to that the lock\n[](#l2.521) -starts. whence is as with fileobj.seek(), specifically:\n[](#l2.522) -\n[](#l2.523)

- /* List of functions */ static PyMethodDef fcntl_methods[] = {

};