]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - io/ftw.c
Update copyright dates with scripts/update-copyrights.
[thirdparty/glibc.git] / io / ftw.c
index 9cc09077ed1c9fbf3b0223721ad4b0518eb23e49..33e1a5ecab6bec60a91b659ca9d105b8330b291c 100644 (file)
--- a/io/ftw.c
+++ b/io/ftw.c
@@ -1,5 +1,5 @@
 /* File tree walker functions.
-   Copyright (C) 1996-2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1996-2019 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -14,9 +14,8 @@
    Lesser General Public License for more details.
 
    You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_CONFIG_H
 # include <config.h>
@@ -67,9 +66,7 @@ char *alloca ();
 #include <string.h>
 #include <unistd.h>
 #include <not-cancel.h>
-#if HAVE_SYS_PARAM_H || defined _LIBC
-# include <sys/param.h>
-#endif
+#include <sys/param.h>
 #ifdef _LIBC
 # include <include/sys/stat.h>
 #else
@@ -112,8 +109,6 @@ extern char *xgetcwd (void);
 # define __tfind tfind
 # undef __tsearch
 # define __tsearch tsearch
-# undef internal_function
-# define internal_function /* empty */
 # undef dirent64
 # define dirent64 dirent
 # undef MAX
@@ -225,7 +220,7 @@ static const int ftw_arr[] =
 
 /* Forward declarations of local functions.  */
 static int ftw_dir (struct ftw_data *data, struct STAT *st,
-                   struct dir_data *old_dir) internal_function;
+                   struct dir_data *old_dir);
 
 
 static int
@@ -340,11 +335,11 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
 
       if (dfdp != NULL && *dfdp != -1)
        {
-         int fd = openat64_not_cancel_3 (*dfdp, data->dirbuf + data->ftw.base,
-                                         O_RDONLY | O_DIRECTORY | O_NDELAY);
+         int fd = __openat64_nocancel (*dfdp, data->dirbuf + data->ftw.base,
+                                       O_RDONLY | O_DIRECTORY | O_NDELAY);
          dirp->stream = NULL;
          if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL)
-           close_not_cancel_no_status (fd);
+           __close_nocancel_nostatus (fd);
        }
       else
        {
@@ -366,7 +361,7 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
        result = -1;
       else
        {
-         dirp->streamfd = dirfd (dirp->stream);
+         dirp->streamfd = __dirfd (dirp->stream);
          dirp->content = NULL;
          data->dirstreams[data->actdir] = dirp;
 
@@ -380,7 +375,6 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
 
 
 static int
-internal_function
 process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
               size_t namlen, int d_type)
 {
@@ -480,7 +474,6 @@ process_entry (struct ftw_data *data, struct dir_data *dir, const char *name,
 
 static int
 __attribute ((noinline))
-internal_function
 ftw_dir (struct ftw_data *data, struct STAT *st, struct dir_data *old_dir)
 {
   struct dir_data dir;
@@ -525,7 +518,7 @@ fail:
   /* If necessary, change to this directory.  */
   if (data->flags & FTW_CHDIR)
     {
-      if (__fchdir (dirfd (dir.stream)) < 0)
+      if (__fchdir (__dirfd (dir.stream)) < 0)
        {
          result = -1;
          goto fail;
@@ -543,7 +536,11 @@ fail:
 
   while (dir.stream != NULL && (d = __readdir64 (dir.stream)) != NULL)
     {
-      result = process_entry (data, &dir, d->d_name, NAMLEN (d), d->d_type);
+      int d_type = DT_UNKNOWN;
+#ifdef _DIRENT_HAVE_D_TYPE
+      d_type = d->d_type;
+#endif
+      result = process_entry (data, &dir, d->d_name, NAMLEN (d), d_type);
       if (result != 0)
        break;
     }
@@ -605,7 +602,7 @@ fail:
       /* Change back to the parent directory.  */
       int done = 0;
       if (old_dir->stream != NULL)
-       if (__fchdir (dirfd (old_dir->stream)) == 0)
+       if (__fchdir (__dirfd (old_dir->stream)) == 0)
          done = 1;
 
       if (!done)
@@ -627,7 +624,6 @@ fail:
 
 static int
 __attribute ((noinline))
-internal_function
 ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
             int flags)
 {
@@ -790,6 +786,7 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
     {
       int save_err = errno;
       __fchdir (cwdfd);
+      __close_nocancel_nostatus (cwdfd);
       __set_errno (save_err);
     }
   else if (cwd != NULL)
@@ -815,21 +812,14 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
 /* Entry points.  */
 
 int
-FTW_NAME (path, func, descriptors)
-     const char *path;
-     FTW_FUNC_T func;
-     int descriptors;
+FTW_NAME (const char *path, FTW_FUNC_T func, int descriptors)
 {
   return ftw_startup (path, 0, func, descriptors, 0);
 }
 
 #ifndef _LIBC
 int
-NFTW_NAME (path, func, descriptors, flags)
-     const char *path;
-     NFTW_FUNC_T func;
-     int descriptors;
-     int flags;
+NFTW_NAME (const char *path, NFTW_FUNC_T func, int descriptors, int flags)
 {
   return ftw_startup (path, 1, func, descriptors, flags);
 }
@@ -840,11 +830,7 @@ NFTW_NAME (path, func, descriptors, flags)
 int NFTW_NEW_NAME (const char *, NFTW_FUNC_T, int, int);
 
 int
-NFTW_NEW_NAME (path, func, descriptors, flags)
-     const char *path;
-     NFTW_FUNC_T func;
-     int descriptors;
-     int flags;
+NFTW_NEW_NAME (const char *path, NFTW_FUNC_T func, int descriptors, int flags)
 {
   if (flags
       & ~(FTW_PHYS | FTW_MOUNT | FTW_CHDIR | FTW_DEPTH | FTW_ACTIONRETVAL))
@@ -865,11 +851,7 @@ int NFTW_OLD_NAME (const char *, NFTW_FUNC_T, int, int);
 
 int
 attribute_compat_text_section
-NFTW_OLD_NAME (path, func, descriptors, flags)
-     const char *path;
-     NFTW_FUNC_T func;
-     int descriptors;
-     int flags;
+NFTW_OLD_NAME (const char *path, NFTW_FUNC_T func, int descriptors, int flags)
 {
   flags &= (FTW_PHYS | FTW_MOUNT | FTW_CHDIR | FTW_DEPTH);
   return ftw_startup (path, 1, func, descriptors, flags);