]> granicus.if.org Git - python/commitdiff
Added fsync() and fdatasync(). Patches by Scott Cotton. Requires
authorGuido van Rossum <guido@python.org>
Fri, 8 Jan 1999 21:05:37 +0000 (21:05 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 8 Jan 1999 21:05:37 +0000 (21:05 +0000)
HAVE_* macros set by configure script.

Modules/posixmodule.c

index dd3cb721d2b6711d6d4833d57b6563b2bc0a2e1c..2441237092df316deb8c8a5830831f065571f1fb 100644 (file)
@@ -400,6 +400,25 @@ static PyObject * os2_error(int code)
 
 /* POSIX generic methods */
 
+static PyObject *
+posix_int(args, func)
+        PyObject *args;
+       int (*func) Py_FPROTO((int));
+{
+       int fd;
+       int res;
+       if (!PyArg_Parse(args,  "i", &fd))
+               return NULL;
+       Py_BEGIN_ALLOW_THREADS
+       res = (*func)(fd);
+       Py_END_ALLOW_THREADS
+       if (res < 0)
+               return posix_error();
+       Py_INCREF(Py_None);
+       return Py_None;
+}
+
+
 static PyObject *
 posix_1str(args, func)
        PyObject *args;
@@ -590,6 +609,38 @@ posix_chmod(self, args)
 }
 
 
+#ifdef HAVE_FSYNC
+static char posix_fsync__doc__[] =
+"fsync(fildes) -> None\n\
+force write of file with filedescriptor to disk.";
+
+static PyObject *
+posix_fsync(self, args)
+       PyObject *self;
+       PyObject *args;
+{
+       
+       return posix_int(args, fsync);
+}
+#endif /* HAVE_FSYNC */
+
+#ifdef HAVE_FDATASYNC
+static char posix_fdatasync__doc__[] =
+"fdatasync(fildes) -> None\n\
+force write of file with filedescriptor to disk.\n\
+ does not force update of metadata.";
+
+static PyObject *
+posix_fdatasync(self, args)
+       PyObject *self;
+       PyObject *args;
+{
+       
+       return posix_int(args, fdatasync);
+}
+#endif /* HAVE_FDATASYNC */
+
+
 #ifdef HAVE_CHOWN
 static char posix_chown__doc__[] =
 "chown(path, uid, gid) -> None\n\
@@ -2935,6 +2986,12 @@ static PyMethodDef posix_methods[] = {
 #ifdef HAVE_STRERROR
        {"strerror",    posix_strerror, 1, posix_strerror__doc__},
 #endif
+#ifdef HAVE_FSYNC
+       {"fsync",       posix_fsync, 0, posix_fsync__doc__},
+#endif
+#ifdef HAVE_FDATASYNC
+       {"fdatasync",   posix_fdatasync,  0, posix_fdatasync__doc__},
+#endif
 #ifdef HAVE_SYS_WAIT_H
 #ifdef WIFSTOPPED
         {"WIFSTOPPED", posix_WIFSTOPPED, 0, posix_WIFSTOPPED__doc__},