annotate Modules/fcntlmodule.c @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 84148898a606
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
1
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* fcntl module */
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
36793
1e8cb47beaaa Make Py_ssize_t-clean
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
4 #define PY_SSIZE_T_CLEAN
1e8cb47beaaa Make Py_ssize_t-clean
Thomas Wouters <thomas@python.org>
parents: 36324
diff changeset
5
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
6 #include "Python.h"
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
4600
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
8 #ifdef HAVE_SYS_FILE_H
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
9 #include <sys/file.h>
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
10 #endif
d36250aefb82 Keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4503
diff changeset
11
4623
1fab981465c8 Include <sys/ioctl.h>, to keep gcc -Wall happy.
Guido van Rossum <guido@python.org>
parents: 4600
diff changeset
12 #include <sys/ioctl.h>
3662
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
13 #include <fcntl.h>
26998
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
14 #ifdef HAVE_STROPTS_H
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
15 #include <stropts.h>
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
16 #endif
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
17
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
18 static int
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
19 conv_descriptor(PyObject *object, int *target)
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
20 {
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
21 int fd = PyObject_AsFileDescriptor(object);
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
22
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
23 if (fd < 0)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
24 return 0;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
25 *target = fd;
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
26 return 1;
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
27 }
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
28
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
29
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
30 /* fcntl(fd, op, [arg]) */
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
31
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
32 static PyObject *
13519
070e41f2697b ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
33 fcntl_fcntl(PyObject *self, PyObject *args)
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
35 int fd;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
36 int code;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
37 long arg;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
38 int ret;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
39 char *str;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
40 Py_ssize_t len;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
41 char buf[1024];
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
43 if (PyArg_ParseTuple(args, "O&is#:fcntl",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
44 conv_descriptor, &fd, &code, &str, &len)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
45 if (len > sizeof buf) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
46 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
47 "fcntl string arg too long");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
48 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
49 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
50 memcpy(buf, str, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
51 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
52 ret = fcntl(fd, code, buf);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
53 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
54 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
55 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
56 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
57 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
58 return PyBytes_FromStringAndSize(buf, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
59 }
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
60
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
61 PyErr_Clear();
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
62 arg = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
63 if (!PyArg_ParseTuple(args,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
64 "O&i|l;fcntl requires a file or file descriptor,"
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
65 " an integer and optionally a third integer or a string",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
66 conv_descriptor, &fd, &code, &arg)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
67 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
68 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
69 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
70 ret = fcntl(fd, code, arg);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
71 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
72 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
73 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
74 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
75 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
76 return PyLong_FromLong((long)ret);
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 }
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
79 PyDoc_STRVAR(fcntl_doc,
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
80 "fcntl(fd, op, [arg])\n\
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
81 \n\
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
82 Perform the operation op on file descriptor fd. The values used\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
83 for op are operating system dependent, and are available\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
84 as constants in the fcntl module, using the same names as used in\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
85 the relevant C header files. The argument arg is optional, and\n\
65119
f00440af9413 Merged revisions 84249,84264,84326-84327,84407,84476,84480-84482,84484,84530-84531,84553,84619,84684,84915-84916 via svnmerge from
Georg Brandl <georg@python.org>
parents: 64526
diff changeset
86 defaults to 0; it may be an int or a string. If arg is given as a string,\n\
17765
2f0df9f0b088 Fix the fcntl() docstring so the user is not mis-directed to the FCNTL
Fred Drake <fdrake@acm.org>
parents: 17743
diff changeset
87 the return value of fcntl is a string of that length, containing the\n\
65119
f00440af9413 Merged revisions 84249,84264,84326-84327,84407,84476,84480-84482,84484,84530-84531,84553,84619,84684,84915-84916 via svnmerge from
Georg Brandl <georg@python.org>
parents: 64526
diff changeset
88 resulting value put in the arg buffer by the operating system. The length\n\
f00440af9413 Merged revisions 84249,84264,84326-84327,84407,84476,84480-84482,84484,84530-84531,84553,84619,84684,84915-84916 via svnmerge from
Georg Brandl <georg@python.org>
parents: 64526
diff changeset
89 of the arg string is not allowed to exceed 1024 bytes. If the arg given\n\
17765
2f0df9f0b088 Fix the fcntl() docstring so the user is not mis-directed to the FCNTL
Fred Drake <fdrake@acm.org>
parents: 17743
diff changeset
90 is an integer or if none is specified, the result value is an integer\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
91 corresponding to the return value of the fcntl call in the C code.");
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
92
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
93
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
94 /* ioctl(fd, op, [arg]) */
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
96 static PyObject *
13519
070e41f2697b ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
97 fcntl_ioctl(PyObject *self, PyObject *args)
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 {
37977
1843710f32e8 SF bug/patch #1433877: string parameter to ioctl not null terminated
Thomas Wouters <thomas@python.org>
parents: 36806
diff changeset
99 #define IOCTL_BUFSZ 1024
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
100 int fd;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
101 /* In PyArg_ParseTuple below, we use the unsigned non-checked 'I'
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
102 format for the 'code' parameter because Python turns 0x8000000
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
103 into either a large positive number (PyLong or PyInt on 64-bit
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
104 platforms) or a negative number on others (32-bit PyInt)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
105 whereas the system expects it to be a 32bit bit field value
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
106 regardless of it being passed as an int or unsigned long on
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
107 various platforms. See the termios.TIOCSWINSZ constant across
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
108 platforms for an example of this.
45955
36e296e66d21 Merged revisions 61644,61646-61647,61649-61652,61656-61658,61663,61665,61667 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44535
diff changeset
109
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
110 If any of the 64bit platforms ever decide to use more than 32bits
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
111 in their unsigned long ioctl codes this will break and need
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
112 special casing based on the platform being built on.
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
113 */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
114 unsigned int code;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
115 int arg;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
116 int ret;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
117 Py_buffer pstr;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
118 char *str;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
119 Py_ssize_t len;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
120 int mutate_arg = 1;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
121 char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
122
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
123 if (PyArg_ParseTuple(args, "O&Iw*|i:ioctl",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
124 conv_descriptor, &fd, &code,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
125 &pstr, &mutate_arg)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
126 char *arg;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
127 str = pstr.buf;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
128 len = pstr.len;
28145
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
129
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
130 if (mutate_arg) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
131 if (len <= IOCTL_BUFSZ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
132 memcpy(buf, str, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
133 buf[len] = '\0';
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
134 arg = buf;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
135 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
136 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
137 arg = str;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
138 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
139 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
140 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
141 if (len > IOCTL_BUFSZ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
142 PyBuffer_Release(&pstr);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
143 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
144 "ioctl string arg too long");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
145 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
146 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
147 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
148 memcpy(buf, str, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
149 buf[len] = '\0';
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
150 arg = buf;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
151 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
152 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
153 if (buf == arg) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
154 Py_BEGIN_ALLOW_THREADS /* think array.resize() */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
155 ret = ioctl(fd, code, arg);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
156 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
157 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
158 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
159 ret = ioctl(fd, code, arg);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
160 }
64526
3e5a89376df5 Merged revisions 84589 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 61466
diff changeset
161 if (mutate_arg && (len <= IOCTL_BUFSZ)) {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
162 memcpy(str, buf, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
163 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
164 PyBuffer_Release(&pstr); /* No further access to str below this point */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
165 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
166 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
167 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
168 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
169 if (mutate_arg) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
170 return PyLong_FromLong(ret);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
171 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
172 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
173 return PyBytes_FromStringAndSize(buf, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
174 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
175 }
28145
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
176
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
177 PyErr_Clear();
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
178 if (PyArg_ParseTuple(args, "O&Is*:ioctl",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
179 conv_descriptor, &fd, &code, &pstr)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
180 str = pstr.buf;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
181 len = pstr.len;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
182 if (len > IOCTL_BUFSZ) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
183 PyBuffer_Release(&pstr);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
184 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
185 "ioctl string arg too long");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
186 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
187 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
188 memcpy(buf, str, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
189 buf[len] = '\0';
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
190 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
191 ret = ioctl(fd, code, buf);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
192 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
193 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
194 PyBuffer_Release(&pstr);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
195 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
196 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
197 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
198 PyBuffer_Release(&pstr);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
199 return PyBytes_FromStringAndSize(buf, len);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
200 }
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
201
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
202 PyErr_Clear();
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
203 arg = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
204 if (!PyArg_ParseTuple(args,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
205 "O&I|i;ioctl requires a file or file descriptor,"
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
206 " an integer and optionally an integer or buffer argument",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
207 conv_descriptor, &fd, &code, &arg)) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
208 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
209 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
210 Py_BEGIN_ALLOW_THREADS
28949
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 28145
diff changeset
211 #ifdef __VMS
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
212 ret = ioctl(fd, code, (void *)arg);
28949
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 28145
diff changeset
213 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
214 ret = ioctl(fd, code, arg);
28949
ac487a7f7f2c Patch #708495: Port more stuff to OpenVMS.
Martin v. Löwis <martin@v.loewis.de>
parents: 28145
diff changeset
215 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
216 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
217 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
218 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
219 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
220 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
221 return PyLong_FromLong((long)ret);
37977
1843710f32e8 SF bug/patch #1433877: string parameter to ioctl not null terminated
Thomas Wouters <thomas@python.org>
parents: 36806
diff changeset
222 #undef IOCTL_BUFSZ
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 }
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
224
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
225 PyDoc_STRVAR(ioctl_doc,
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
226 "ioctl(fd, op[, arg[, mutate_flag]])\n\
28145
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
227 \n\
86985
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
228 Perform the operation op on file descriptor fd. The values used for op\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
229 are operating system dependent, and are available as constants in the\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
230 fcntl or termios library modules, using the same names as used in the\n\
0e0dded5d616 #18985: Improve fcntl documentation.
R David Murray <rdmurray@bitdance.com>
parents: 85934
diff changeset
231 relevant C header files.\n\
28145
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
232 \n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
233 The argument arg is optional, and defaults to 0; it may be an int or a\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
234 buffer containing character data (most likely a string or an array). \n\
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
235 \n\
28145
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
236 If the argument is a mutable buffer (such as an array) and if the\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
237 mutate_flag argument (which is only allowed in this case) is true then the\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
238 buffer is (in effect) passed to the operating system and changes made by\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
239 the OS will be reflected in the contents of the buffer after the call has\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
240 returned. The return value is the integer returned by the ioctl system\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
241 call.\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
242 \n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
243 If the argument is a mutable buffer and the mutable_flag argument is not\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
244 passed or is false, the behavior is as if a string had been passed. This\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
245 behavior will change in future releases of Python.\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
246 \n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
247 If the argument is an immutable buffer (most likely a string) then a copy\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
248 of the buffer is passed to the operating system and the return value is a\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
249 string of the same length containing whatever the operating system put in\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
250 the buffer. The length of the arg buffer in this case is not allowed to\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
251 exceed 1024 bytes.\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
252 \n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
253 If the arg given is an integer or if none is specified, the result value is\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
254 an integer corresponding to the return value of the ioctl call in the C\n\
898ce4e96f59 Fix bug
Michael W. Hudson <mwh@python.net>
parents: 26998
diff changeset
255 code.");
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
256
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
257
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
258 /* flock(fd, operation) */
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
259
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
260 static PyObject *
13519
070e41f2697b ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
261 fcntl_flock(PyObject *self, PyObject *args)
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
262 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
263 int fd;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
264 int code;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
265 int ret;
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
266
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
267 if (!PyArg_ParseTuple(args, "O&i:flock",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
268 conv_descriptor, &fd, &code))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
269 return NULL;
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
270
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
271 #ifdef HAVE_FLOCK
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
272 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
273 ret = flock(fd, code);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
274 Py_END_ALLOW_THREADS
3662
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
275 #else
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
276
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
277 #ifndef LOCK_SH
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
278 #define LOCK_SH 1 /* shared lock */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
279 #define LOCK_EX 2 /* exclusive lock */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
280 #define LOCK_NB 4 /* don't block when locking */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
281 #define LOCK_UN 8 /* unlock */
3662
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
282 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
283 {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
284 struct flock l;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
285 if (code == LOCK_UN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
286 l.l_type = F_UNLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
287 else if (code & LOCK_SH)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
288 l.l_type = F_RDLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
289 else if (code & LOCK_EX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
290 l.l_type = F_WRLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
291 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
292 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
293 "unrecognized flock argument");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
294 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
295 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
296 l.l_whence = l.l_start = l.l_len = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
297 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
298 ret = fcntl(fd, (code & LOCK_NB) ? F_SETLK : F_SETLKW, &l);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
299 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
300 }
3662
399470a958c2 A fcntl implementation for systems (like Solaris) without flock() call.
Guido van Rossum <guido@python.org>
parents: 3598
diff changeset
301 #endif /* HAVE_FLOCK */
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
302 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
303 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
304 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
305 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
306 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
307 return Py_None;
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
308 }
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
309
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
310 PyDoc_STRVAR(flock_doc,
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
311 "flock(fd, operation)\n\
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
312 \n\
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
313 Perform the lock operation op on file descriptor fd. See the Unix \n\
85934
735d8b856928 Issue #19147: Fix docstring for fcntl.flock to refer to correct man section.
Ned Deily <nad@acm.org>
parents: 73304
diff changeset
314 manual page for flock(2) for details. (On some systems, this function is\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
315 emulated using fcntl().)");
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
316
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
317
4293
69bbc21f55cf Added lockf() call
Guido van Rossum <guido@python.org>
parents: 3662
diff changeset
318 /* lockf(fd, operation) */
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
319 static PyObject *
13519
070e41f2697b ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents: 13256
diff changeset
320 fcntl_lockf(PyObject *self, PyObject *args)
4293
69bbc21f55cf Added lockf() call
Guido van Rossum <guido@python.org>
parents: 3662
diff changeset
321 {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
322 int fd, code, ret, whence = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
323 PyObject *lenobj = NULL, *startobj = NULL;
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
324
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
325 if (!PyArg_ParseTuple(args, "O&i|OOi:lockf",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
326 conv_descriptor, &fd, &code,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
327 &lenobj, &startobj, &whence))
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
328 return NULL;
4293
69bbc21f55cf Added lockf() call
Guido van Rossum <guido@python.org>
parents: 3662
diff changeset
329
69bbc21f55cf Added lockf() call
Guido van Rossum <guido@python.org>
parents: 3662
diff changeset
330 #ifndef LOCK_SH
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
331 #define LOCK_SH 1 /* shared lock */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
332 #define LOCK_EX 2 /* exclusive lock */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
333 #define LOCK_NB 4 /* don't block when locking */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
334 #define LOCK_UN 8 /* unlock */
22114
c454b76d51e7 OS/2 EMX port changes (Modules part of patch #450267):
Andrew MacIntyre <andymac@bullseye.apana.org.au>
parents: 21712
diff changeset
335 #endif /* LOCK_SH */
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
336 {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
337 struct flock l;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
338 if (code == LOCK_UN)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
339 l.l_type = F_UNLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
340 else if (code & LOCK_SH)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
341 l.l_type = F_RDLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
342 else if (code & LOCK_EX)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
343 l.l_type = F_WRLCK;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
344 else {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
345 PyErr_SetString(PyExc_ValueError,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
346 "unrecognized lockf argument");
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
347 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
348 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
349 l.l_start = l.l_len = 0;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
350 if (startobj != NULL) {
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
351 #if !defined(HAVE_LARGEFILE_SUPPORT)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
352 l.l_start = PyLong_AsLong(startobj);
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
353 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
354 l.l_start = PyLong_Check(startobj) ?
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
355 PyLong_AsLongLong(startobj) :
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
356 PyLong_AsLong(startobj);
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
357 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
358 if (PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
359 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
360 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
361 if (lenobj != NULL) {
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
362 #if !defined(HAVE_LARGEFILE_SUPPORT)
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
363 l.l_len = PyLong_AsLong(lenobj);
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
364 #else
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
365 l.l_len = PyLong_Check(lenobj) ?
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
366 PyLong_AsLongLong(lenobj) :
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
367 PyLong_AsLong(lenobj);
9786
40f723ac26e8 Changes for long file support by Steve Clift.
Guido van Rossum <guido@python.org>
parents: 9588
diff changeset
368 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
369 if (PyErr_Occurred())
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
370 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
371 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
372 l.l_whence = whence;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
373 Py_BEGIN_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
374 ret = fcntl(fd, (code & LOCK_NB) ? F_SETLK : F_SETLKW, &l);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
375 Py_END_ALLOW_THREADS
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
376 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
377 if (ret < 0) {
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
378 PyErr_SetFromErrno(PyExc_IOError);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
379 return NULL;
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
380 }
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
381 Py_INCREF(Py_None);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
382 return Py_None;
4293
69bbc21f55cf Added lockf() call
Guido van Rossum <guido@python.org>
parents: 3662
diff changeset
383 }
3598
6c9260ae0d16 Added flock().
Guido van Rossum <guido@python.org>
parents: 3153
diff changeset
384
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
385 PyDoc_STRVAR(lockf_doc,
16245
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
386 "lockf (fd, operation, length=0, start=0, whence=0)\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
387 \n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
388 This is essentially a wrapper around the fcntl() locking calls. fd is the\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
389 file descriptor of the file to lock or unlock, and operation is one of the\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
390 following values:\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
391 \n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
392 LOCK_UN - unlock\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
393 LOCK_SH - acquire a shared lock\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
394 LOCK_EX - acquire an exclusive lock\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
395 \n\
44535
420fe6d7d5f4 Merged revisions 59703-59773 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents: 44099
diff changeset
396 When operation is LOCK_SH or LOCK_EX, it can also be bitwise ORed with\n\
16245
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
397 LOCK_NB to avoid blocking on lock acquisition. If LOCK_NB is used and the\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
398 lock cannot be acquired, an IOError will be raised and the exception will\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
399 have an errno attribute set to EACCES or EAGAIN (depending on the operating\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
400 system -- for portability, check for either value).\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
401 \n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
402 length is the number of bytes to lock, with the default meaning to lock to\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
403 EOF. start is the byte offset, relative to whence, to that the lock\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
404 starts. whence is as with fileobj.seek(), specifically:\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
405 \n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
406 0 - relative to the start of the file (SEEK_SET)\n\
09736aeab831 Let's keep things portable to non GCC compilers, please.
Sjoerd Mullender <sjoerd@acm.org>
parents: 16238
diff changeset
407 1 - relative to the current buffer position (SEEK_CUR)\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
408 2 - relative to the end of the file (SEEK_END)");
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
409
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
410 /* List of functions */
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
411
4757
e1f1725cae6d Grandly renamed.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents: 4623
diff changeset
412 static PyMethodDef fcntl_methods[] = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
413 {"fcntl", fcntl_fcntl, METH_VARARGS, fcntl_doc},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
414 {"ioctl", fcntl_ioctl, METH_VARARGS, ioctl_doc},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
415 {"flock", fcntl_flock, METH_VARARGS, flock_doc},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
416 {"lockf", fcntl_lockf, METH_VARARGS, lockf_doc},
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
417 {NULL, NULL} /* sentinel */
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
418 };
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
419
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
420
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
421 PyDoc_STRVAR(module_doc,
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
422 "This module performs file control and I/O control on file \n\
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
423 descriptors. It is an interface to the fcntl() and ioctl() Unix\n\
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
424 routines. File descriptors can be obtained with the fileno() method of\n\
23832
ed1ba37a46b7 Patch #568124: Add doc string macros.
Martin v. Löwis <martin@v.loewis.de>
parents: 22114
diff changeset
425 a file or socket object.");
9506
04426224302a Doc strings by Chris Petrilli.
Guido van Rossum <guido@python.org>
parents: 6055
diff changeset
426
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
427 /* Module initialisation */
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
428
26998
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
429
5912
f527c12f2e55 Add definitions for symbolic constants LOCK_{EX,NB,SH,UN}.
Guido van Rossum <guido@python.org>
parents: 4758
diff changeset
430 static int
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
431 all_ins(PyObject* m)
5912
f527c12f2e55 Add definitions for symbolic constants LOCK_{EX,NB,SH,UN}.
Guido van Rossum <guido@python.org>
parents: 4758
diff changeset
432 {
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
433 if (PyModule_AddIntMacro(m, LOCK_SH)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
434 if (PyModule_AddIntMacro(m, LOCK_EX)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
435 if (PyModule_AddIntMacro(m, LOCK_NB)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
436 if (PyModule_AddIntMacro(m, LOCK_UN)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
437 /* GNU extensions, as of glibc 2.2.4 */
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
438 #ifdef LOCK_MAND
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
439 if (PyModule_AddIntMacro(m, LOCK_MAND)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
440 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
441 #ifdef LOCK_READ
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
442 if (PyModule_AddIntMacro(m, LOCK_READ)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
443 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
444 #ifdef LOCK_WRITE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
445 if (PyModule_AddIntMacro(m, LOCK_WRITE)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
446 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
447 #ifdef LOCK_RW
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
448 if (PyModule_AddIntMacro(m, LOCK_RW)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
449 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
450
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
451 #ifdef F_DUPFD
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
452 if (PyModule_AddIntMacro(m, F_DUPFD)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
453 #endif
81313
0afa7b323abb fcntl: add F_DUPFD_CLOEXEC constant, available on Linux 2.6.24+.
Victor Stinner <victor.stinner@gmail.com>
parents: 79475
diff changeset
454 #ifdef F_DUPFD_CLOEXEC
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
455 if (PyModule_AddIntMacro(m, F_DUPFD_CLOEXEC)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
456 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
457 #ifdef F_GETFD
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
458 if (PyModule_AddIntMacro(m, F_GETFD)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
459 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
460 #ifdef F_SETFD
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
461 if (PyModule_AddIntMacro(m, F_SETFD)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
462 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
463 #ifdef F_GETFL
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
464 if (PyModule_AddIntMacro(m, F_GETFL)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
465 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
466 #ifdef F_SETFL
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
467 if (PyModule_AddIntMacro(m, F_SETFL)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
468 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
469 #ifdef F_GETLK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
470 if (PyModule_AddIntMacro(m, F_GETLK)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
471 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
472 #ifdef F_SETLK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
473 if (PyModule_AddIntMacro(m, F_SETLK)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
474 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
475 #ifdef F_SETLKW
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
476 if (PyModule_AddIntMacro(m, F_SETLKW)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
477 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
478 #ifdef F_GETOWN
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
479 if (PyModule_AddIntMacro(m, F_GETOWN)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
480 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
481 #ifdef F_SETOWN
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
482 if (PyModule_AddIntMacro(m, F_SETOWN)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
483 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
484 #ifdef F_GETSIG
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
485 if (PyModule_AddIntMacro(m, F_GETSIG)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
486 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
487 #ifdef F_SETSIG
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
488 if (PyModule_AddIntMacro(m, F_SETSIG)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
489 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
490 #ifdef F_RDLCK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
491 if (PyModule_AddIntMacro(m, F_RDLCK)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
492 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
493 #ifdef F_WRLCK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
494 if (PyModule_AddIntMacro(m, F_WRLCK)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
495 #endif
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
496 #ifdef F_UNLCK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
497 if (PyModule_AddIntMacro(m, F_UNLCK)) return -1;
17743
3ee9a3f60bc7 Modify to allow file objects wherever file descriptors are needed.
Fred Drake <fdrake@acm.org>
parents: 16245
diff changeset
498 #endif
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
499 /* LFS constants */
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
500 #ifdef F_GETLK64
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
501 if (PyModule_AddIntMacro(m, F_GETLK64)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
502 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
503 #ifdef F_SETLK64
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
504 if (PyModule_AddIntMacro(m, F_SETLK64)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
505 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
506 #ifdef F_SETLKW64
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
507 if (PyModule_AddIntMacro(m, F_SETLKW64)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
508 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
509 /* GNU extensions, as of glibc 2.2.4. */
47109
a02bc2a84d19 Merged revisions 63361-63373,63375,63377-63380 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 45955
diff changeset
510 #ifdef FASYNC
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
511 if (PyModule_AddIntMacro(m, FASYNC)) return -1;
47109
a02bc2a84d19 Merged revisions 63361-63373,63375,63377-63380 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 45955
diff changeset
512 #endif
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
513 #ifdef F_SETLEASE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
514 if (PyModule_AddIntMacro(m, F_SETLEASE)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
515 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
516 #ifdef F_GETLEASE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
517 if (PyModule_AddIntMacro(m, F_GETLEASE)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
518 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
519 #ifdef F_NOTIFY
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
520 if (PyModule_AddIntMacro(m, F_NOTIFY)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
521 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
522 /* Old BSD flock(). */
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
523 #ifdef F_EXLCK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
524 if (PyModule_AddIntMacro(m, F_EXLCK)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
525 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
526 #ifdef F_SHLCK
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
527 if (PyModule_AddIntMacro(m, F_SHLCK)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
528 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
529
73304
cee6fdd6436d Issue #13324: fcntlmodule: Add the F_NOCACHE flag. Patch by Alex Stewart.
Charles-François Natali <neologix@free.fr>
parents: 68257
diff changeset
530 /* OS X specifics */
48680
7779af388aec Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47580
diff changeset
531 #ifdef F_FULLFSYNC
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
532 if (PyModule_AddIntMacro(m, F_FULLFSYNC)) return -1;
48680
7779af388aec Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47580
diff changeset
533 #endif
73304
cee6fdd6436d Issue #13324: fcntlmodule: Add the F_NOCACHE flag. Patch by Alex Stewart.
Charles-François Natali <neologix@free.fr>
parents: 68257
diff changeset
534 #ifdef F_NOCACHE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
535 if (PyModule_AddIntMacro(m, F_NOCACHE)) return -1;
73304
cee6fdd6436d Issue #13324: fcntlmodule: Add the F_NOCACHE flag. Patch by Alex Stewart.
Charles-François Natali <neologix@free.fr>
parents: 68257
diff changeset
536 #endif
48680
7779af388aec Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents: 47580
diff changeset
537
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
538 /* For F_{GET|SET}FL */
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
539 #ifdef FD_CLOEXEC
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
540 if (PyModule_AddIntMacro(m, FD_CLOEXEC)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
541 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
542
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
543 /* For F_NOTIFY */
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
544 #ifdef DN_ACCESS
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
545 if (PyModule_AddIntMacro(m, DN_ACCESS)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
546 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
547 #ifdef DN_MODIFY
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
548 if (PyModule_AddIntMacro(m, DN_MODIFY)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
549 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
550 #ifdef DN_CREATE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
551 if (PyModule_AddIntMacro(m, DN_CREATE)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
552 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
553 #ifdef DN_DELETE
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
554 if (PyModule_AddIntMacro(m, DN_DELETE)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
555 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
556 #ifdef DN_RENAME
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
557 if (PyModule_AddIntMacro(m, DN_RENAME)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
558 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
559 #ifdef DN_ATTRIB
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
560 if (PyModule_AddIntMacro(m, DN_ATTRIB)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
561 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
562 #ifdef DN_MULTISHOT
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
563 if (PyModule_AddIntMacro(m, DN_MULTISHOT)) return -1;
21585
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
564 #endif
fdc39e27a494 Add fcntl.h constants from glibc 2.2.4. Fixes #496171.
Martin v. Löwis <martin@v.loewis.de>
parents: 17830
diff changeset
565
26998
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
566 #ifdef HAVE_STROPTS_H
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
567 /* Unix 98 guarantees that these are in stropts.h. */
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
568 if (PyModule_AddIntMacro(m, I_PUSH)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
569 if (PyModule_AddIntMacro(m, I_POP)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
570 if (PyModule_AddIntMacro(m, I_LOOK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
571 if (PyModule_AddIntMacro(m, I_FLUSH)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
572 if (PyModule_AddIntMacro(m, I_FLUSHBAND)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
573 if (PyModule_AddIntMacro(m, I_SETSIG)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
574 if (PyModule_AddIntMacro(m, I_GETSIG)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
575 if (PyModule_AddIntMacro(m, I_FIND)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
576 if (PyModule_AddIntMacro(m, I_PEEK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
577 if (PyModule_AddIntMacro(m, I_SRDOPT)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
578 if (PyModule_AddIntMacro(m, I_GRDOPT)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
579 if (PyModule_AddIntMacro(m, I_NREAD)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
580 if (PyModule_AddIntMacro(m, I_FDINSERT)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
581 if (PyModule_AddIntMacro(m, I_STR)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
582 if (PyModule_AddIntMacro(m, I_SWROPT)) return -1;
29045
de564a8733d2 Simple fix for
Michael W. Hudson <mwh@python.net>
parents: 28949
diff changeset
583 #ifdef I_GWROPT
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
584 /* despite the comment above, old-ish glibcs miss a couple... */
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
585 if (PyModule_AddIntMacro(m, I_GWROPT)) return -1;
29045
de564a8733d2 Simple fix for
Michael W. Hudson <mwh@python.net>
parents: 28949
diff changeset
586 #endif
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
587 if (PyModule_AddIntMacro(m, I_SENDFD)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
588 if (PyModule_AddIntMacro(m, I_RECVFD)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
589 if (PyModule_AddIntMacro(m, I_LIST)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
590 if (PyModule_AddIntMacro(m, I_ATMARK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
591 if (PyModule_AddIntMacro(m, I_CKBAND)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
592 if (PyModule_AddIntMacro(m, I_GETBAND)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
593 if (PyModule_AddIntMacro(m, I_CANPUT)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
594 if (PyModule_AddIntMacro(m, I_SETCLTIME)) return -1;
29045
de564a8733d2 Simple fix for
Michael W. Hudson <mwh@python.net>
parents: 28949
diff changeset
595 #ifdef I_GETCLTIME
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
596 if (PyModule_AddIntMacro(m, I_GETCLTIME)) return -1;
29045
de564a8733d2 Simple fix for
Michael W. Hudson <mwh@python.net>
parents: 28949
diff changeset
597 #endif
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
598 if (PyModule_AddIntMacro(m, I_LINK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
599 if (PyModule_AddIntMacro(m, I_UNLINK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
600 if (PyModule_AddIntMacro(m, I_PLINK)) return -1;
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
601 if (PyModule_AddIntMacro(m, I_PUNLINK)) return -1;
26998
6ca1c0d3ef19 Expose I_ constants. Auto-detect stropts.h. Properly configure the slave terminal.
Martin v. Löwis <martin@v.loewis.de>
parents: 24471
diff changeset
602 #endif
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
603
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
604 return 0;
5912
f527c12f2e55 Add definitions for symbolic constants LOCK_{EX,NB,SH,UN}.
Guido van Rossum <guido@python.org>
parents: 4758
diff changeset
605 }
f527c12f2e55 Add definitions for symbolic constants LOCK_{EX,NB,SH,UN}.
Guido van Rossum <guido@python.org>
parents: 4758
diff changeset
606
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
607
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
608 static struct PyModuleDef fcntlmodule = {
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
609 PyModuleDef_HEAD_INIT,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
610 "fcntl",
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
611 module_doc,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
612 -1,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
613 fcntl_methods,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
614 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
615 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
616 NULL,
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
617 NULL
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
618 };
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
619
24471
f66b3a3509c7 Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents: 23832
diff changeset
620 PyMODINIT_FUNC
47580
94f64f11fdd0 Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents: 47301
diff changeset
621 PyInit_fcntl(void)
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
622 {
83867
12cbb5183d98 Issue #17917: Use PyModule_AddIntMacro() instead of PyModule_AddIntConstant()
Charles-Francois Natali <cf.natali@gmail.com>
parents: 81313
diff changeset
623 PyObject *m;
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
624
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
625 /* Create the module and add the functions and documentation */
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
626 m = PyModule_Create(&fcntlmodule);
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
627 if (m == NULL)
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
628 return NULL;
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
629
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
630 /* Add some symbolic constants to the module */
87679
84148898a606 Issue #18994: Add a missing check for a return value in fcntmodule. Patch by
Charles-François Natali <cf.natali@gmail.com>
parents: 86986
diff changeset
631 if (all_ins(m) < 0)
84148898a606 Issue #18994: Add a missing check for a return value in fcntmodule. Patch by
Charles-François Natali <cf.natali@gmail.com>
parents: 86986
diff changeset
632 return NULL;
84148898a606 Issue #18994: Add a missing check for a return value in fcntmodule. Patch by
Charles-François Natali <cf.natali@gmail.com>
parents: 86986
diff changeset
633
61466
cab14be0ada1 Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents: 54307
diff changeset
634 return m;
960
7d3a053c6765 struct: pack/unpack binary structs; fcntl: fcntl(), ioctl().
Guido van Rossum <guido@python.org>
parents:
diff changeset
635 }