]> git.sesse.net Git - vlc/commitdiff
posix: open directories with close-on-exec flag
authorRémi Denis-Courmont <remi@remlab.net>
Mon, 19 Mar 2012 18:38:31 +0000 (20:38 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Mon, 19 Mar 2012 20:12:43 +0000 (22:12 +0200)
src/posix/filesystem.c

index 03fe5d363bef98dcc6587fd6407e3616e62727e8..5d8625fe408ac1fbffcfae3b5e05e5e9d81d893a 100644 (file)
@@ -162,15 +162,17 @@ int vlc_mkdir (const char *dirname, mode_t mode)
  */
 DIR *vlc_opendir (const char *dirname)
 {
-    const char *local_name = ToLocale (dirname);
-    if (unlikely(local_name == NULL))
-    {
-        errno = ENOENT;
+#ifdef O_DIRECTORY
+    int fd = vlc_open (dirname, O_RDONLY | O_DIRECTORY);
+#else /* If O_DIRECTORY is missing. fdopendir() will deal with ENOTDIR. */
+    int fd = vlc_open (dirname, O_RDONLY);
+#endif
+    if (fd == -1)
         return NULL;
-    }
 
-    DIR *dir = opendir (local_name);
-    LocaleFree (local_name);
+    DIR *dir = fdopendir (fd);
+    if (dir == NULL)
+        close (fd);
     return dir;
 }