(validate_uparams): Fix typo
[gnulib.git] / lib / fts.c
index ed09697..8666cff 100644 (file)
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -241,9 +241,11 @@ fts_open (char * const *argv,
 #ifndef MAXPATHLEN
 # define MAXPATHLEN 1024
 #endif
-       size_t maxarglen = fts_maxarglen(argv);
-       if (! fts_palloc(sp, MAX(maxarglen, MAXPATHLEN)))
-               goto mem1;
+       {
+         size_t maxarglen = fts_maxarglen(argv);
+         if (! fts_palloc(sp, MAX(maxarglen, MAXPATHLEN)))
+                 goto mem1;
+       }
 
        /* Allocate/initialize root's parent. */
        if ((parent = fts_alloc(sp, "", 0)) == NULL)
@@ -522,6 +524,7 @@ next:       tmp = p;
                if (p->fts_level == FTS_ROOTLEVEL) {
                        if (FCHDIR(sp, sp->fts_rfd)) {
                                SET(FTS_STOP);
+                               sp->fts_cur = p;
                                return (NULL);
                        }
                        fts_load(sp, p);
@@ -692,7 +695,9 @@ fts_children (register FTS *sp, int instr)
                return (sp->fts_child = NULL);
        sp->fts_child = fts_build(sp, instr);
        if (fchdir(fd)) {
+               int saved_errno = errno;
                (void)close(fd);
+               __set_errno (saved_errno);
                return (NULL);
        }
        (void)close(fd);
@@ -1065,7 +1070,8 @@ fts_stat(FTS *sp, register FTSENT *p, bool follow)
        if (ISSET(FTS_LOGICAL) || follow) {
                if (stat(p->fts_accpath, sbp)) {
                        saved_errno = errno;
-                       if (!lstat(p->fts_accpath, sbp)) {
+                       if (errno == ENOENT
+                           && lstat(p->fts_accpath, sbp) == 0) {
                                __set_errno (0);
                                return (FTS_SLNONE);
                        }