1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2011 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Eclipse Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.eclipse.org/org/documents/epl-v10.html * 11 * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #pragma prototyped 23 /* 24 * posix glob interface definitions with gnu extensions 25 */ 26 27 #ifndef _GLOB_H 28 #define _GLOB_H 29 30 #define GLOB_VERSION 20060717L 31 32 #include <stdlib.h> 33 34 struct dirent; 35 struct stat; 36 37 struct _glob_; 38 struct _globlist_; 39 40 typedef struct _glob_ glob_t; 41 typedef struct _globlist_ globlist_t; 42 43 struct _globlist_ 44 { 45 globlist_t* gl_next; 46 char* gl_begin; 47 unsigned char gl_flags; 48 char gl_path[1]; 49 }; 50 51 struct _glob_ 52 { 53 size_t gl_pathc; 54 char** gl_pathv; 55 size_t gl_offs; 56 globlist_t* gl_list; 57 int gl_flags; 58 59 /* GLOB_DISC data -- memset(&gl,0,sizeof(gl)) before using! */ 60 61 const char* gl_fignore; 62 const char* gl_suffix; 63 unsigned char* gl_intr; 64 65 int gl_delim; 66 67 void* gl_handle; 68 void* (*gl_diropen)(glob_t*, const char*); 69 char* (*gl_dirnext)(glob_t*, void*); 70 void (*gl_dirclose)(glob_t*, void*); 71 int (*gl_type)(glob_t*, const char*, int); 72 int (*gl_attr)(glob_t*, const char*, int); 73 74 /* gnu extensions -- but how do you synthesize dirent and stat? */ 75 76 void* (*gl_opendir)(const char*); 77 struct dirent* (*gl_readdir)(void*); 78 void (*gl_closedir)(void*); 79 int (*gl_stat)(const char*, struct stat*); 80 int (*gl_lstat)(const char*, struct stat*); 81 82 /* ast additions */ 83 84 char* (*gl_nextdir)(glob_t*, char*); 85 unsigned long gl_status; 86 unsigned long gl_version; 87 unsigned short gl_extra; 88 89 #ifdef _GLOB_PRIVATE_ 90 _GLOB_PRIVATE_ 91 #else 92 char* gl_pad[23]; 93 #endif 94 95 }; 96 97 /* standard interface */ 98 #define GLOB_APPEND 0x0001 /* append to previous */ 99 #define GLOB_DOOFFS 0x0002 /* gl_offs defines argv offset */ 100 #define GLOB_ERR 0x0004 /* abort on error */ 101 #define GLOB_MARK 0x0008 /* append / to directories */ 102 #define GLOB_NOCHECK 0x0010 /* nomatch is original pattern */ 103 #define GLOB_NOESCAPE 0x0020 /* don't treat \ specially */ 104 #define GLOB_NOSORT 0x0040 /* don't sort the list */ 105 106 /* extended interface */ 107 #define GLOB_STARSTAR 0x0080 /* enable [/]**[/] expansion */ 108 #define GLOB_BRACE 0x0100 /* enable {...} expansion */ 109 #define GLOB_ICASE 0x0200 /* ignore case on match */ 110 #define GLOB_COMPLETE 0x0400 /* shell file completeion */ 111 #define GLOB_AUGMENTED 0x0800 /* augmented shell patterns */ 112 #define GLOB_STACK 0x1000 /* allocate on current stack */ 113 #define GLOB_LIST 0x2000 /* just create gl_list */ 114 #define GLOB_ALTDIRFUNC 0x4000 /* gnu discipline functions */ 115 #define GLOB_DISC 0x8000 /* discipline initialized */ 116 117 #define GLOB_GROUP 0x10000 /* REG_SHELL_GROUP */ 118 119 /* gl_status */ 120 #define GLOB_NOTDIR 0x0001 /* last gl_dirnext() not a dir */ 121 122 /* gl_type return */ 123 #define GLOB_NOTFOUND 0 /* does not exist */ 124 #define GLOB_DEV 1 /* exists but not DIR EXE REG */ 125 #define GLOB_DIR 2 /* directory */ 126 #define GLOB_EXE 3 /* executable regular file */ 127 #define GLOB_REG 4 /* regular file */ 128 129 /* error return values */ 130 #define GLOB_ABORTED 1 131 #define GLOB_NOMATCH 2 132 #define GLOB_NOSPACE 3 133 #define GLOB_INTR 4 134 #define GLOB_APPERR 5 135 #define GLOB_NOSYS 6 136 137 #if _BLD_ast && defined(__EXPORT__) 138 #define extern __EXPORT__ 139 #endif 140 141 extern int glob(const char*, int, int(*)(const char*,int), glob_t*); 142 extern void globfree(glob_t*); 143 144 #undef extern 145 146 #endif /* _GLOB_H */ 147