From 97bb157b8249ffc47400f3aa2ab9b53393d55ae3 Mon Sep 17 00:00:00 2001 From: Keith Bostic Date: Wed, 23 May 1990 01:57:50 -0800 Subject: [PATCH] add FTS_XDEV; don't cross mount points SCCS-vsn: lib/libc/gen/fts.c 5.5 SCCS-vsn: lib/libc/gen/fts.3 5.4 --- usr/src/lib/libc/gen/fts.3 | 8 +++++++- usr/src/lib/libc/gen/fts.c | 6 ++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/usr/src/lib/libc/gen/fts.3 b/usr/src/lib/libc/gen/fts.3 index 4015b9fc9f..95434ff574 100644 --- a/usr/src/lib/libc/gen/fts.3 +++ b/usr/src/lib/libc/gen/fts.3 @@ -13,7 +13,7 @@ .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.\" @(#)fts.3 5.3 (Berkeley) %G% +.\" @(#)fts.3 5.4 (Berkeley) %G% .\" .TH FTS 3 "" .UC 7 @@ -142,6 +142,12 @@ This option causes the routine to return structures for the directory entries ``.'' and ``..''. By default they are ignored unless specified as an argument to .IR ftsopen . +.TP +FTS_XDEV +This option keeps +.I fts +from descending into directories that have a different device number +than the file the descent began from. .PP The argument .I compar diff --git a/usr/src/lib/libc/gen/fts.c b/usr/src/lib/libc/gen/fts.c index f97b13129a..a5429c2134 100644 --- a/usr/src/lib/libc/gen/fts.c +++ b/usr/src/lib/libc/gen/fts.c @@ -6,7 +6,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char sccsid[] = "@(#)fts.c 5.4 (Berkeley) %G%"; +static char sccsid[] = "@(#)fts.c 5.5 (Berkeley) %G%"; #endif /* LIBC_SCCS and not lint */ #include @@ -239,7 +239,8 @@ ftsread(sp) } if (p->fts_info == FTS_D) - if (instr == FTS_SKIP) { + 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; @@ -300,6 +301,7 @@ ftsread(sp) } else cd = 1; p->fts_info = fts_stat(p, 0); + sp->sdev = p->fts_statb.st_dev; } else { (void)free((char *)sp->fts_cur); cp = sp->fts_path + NAPPEND(p->fts_parent); -- 2.20.1