posix: use posix_close() where available
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 21 Apr 2016 21:17:45 +0000 (00:17 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 21 Apr 2016 21:17:45 +0000 (00:17 +0300)
src/posix/filesystem.c

index dd516e1..52a39c9 100644 (file)
@@ -134,7 +134,17 @@ int vlc_memfd (void)
 
 int vlc_close (int fd)
 {
-    return close (fd);
+#ifdef POSIX_CLOSE_RESTART
+    return posix_close (fd, 0);
+#else
+    int ret = close (fd);
+    /* POSIX.2008 (and earlier) does not specify if the file descriptor is
+     * closed on failure. Assume it is as on Linux and most other common OSes.
+     * Also emulate the correct error code as per newer POSIX versions. */
+    if (unlikely(ret != 0) && unlikely(errno == EINTR))
+        errno = EINPROGRESS;
+    return ret;
+#endif
 }
 
 int vlc_mkdir (const char *dirname, mode_t mode)