1 diff -ruN Python-2.6.7-orig/Modules/posixmodule.c Python-2.6.7/Modules/posixmodule.c
2 --- Python-2.6.7-orig/Modules/posixmodule.c 2010-07-24 10:05:19.000000000 +0000
3 +++ Python-2.6.7/Modules/posixmodule.c 2012-02-15 21:00:26.835701885 +0000
4 @@ -6376,15 +6376,34 @@
5 "closerange(fd_low, fd_high)\n\n\
6 Closes all file descriptors in [fd_low, fd_high), ignoring errors.");
7
8 +static int
9 +close_func(void *lohi, int fd)
10 +{
11 + int lo = ((int *)lohi)[0];
12 + int hi = ((int *)lohi)[1];
13 +
14 + if (fd >= hi)
15 + return (1);
16 + else if (fd >= lo)
17 + close(fd);
18 +
19 + return (0);
20 +}
21 +
22 static PyObject *
23 posix_closerange(PyObject *self, PyObject *args)
24 {
25 int fd_from, fd_to, i;
26 + int lohi[2];
27 +
28 if (!PyArg_ParseTuple(args, "ii:closerange", &fd_from, &fd_to))
29 return NULL;
30 Py_BEGIN_ALLOW_THREADS
31 - for (i = fd_from; i < fd_to; i++)
32 - close(i);
33 +
34 + lohi[0] = fd_from;
35 + lohi[1] = fd_to;
36 + fdwalk(close_func, lohi);
37 +
38 Py_END_ALLOW_THREADS
39 Py_RETURN_NONE;
40 }