Update.
[kopensolaris-gnu/glibc.git] / io / fts.c
index 75bba1f..0172af7 100644 (file)
--- a/io/fts.c
+++ b/io/fts.c
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
@@ -74,7 +70,7 @@ static u_short         fts_stat __P((FTS *, struct dirent *, FTSENT *, int))
                           _a > _b ? _a : _b; })
 #endif
 
-#define        ISDOT(a)        (a[0] == '.' && (!a[1] || a[1] == '.' && !a[2]))
+#define        ISDOT(a)        (a[0] == '.' && (!a[1] || (a[1] == '.' && !a[2])))
 
 #define        ISSET(opt)      (sp->fts_options & opt)
 #define        SET(opt)        (sp->fts_options |= opt)
@@ -231,6 +227,7 @@ fts_close(sp)
 {
        register FTSENT *freep, *p;
        int saved_errno;
+       int retval = 0;
 
        /*
         * This still works if we haven't read anything -- the dummy structure
@@ -259,15 +256,16 @@ fts_close(sp)
                (void)__close(sp->fts_rfd);
        }
 
-       /* Free up the stream pointer. */
-       free(sp);
-
        /* Set errno and return. */
        if (!ISSET(FTS_NOCHDIR) && saved_errno) {
                __set_errno (saved_errno);
-               return (-1);
+               retval = -1;
        }
-       return (0);
+
+       /* Free up the stream pointer. */
+       free (sp);
+
+       return retval;
 }
 
 /*
@@ -313,12 +311,13 @@ fts_read(sp)
        if (instr == FTS_FOLLOW &&
            (p->fts_info == FTS_SL || p->fts_info == FTS_SLNONE)) {
                p->fts_info = fts_stat(sp, NULL, p, 1);
-               if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR))
+               if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) {
                        if ((p->fts_symfd = __open(".", O_RDONLY, 0)) < 0) {
                                p->fts_errno = errno;
                                p->fts_info = FTS_ERR;
                        } else
                                p->fts_flags |= FTS_SYMFOLLOW;
+               }
                return (p);
        }
 
@@ -326,7 +325,7 @@ fts_read(sp)
        if (p->fts_info == FTS_D) {
                /* If skipped or crossed mount point, do post-order visit. */
                if (instr == FTS_SKIP ||
-                   ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev) {
+                   (ISSET(FTS_XDEV) && p->fts_dev != sp->fts_dev)) {
                        if (p->fts_flags & FTS_SYMFOLLOW)
                                (void)__close(p->fts_symfd);
                        if (sp->fts_child) {
@@ -376,7 +375,7 @@ fts_read(sp)
 
        /* Move to the next node on this level. */
 next:  tmp = p;
-       if (p = p->fts_link) {
+       if ((p = p->fts_link)) {
                free(tmp);
 
                /*
@@ -401,13 +400,14 @@ next:     tmp = p;
                        goto next;
                if (p->fts_instr == FTS_FOLLOW) {
                        p->fts_info = fts_stat(sp, NULL, p, 1);
-                       if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR))
+                       if (p->fts_info == FTS_D && !ISSET(FTS_NOCHDIR)) {
                                if ((p->fts_symfd =
                                    __open(".", O_RDONLY, 0)) < 0) {
                                        p->fts_errno = errno;
                                        p->fts_info = FTS_ERR;
                                } else
                                        p->fts_flags |= FTS_SYMFOLLOW;
+                       }
                        p->fts_instr = FTS_NOINSTR;
                }
 
@@ -641,7 +641,7 @@ fts_build(sp, type)
         * checking FTS_NS on the returned nodes.
         */
        cderrno = 0;
-       if (nlinks || type == BREAD)
+       if (nlinks || type == BREAD) {
                if (FCHDIR(sp, dirfd(dirp))) {
                        if (nlinks && type == BREAD)
                                cur->fts_errno = errno;
@@ -650,7 +650,7 @@ fts_build(sp, type)
                        cderrno = errno;
                } else
                        descend = 1;
-       else
+       else
                descend = 0;
 
        /*
@@ -674,7 +674,9 @@ fts_build(sp, type)
 
        /* Read the directory, attaching each entry to the `link' pointer. */
        adjaddr = NULL;
-       for (head = tail = NULL, nitems = 0; dp = __readdir(dirp);) {
+       head = tail = NULL;
+       nitems = 0;
+       while((dp = __readdir(dirp))) {
                int namlen;
 
                if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name))
@@ -717,8 +719,8 @@ mem1:                               saved_errno = errno;
                        p->fts_accpath = cur->fts_accpath;
                } else if (nlinks == 0
 #if defined DT_DIR && defined _DIRENT_HAVE_D_TYPE
-                   || nlinks > 0 &&
-                   dp->d_type != DT_DIR && dp->d_type != DT_UNKNOWN
+                   || (nlinks > 0 &&
+                       dp->d_type != DT_DIR && dp->d_type != DT_UNKNOWN)
 #endif
                    ) {
                        p->fts_accpath =
@@ -814,7 +816,7 @@ fts_stat(sp, dp, p, follow)
        /* If user needs stat info, stat buffer already allocated. */
        sbp = ISSET(FTS_NOSTAT) ? &sb : p->fts_statp;
 
-#ifdef DT_WHT
+#if defined DT_WHT && defined S_IFWHT
        /*
         * Whited-out files don't really exist.  However, there's stat(2) file
         * mask for them, so we set it so that programs (i.e., find) don't have
@@ -964,7 +966,7 @@ fts_lfree(head)
        register FTSENT *p;
 
        /* Free a linked list of structures. */
-       while (p = head) {
+       while ((p = head)) {
                head = head->fts_link;
                free(p);
        }