/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1985-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* David Korn <[email protected]> *18* Phong Vo <[email protected]> *19* *20***********************************************************************/21#pragma prototyped22/*23* Glenn Fowler24* David Korn25* Phong Vo26* AT&T Research27*28* fts interface definitions29*/3031#ifndef _FTS_H32#define _FTS_H3334#include <ast_std.h>35#include <ast_fs.h>36#include <ast_mode.h>3738/*39* fts_open flags40*/4142#define FTS_LOGICAL 0 /* logical traversal, follow symlinks */43#define FTS_META (1<<0) /* follow top dir symlinks even if phys */44#define FTS_NOCHDIR (1<<1) /* don't chdir */45#define FTS_NOPOSTORDER (1<<2) /* no postorder visits */46#define FTS_NOPREORDER (1<<3) /* no preorder visits */47#define FTS_NOSEEDOTDIR (1<<11) /* never retain leading . dir */48#define FTS_NOSTAT (1<<4) /* don't stat children */49#define FTS_ONEPATH (1<<5) /* pathnames arg is one const char* */50#define FTS_PHYSICAL (1<<6) /* physical traversal, don't follow */51#define FTS_SEEDOT (1<<7) /* return . and .. */52#define FTS_SEEDOTDIR (1<<10) /* always retain leading . dir */53#define FTS_TOP (1<<8) /* don't traverse subdirectories */54#define FTS_XDEV (1<<9) /* don't cross mount points */5556#define FTS_USER (1<<12) /* first user flag bit */5758#define FTS_COMFOLLOW FTS_META5960/*61* fts_info flags62*/6364#define FTS_DEFAULT 0 /* ok, someone must have wanted this */6566#define FTS_NS (1<<0) /* stat failed */67#define FTS_F (1<<1) /* file - not directory or symbolic link*/68#define FTS_SL (1<<2) /* symbolic link */69#define FTS_D (1<<3) /* directory - pre-order visit */7071#define FTS_C (1<<4) /* causes cycle */72#define FTS_ERR (1<<5) /* some other error */73#define FTS_DD (1<<6) /* . or .. */74#define FTS_NR (1<<7) /* cannot read */75#define FTS_NX (1<<8) /* cannot search */76#define FTS_OK (1<<9) /* no info but otherwise ok */77#define FTS_P (1<<10) /* post-order visit */7879#define FTS_DC (FTS_D|FTS_C) /* dir - would cause cycle */80#define FTS_DNR (FTS_D|FTS_NR) /* dir - no read permission */81#define FTS_DNX (FTS_D|FTS_NX) /* dir - no search permission */82#define FTS_DOT (FTS_D|FTS_DD) /* . or .. */83#define FTS_DP (FTS_D|FTS_P) /* dir - post-order visit */84#define FTS_NSOK (FTS_NS|FTS_OK) /* no stat (because you asked) */85#define FTS_SLNONE (FTS_SL|FTS_NS) /* symlink - to nowhere */8687/*88* fts_set flags89*/9091#define FTS_AGAIN FTS_TOP /* process entry again */92#define FTS_FOLLOW FTS_META /* follow FTS_SL symlink */93#define FTS_SKIP FTS_NOSTAT /* skip FTS_D directory */94#define FTS_STAT FTS_PHYSICAL /* stat() done by user */9596typedef struct Fts FTS;97typedef struct Ftsent FTSENT;9899struct Ftsent100{101char* fts_accpath; /* path relative to . */102char* fts_name; /* file name */103char* fts_path; /* path relative to top dir */104FTSENT* fts_cycle; /* offender if cycle */105FTSENT* fts_link; /* next child */106FTSENT* fts_parent; /* parent directory */107struct stat* fts_statp; /* stat info */108#ifdef _FTSENT_LOCAL_PRIVATE_109_FTSENT_LOCAL_PRIVATE_110#else111void* fts_pointer; /* local pointer value */112#endif113long fts_number; /* local numeric value */114int fts_errno; /* errno for this entry */115unsigned short fts_info; /* info flags */116117unsigned short _fts_namelen; /* old fts_namelen */118unsigned short _fts_pathlen; /* old fts_pathlen */119short _fts_level; /* old fts_level */120121short _fts_status; /* <ftwalk.h> compatibility */122struct stat _fts_statb; /* <ftwalk.h> compatibility */123124FTS* fts; /* fts_open() handle */125size_t fts_namelen; /* strlen(fts_name) */126size_t fts_pathlen; /* strlen(fts_path) */127ssize_t fts_level; /* file tree depth, 0 at top */128129#ifdef _FTSENT_PRIVATE_130_FTSENT_PRIVATE_131#endif132133};134135struct Fts136{137int fts_errno; /* last errno */138void* fts_handle; /* user defined handle */139140#ifdef _FTS_PRIVATE_141_FTS_PRIVATE_142#endif143144};145146#if _BLD_ast && defined(__EXPORT__)147#define extern __EXPORT__148#endif149150extern FTSENT* fts_children(FTS*, int);151extern int fts_close(FTS*);152extern int fts_flags(void);153extern int fts_local(FTSENT*);154extern int fts_notify(int(*)(FTS*, FTSENT*, void*), void*);155extern FTS* fts_open(char* const*, int, int(*)(FTSENT* const*, FTSENT* const*));156extern FTSENT* fts_read(FTS*);157extern int fts_set(FTS*, FTSENT*, int);158159#undef extern160161#endif162163164