ftwalk.c revision 3e14f97f673e8a630f076077de35afdd43dc1587
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * ftwalk on top of fts
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * why does fts take FTSENT** instead of FTSENT*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * the real thing -- well it used to be
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinftwalk(const char* path, int (*userf)(Ftw_t*), int flags, int (*comparf)(Ftw_t*, Ftw_t*))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register FTS* f;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register FTSENT* e;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int children;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register int rv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(f = fts_open((char* const*)path, flags, comparf ? ftscompare : 0)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!path || !(flags & FTS_ONEPATH) && !(path = (const char*)(*((char**)path))))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return -1;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin e->fts_accpath = e->fts_name = e->fts_path = strcpy((char*)(e + 1), path);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (x = e; x; x = x->link)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (nd > 0)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (x = e; x; x = x->link)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ns = e->status = e->path == e->fts_accpath ? FTW_PATH : FTW_NAME;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin switch (e->info)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (nd > 0)