]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Changes for long file support by Steve Clift.
authorGuido van Rossum <guido@python.org>
Wed, 6 Jan 1999 18:44:23 +0000 (18:44 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 6 Jan 1999 18:44:23 +0000 (18:44 +0000)
He also fixes thread-related evil that caused core dumps.

Modules/fcntlmodule.c

index 59a4d4ae55e3f1ea4063aad0170a1d037ceb2c5c..1764bca705db00906486ad320b3b73be8b1f8cbf 100644 (file)
@@ -178,9 +178,10 @@ fcntl_flock(self, args)
        if (!PyArg_Parse(args, "(ii)", &fd, &code))
                return NULL;
 
-       Py_BEGIN_ALLOW_THREADS
 #ifdef HAVE_FLOCK
+       Py_BEGIN_ALLOW_THREADS
        ret = flock(fd, code);
+       Py_END_ALLOW_THREADS
 #else
 
 #ifndef LOCK_SH
@@ -203,10 +204,11 @@ fcntl_flock(self, args)
                        return NULL;
                }
                l.l_whence = l.l_start = l.l_len = 0;
+               Py_BEGIN_ALLOW_THREADS
                ret = fcntl(fd, (code & LOCK_NB) ? F_SETLK : F_SETLKW, &l);
+               Py_END_ALLOW_THREADS
        }
 #endif /* HAVE_FLOCK */
-       Py_END_ALLOW_THREADS
        if (ret < 0) {
                PyErr_SetFromErrno(PyExc_IOError);
                return NULL;
@@ -229,13 +231,13 @@ fcntl_lockf(self, args)
        PyObject *self; /* Not used */
        PyObject *args;
 {
-       int fd, code, len = 0, start = 0, whence = 0, ret;
+       int fd, code, ret, whence = 0;
+       PyObject *lenobj = NULL, *startobj = NULL;
 
-       if (!PyArg_ParseTuple(args, "ii|iii", &fd, &code, &len, 
-                              &start, &whence))
+       if (!PyArg_ParseTuple(args, "ii|OOi", &fd, &code,
+                             &lenobj, &startobj, &whence))
            return NULL;
 
-       Py_BEGIN_ALLOW_THREADS
 #ifndef LOCK_SH
 #define LOCK_SH                1       /* shared lock */
 #define LOCK_EX                2       /* exclusive lock */
@@ -255,12 +257,34 @@ fcntl_lockf(self, args)
                                        "unrecognized flock argument");
                        return NULL;
                }
-               l.l_len = len;
-               l.l_start = start;
+               l.l_start = l.l_len = 0;
+               if (startobj != NULL) {
+#if !defined(HAVE_LARGEFILE_SUPPORT)
+                       l.l_start = PyInt_AsLong(startobj);
+#else
+                       l.l_start = PyLong_Check(startobj) ?
+                                       PyLong_AsLongLong(startobj) :
+                                       PyInt_AsLong(startobj);
+#endif
+                       if (PyErr_Occurred())
+                               return NULL;
+               }
+               if (lenobj != NULL) {
+#if !defined(HAVE_LARGEFILE_SUPPORT)
+                       l.l_len = PyInt_AsLong(lenobj);
+#else
+                       l.l_len = PyLong_Check(lenobj) ?
+                                       PyLong_AsLongLong(lenobj) :
+                                       PyInt_AsLong(lenobj);
+#endif
+                       if (PyErr_Occurred())
+                               return NULL;
+               }
                l.l_whence = whence;
+               Py_BEGIN_ALLOW_THREADS
                ret = fcntl(fd, (code & LOCK_NB) ? F_SETLK : F_SETLKW, &l);
+               Py_END_ALLOW_THREADS
        }
-       Py_END_ALLOW_THREADS
        if (ret < 0) {
                PyErr_SetFromErrno(PyExc_IOError);
                return NULL;