Annotation of researchv10no/cmd/odist/pax/include/ftwalk.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * K. P. Vo
                      3:  * AT&T Bell Laboratories
                      4:  *
                      5:  * ftwalk(3) interface definitions
                      6:  */
                      7: 
                      8: #ifndef FTW_DOT
                      9: 
                     10: #ifndef VOID
                     11: #define VOID   char
                     12: #endif
                     13: 
                     14: /*
                     15:  * ftwalk() argument flags
                     16:  */
                     17: 
                     18: #define FTW_CHILDREN   (1<<0)  /* call user function on child dirs too */
                     19: #define FTW_DELAY      (1<<1)  /* do child stat after parent preorder  */
                     20: #define FTW_DOT                (1<<2)  /* don't chdir(2) to subdirectories     */
                     21: #define FTW_MULTIPLE   (1<<3)  /* path arg is 0 terminated char** argv */
                     22: #define FTW_PHYSICAL   (1<<4)  /* physical rather than logical walk    */
                     23: #define FTW_POST       (1<<5)  /* visit descendants before parent      */
                     24: #define FTW_TWICE      (1<<6)  /* visit parent before&after descendants*/
                     25: 
                     26: #define FTW_USER       (1<<10) /* first user flag bit                  */
                     27: 
                     28: struct FTW                     /* user function arg                    */
                     29: {
                     30:        struct FTW*     left;   /* left child in cycle check tree       */
                     31:        struct FTW*     right;  /* right child in cycle check tree      */
                     32:        struct FTW*     link;   /* identical to this elt on search path */
                     33:        struct FTW*     parent; /* parent in current search path        */
                     34:        union
                     35:        {
                     36:        long            number; /* local number                         */
                     37:        char*           pointer;/* local pointer                        */
                     38:        }               local;  /* local user data                      */
                     39:        struct stat     statb;  /* stat buffer of this object           */
                     40:        char*           path;   /* full pathname                        */
                     41:        short           pathlen;/* strlen(path)                         */
                     42:        unsigned short  info;   /* FTW_* type bits                      */
                     43:        unsigned short  status; /* user function entry/return status    */
                     44:        short           level;  /* current tree depth                   */
                     45:        short           namelen;/* strlen(name)                         */
                     46:        char            name[sizeof(int)];      /* file base name       */
                     47: };
                     48: 
                     49: /*
                     50:  * individual struct FTW size 
                     51:  */
                     52: 
                     53: #define FTWSIZE(f)     ((f)->namelen+1+sizeof(struct FTW)-sizeof(int))
                     54: 
                     55: /*
                     56:  * FTW.info type bits
                     57:  */
                     58: 
                     59: #define        FTW_NS          (1<<0)  /* stat failed - unknown                */
                     60: #define        FTW_F           (1<<1)  /* file - not directory or symbolic link*/
                     61: #define FTW_SL         (1<<2)  /* symbolic link                        */
                     62: #define        FTW_D           (1<<3)  /* directory - pre-order visit          */
                     63: 
                     64: #define FTW_C          (1<<4)  /* causes cycle                         */
                     65: #define FTW_NR         (1<<5)  /* cannot read                          */
                     66: #define FTW_NX         (1<<6)  /* cannot search                        */
                     67: #define FTW_P          (1<<7)  /* post-order visit                     */
                     68: 
                     69: #define FTW_DC (FTW_D|FTW_C)   /* directory - would cause cycle        */
                     70: #define        FTW_DNR (FTW_D|FTW_NR)  /* directory - no read permission       */
                     71: #define        FTW_DNX (FTW_D|FTW_NX)  /* directory - no search permission     */
                     72: #define        FTW_DP  (FTW_D|FTW_P)   /* directory - post-order visit         */
                     73: 
                     74: /*
                     75:  * FTW.status entry values
                     76:  */
                     77: 
                     78: #define FTW_NAME       (1<<0)  /* use FTW.name rather than FTW.path    */
                     79: #define FTW_PATH       (1<<1)  /* use FTW.path rather than FTW.name    */
                     80: 
                     81: /*
                     82:  * FTW.status return values
                     83:  */
                     84: 
                     85: #define FTW_AGAIN      (1<<2)  /* process entry again                  */
                     86: #define FTW_FOLLOW     (1<<3)  /* follow FTW_SL symlink                */
                     87: #define FTW_NOPOST     (1<<4)  /* skip post order visit                */
                     88: #define FTW_SKIP       (1<<5)  /* skip FTW_D directory                 */
                     89: #define FTW_STAT       (1<<6)  /* userf did stat                       */
                     90: 
                     91: #if __STDC__ || __cplusplus || c_plusplus
                     92: #if __cplusplus
                     93: extern "C" {
                     94: #endif
                     95: extern int     ftwalk(const char* path, int (*userf)(struct FTW*), int flags, int (*comparf)(struct FTW*, struct FTW*));
                     96: #if __cplusplus
                     97: }
                     98: #endif
                     99: #else
                    100: extern int     ftwalk();
                    101: #endif
                    102: 
                    103: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.