1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
30 static int nftw_flags
;
31 static int (*nftw_userf
)(const char*, const struct stat
*, int, struct FTW
*);
36 register int n
= ftw
->info
;
40 if (n
& (FTW_C
|FTW_NX
))
42 else if ((n
& FTW_SL
) && (!(nftw_flags
& FTW_PHYSICAL
) || stat(ftw
->path
, &st
)))
44 nftw
.base
= ftw
->pathlen
- ftw
->namelen
;
45 nftw
.level
= ftw
->level
;
47 n
= (*nftw_userf
)(ftw
->path
, &ftw
->statb
, n
, &nftw
);
48 ftw
->status
= nftw
.quit
;
53 nftw(const char* path
, int(*userf
)(const char*, const struct stat
*, int, struct FTW
*), int depth
, int flags
)
57 if (flags
& FTW_CHDIR
) flags
&= ~FTW_DOT
;
58 else flags
|= FTW_DOT
;
60 return ftwalk(path
, nftw_user
, flags
, NiL
);