]> granicus.if.org Git - python/commitdiff
Two robustness patches:
authorGuido van Rossum <guido@python.org>
Fri, 31 Mar 2000 00:47:28 +0000 (00:47 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 31 Mar 2000 00:47:28 +0000 (00:47 +0000)
(1) In opendir(), don't call the lock-release macros; we're
manipulating list objects and that shouldn't be done in unlocked
state.

(2) Don't use posix_strint() for chmod() -- the mode_t arg might be a
64 bit int (reported by Nick Maclaren).

Modules/posixmodule.c

index 8ae5d2f596b32de61b30e654c37a2a17fc53d601..f5ac1d5f256a5eeac7d54039952523b3eaf2cae5 100644 (file)
@@ -692,7 +692,18 @@ posix_chmod(self, args)
        PyObject *self;
        PyObject *args;
 {
-       return posix_strint(args, "si:chmod", chmod);
+       char *path;
+       int i;
+       int res;
+       if (!PyArg_ParseTuple(args, format, &path, &i))
+               return NULL;
+       Py_BEGIN_ALLOW_THREADS
+       res = chmod(path, i);
+       Py_END_ALLOW_THREADS
+       if (res < 0)
+               return posix_error_with_filename(path);
+       Py_INCREF(Py_None);
+       return Py_None;
 }
 
 
@@ -998,14 +1009,11 @@ posix_listdir(self, args)
        struct dirent *ep;
        if (!PyArg_ParseTuple(args, "s:listdir", &name))
                return NULL;
-       Py_BEGIN_ALLOW_THREADS
        if ((dirp = opendir(name)) == NULL) {
-               Py_BLOCK_THREADS
                return posix_error_with_filename(name);
        }
        if ((d = PyList_New(0)) == NULL) {
                closedir(dirp);
-               Py_BLOCK_THREADS
                return NULL;
        }
        while ((ep = readdir(dirp)) != NULL) {
@@ -1028,7 +1036,6 @@ posix_listdir(self, args)
                Py_DECREF(v);
        }
        closedir(dirp);
-       Py_END_ALLOW_THREADS
 
        return d;