From: Eric Blake Date: Tue, 1 Sep 2009 20:06:37 +0000 (-0600) Subject: fts: make directory fds more robust X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4b4678297df055617c13530d8d455ea95cc1e50;p=pspp fts: make directory fds more robust * lib/fts.c (O_DIRECTORY): Let take care of this. (opendirat): Specify O_DIRECTORY, and add fallbacks for safety. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 3ac7d123e5..cd31557fb5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-09-02 Eric Blake + fts: make directory fds more robust + * lib/fts.c (O_DIRECTORY): Let take care of this. + (opendirat): Specify O_DIRECTORY, and add fallbacks for safety. + backupfile, chdir-long, fts, savedir: make safer * lib/backupfile.c (includes): Use "dirent--.h", since numbered_backup can write to stderr during readdir. diff --git a/lib/fts.c b/lib/fts.c index 7616c6fc13..ebf66fc45f 100644 --- a/lib/fts.c +++ b/lib/fts.c @@ -228,10 +228,6 @@ static void free_dir (FTS *fts) {} # define SIZE_MAX ((size_t) -1) #endif -#ifndef O_DIRECTORY -# define O_DIRECTORY 0 -#endif - #define ISDOT(a) (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2]))) #define STREQ(a, b) (strcmp ((a), (b)) == 0) @@ -309,7 +305,8 @@ static inline DIR * internal_function opendirat (int fd, char const *dir) { - int new_fd = openat (fd, dir, O_RDONLY); + int new_fd = openat (fd, dir, + O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); DIR *dirp; if (new_fd < 0)