do post-order visit if FTS_SKIP or FTS_XDEV apply to preorder visit
authorKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 24 May 1990 23:50:35 +0000 (15:50 -0800)
committerKeith Bostic <bostic@ucbvax.Berkeley.EDU>
Thu, 24 May 1990 23:50:35 +0000 (15:50 -0800)
SCCS-vsn: lib/libc/gen/fts.c 5.8

usr/src/lib/libc/gen/fts.c

index 2b68c55..3d45fcf 100644 (file)
@@ -6,7 +6,7 @@
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
  */
 
 #if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)fts.c      5.7 (Berkeley) %G%";
+static char sccsid[] = "@(#)fts.c      5.8 (Berkeley) %G%";
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/param.h>
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/param.h>
@@ -256,14 +256,15 @@ ftsread(sp)
 
        /* directory in pre-order */
        if (p->fts_info == FTS_D) {
 
        /* directory in pre-order */
        if (p->fts_info == FTS_D) {
-               /* may have been skipped or crossed mount point */
+               /* if skipped or crossed mount point, do post-order visit */
                if (instr == FTS_SKIP || sp->fts_options & FTS_XDEV &&
                    p->fts_statb.st_dev != sp->sdev) {
                        if (sp->fts_child) {
                                fts_lfree(sp->fts_child);
                                sp->fts_child = NULL;
                        }
                if (instr == FTS_SKIP || sp->fts_options & FTS_XDEV &&
                    p->fts_statb.st_dev != sp->sdev) {
                        if (sp->fts_child) {
                                fts_lfree(sp->fts_child);
                                sp->fts_child = NULL;
                        }
-                       goto next;
+                       p->fts_info = FTS_DP;
+                       return(p);
                } 
 
                /* read the directory if necessary, and return first entry */
                } 
 
                /* read the directory if necessary, and return first entry */