Hurd: fix fdatasync/fsync if the fd does not support file_sync
authorPino Toscano <toscano.pino@tiscali.it>
Mon, 29 Oct 2012 18:35:56 +0000 (19:35 +0100)
committerPino Toscano <toscano.pino@tiscali.it>
Mon, 29 Oct 2012 18:35:56 +0000 (19:35 +0100)
Handle the case of the fd port implementing a stub (EOPNOTSUPP),
properly returning EINVAL.

ChangeLog
sysdeps/mach/hurd/fdatasync.c
sysdeps/mach/hurd/fsync.c

index 0cfa229..d2c7cc7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2012-10-29  Pino Toscano  <toscano.pino@tiscali.it>
 
+       * sysdeps/mach/hurd/fdatasync.c: Turn ERR into EINVAL if it is
+       EOPNOTSUPP.
+       * sysdeps/mach/hurd/fsync.c: Likewise.
+
        * sysdeps/pthread/aio_notify.c (__aio_notify_only)
        [_POSIX_REALTIME_SIGNALS]: Change condition to
        [_POSIX_REALTIME_SIGNALS > 0].
index 19d7a4a..22c1d10 100644 (file)
@@ -26,6 +26,12 @@ fdatasync (int fd)
 {
   error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 1));
   if (err)
-    return __hurd_dfail (fd, err);
+    {
+      if (err == EOPNOTSUPP)
+       /* If the file descriptor does not support sync, return EINVAL
+          as POSIX specifies.  */
+       err = EINVAL;
+      return __hurd_dfail (fd, err);
+    }
   return 0;
 }
index a474c8a..fe3e044 100644 (file)
@@ -27,6 +27,12 @@ fsync (fd)
 {
   error_t err = HURD_DPORT_USE (fd, __file_sync (port, 1, 0));
   if (err)
-    return __hurd_dfail (fd, err);
+    {
+      if (err == EOPNOTSUPP)
+       /* If the file descriptor does not support sync, return EINVAL
+          as POSIX specifies.  */
+       err = EINVAL;
+      return __hurd_dfail (fd, err);
+    }
   return 0;
 }