14887Schin 24887Schin /* : : generated by proto : : */ 34887Schin /*********************************************************************** 44887Schin * * 54887Schin * This software is part of the ast package * 6*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property * 74887Schin * and is licensed under the * 84887Schin * Common Public License, Version 1.0 * 98462SApril.Chin@Sun.COM * by AT&T Intellectual Property * 104887Schin * * 114887Schin * A copy of the License is available at * 124887Schin * http://www.opensource.org/licenses/cpl1.0.txt * 134887Schin * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 144887Schin * * 154887Schin * Information and Software Systems Research * 164887Schin * AT&T Research * 174887Schin * Florham Park NJ * 184887Schin * * 194887Schin * Glenn Fowler <gsf@research.att.com> * 204887Schin * David Korn <dgk@research.att.com> * 214887Schin * Phong Vo <kpv@research.att.com> * 224887Schin * * 234887Schin ***********************************************************************/ 244887Schin 254887Schin /* 264887Schin * Advanced Software Technology Library 274887Schin * AT&T Research 284887Schin * 294887Schin * std + posix + ast 304887Schin */ 314887Schin 324887Schin #ifndef _AST_H 334887Schin #if !defined(__PROTO__) 344887Schin #include <prototyped.h> 354887Schin #endif 364887Schin #if !defined(__LINKAGE__) 374887Schin #define __LINKAGE__ /* 2004-08-11 transition */ 384887Schin #endif 394887Schin 404887Schin #define _AST_H 414887Schin 424887Schin #include <ast_version.h> 434887Schin 444887Schin #ifndef _AST_STD_H 454887Schin #include <ast_std.h> 464887Schin #endif 474887Schin 484887Schin #ifndef _SFIO_H 494887Schin #include <sfio.h> 504887Schin #endif 514887Schin 524887Schin #ifndef ast 534887Schin #define ast _ast_info 544887Schin #endif 554887Schin 564887Schin #ifndef PATH_MAX 574887Schin #define PATH_MAX 1024 584887Schin #endif 594887Schin 604887Schin /* 614887Schin * workaround botched headers that assume <stdio.h> 624887Schin */ 634887Schin 644887Schin #ifndef FILE 654887Schin #ifndef _SFIO_H 664887Schin struct _sfio_s; 674887Schin #endif 684887Schin #define FILE struct _sfio_s 694887Schin #ifndef __FILE_typedef 704887Schin #define __FILE_typedef 1 714887Schin #endif 724887Schin #ifndef _FILEDEFED 734887Schin #define _FILEDEFED 1 744887Schin #endif 754887Schin #endif 764887Schin 774887Schin /* 784887Schin * exit() support -- this matches shell exit codes 794887Schin */ 804887Schin 814887Schin #define EXIT_BITS 8 /* # exit status bits */ 824887Schin 834887Schin #define EXIT_USAGE 2 /* usage exit code */ 844887Schin #define EXIT_QUIT ((1<<(EXIT_BITS))-1) /* parent should quit */ 854887Schin #define EXIT_NOTFOUND ((1<<(EXIT_BITS-1))-1) /* command not found */ 864887Schin #define EXIT_NOEXEC ((1<<(EXIT_BITS-1))-2) /* other exec error */ 874887Schin 884887Schin #define EXIT_CODE(x) ((x)&((1<<EXIT_BITS)-1)) 894887Schin #define EXIT_CORE(x) (EXIT_CODE(x)|(1<<EXIT_BITS)|(1<<(EXIT_BITS-1))) 904887Schin #define EXIT_TERM(x) (EXIT_CODE(x)|(1<<EXIT_BITS)) 914887Schin 924887Schin /* 934887Schin * NOTE: for compatibility the following work for EXIT_BITS={7,8} 944887Schin */ 954887Schin 964887Schin #define EXIT_STATUS(x) (((x)&((1<<(EXIT_BITS-2))-1))?(x):EXIT_CODE((x)>>EXIT_BITS)) 974887Schin 984887Schin #define EXITED_CORE(x) (((x)&((1<<EXIT_BITS)|(1<<(EXIT_BITS-1))))==((1<<EXIT_BITS)|(1<<(EXIT_BITS-1)))||((x)&((1<<(EXIT_BITS-1))|(1<<(EXIT_BITS-2))))==((1<<(EXIT_BITS-1))|(1<<(EXIT_BITS-2)))) 994887Schin #define EXITED_TERM(x) ((x)&((1<<EXIT_BITS)|(1<<(EXIT_BITS-1)))) 1004887Schin 1014887Schin /* 1024887Schin * astconflist() flags 1034887Schin */ 1044887Schin 1054887Schin #define ASTCONF_parse 0x0001 1064887Schin #define ASTCONF_write 0x0002 1074887Schin #define ASTCONF_read 0x0004 1084887Schin #define ASTCONF_lower 0x0008 1094887Schin #define ASTCONF_base 0x0010 1104887Schin #define ASTCONF_defined 0x0020 1114887Schin #define ASTCONF_quote 0x0040 1124887Schin #define ASTCONF_table 0x0080 1134887Schin #define ASTCONF_matchcall 0x0100 1144887Schin #define ASTCONF_matchname 0x0200 1154887Schin #define ASTCONF_matchstandard 0x0400 1164887Schin #define ASTCONF_error 0x0800 1174887Schin #define ASTCONF_system 0x1000 1184887Schin #define ASTCONF_AST 0x2000 1194887Schin 1204887Schin /* 1214887Schin * pathcanon() flags 1224887Schin */ 1234887Schin 1244887Schin #define PATH_PHYSICAL 01 1254887Schin #define PATH_DOTDOT 02 1264887Schin #define PATH_EXISTS 04 1274887Schin #define PATH_VERIFIED(n) (((n)&01777)<<5) 1284887Schin 1294887Schin /* 1304887Schin * pathaccess() flags 1314887Schin */ 1324887Schin 1334887Schin #define PATH_READ 004 1344887Schin #define PATH_WRITE 002 1354887Schin #define PATH_EXECUTE 001 1364887Schin #define PATH_REGULAR 010 1374887Schin #define PATH_ABSOLUTE 020 1384887Schin 1394887Schin /* 1404887Schin * touch() flags 1414887Schin */ 1424887Schin 1434887Schin #define PATH_TOUCH_CREATE 01 1444887Schin #define PATH_TOUCH_VERBATIM 02 1454887Schin 1464887Schin /* 1474887Schin * pathcheck() info 1484887Schin */ 1494887Schin 1504887Schin typedef struct 1514887Schin { 1524887Schin unsigned long date; 1534887Schin char* feature; 1544887Schin char* host; 1554887Schin char* user; 1564887Schin } Pathcheck_t; 1574887Schin 1584887Schin /* 1594887Schin * strgrpmatch() flags 1604887Schin */ 1614887Schin 1624887Schin #define STR_MAXIMAL 01 /* maximal match */ 1634887Schin #define STR_LEFT 02 /* implicit left anchor */ 1644887Schin #define STR_RIGHT 04 /* implicit right anchor */ 1654887Schin #define STR_ICASE 010 /* ignore case */ 1664887Schin #define STR_GROUP 020 /* (|&) inside [@|&](...) only */ 1674887Schin 1684887Schin /* 1694887Schin * fmtquote() flags 1704887Schin */ 1714887Schin 1724887Schin #define FMT_ALWAYS 0x01 /* always quote */ 1734887Schin #define FMT_ESCAPED 0x02 /* already escaped */ 1744887Schin #define FMT_SHELL 0x04 /* escape $ ` too */ 1754887Schin #define FMT_WIDE 0x08 /* don't escape 8 bit chars */ 1764887Schin #define FMT_PARAM 0x10 /* disable FMT_SHELL ${$( quote */ 1774887Schin 1784887Schin /* 1794887Schin * multibyte macros 1804887Schin */ 1814887Schin 1824887Schin #define mbmax() (ast.mb_cur_max) 1834887Schin #define mberr() (ast.tmp_int<0) 1844887Schin 1854887Schin #define mbcoll() (ast.mb_xfrm!=0) 1864887Schin #define mbwide() (mbmax()>1) 1874887Schin 18810898Sroland.mainz@nrubsig.org #define mbchar(p) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) 1894887Schin #define mbinit() (mbwide()?(*ast.mb_towc)((wchar_t*)0,(char*)0,mbmax()):0) 1904887Schin #define mbsize(p) (mbwide()?(*ast.mb_len)((char*)(p),mbmax()):((p),1)) 1914887Schin #define mbconv(s,w) (ast.mb_conv?(*ast.mb_conv)(s,w):((*(s)=(w)),1)) 1924887Schin #define mbwidth(w) (ast.mb_width&&((ast.tmp_int=(*ast.mb_width)(w))>=0||(w)>UCHAR_MAX)?ast.tmp_int:1) 1934887Schin #define mbxfrm(t,f,n) (mbcoll()?(*ast.mb_xfrm)((char*)(t),(char*)(f),n):0) 1944887Schin 1954887Schin /* 1964887Schin * common macros 1974887Schin */ 1984887Schin 1994887Schin #define elementsof(x) (sizeof(x)/sizeof(x[0])) 2004887Schin #define integralof(x) (((char*)(x))-((char*)0)) 2014887Schin #define newof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)calloc(1,sizeof(t)*(n)+(x))) 2024887Schin #define oldof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)malloc(sizeof(t)*(n)+(x))) 2034887Schin #define pointerof(x) ((__V_*)((char*)0+(x))) 2044887Schin #define roundof(x,y) (((x)+(y)-1)&~((y)-1)) 2054887Schin #define ssizeof(x) ((int)sizeof(x)) 2064887Schin 2074887Schin #define streq(a,b) (*(a)==*(b)&&!strcmp(a,b)) 2084887Schin #define strneq(a,b,n) (*(a)==*(b)&&!strncmp(a,b,n)) 2094887Schin #define strsignal(s) fmtsignal(s) 2104887Schin 2114887Schin #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) 2124887Schin #define NiL 0 2134887Schin #define NoP(x) (void)(x) 2144887Schin #else 2154887Schin #define NiL ((char*)0) 2164887Schin #define NoP(x) (&x,1) 2174887Schin #endif 2184887Schin 2194887Schin #if !defined(NoF) 2204887Schin #if defined(__STDC__) || defined(__STDPP__) 2214887Schin #define NoF(x) void _DATA_ ## x () {} 2224887Schin #else 2234887Schin #define NoF(x) void _DATA_/**/x () {} 2244887Schin #endif 2254887Schin #if !defined(_DATA_) 2264887Schin #define _DATA_ 2274887Schin #endif 2284887Schin #endif 2294887Schin 2304887Schin #if !defined(NoN) 2314887Schin #if defined(__STDC__) || defined(__STDPP__) 2324887Schin #define NoN(x) void _STUB_ ## x () {} 2334887Schin #else 2344887Schin #define NoN(x) void _STUB_/**/x () {} 2354887Schin #endif 2364887Schin #if !defined(_STUB_) 2374887Schin #define _STUB_ 2384887Schin #endif 2394887Schin #endif 2404887Schin 2414887Schin #define NOT_USED(x) NoP(x) 2424887Schin 2434887Schin typedef int (*Error_f) __PROTO__((__V_*, __V_*, int, ...)); 2444887Schin 2454887Schin typedef int (*Ast_confdisc_f) __PROTO__((const char*, const char*, const char*)); 2464887Schin typedef int (*Strcmp_context_f) __PROTO__((const char*, const char*, __V_*)); 2474887Schin typedef int (*Strcmp_f) __PROTO__((const char*, const char*)); 2484887Schin 2494887Schin #if _BLD_ast && defined(__EXPORT__) 2504887Schin #undef __MANGLE__ 2514887Schin #define __MANGLE__ __LINKAGE__ __EXPORT__ 2524887Schin #endif 2534887Schin 2544887Schin extern __MANGLE__ char* astgetconf __PROTO__((const char*, const char*, const char*, int, Error_f)); 2554887Schin extern __MANGLE__ char* astconf __PROTO__((const char*, const char*, const char*)); 2564887Schin extern __MANGLE__ Ast_confdisc_f astconfdisc __PROTO__((Ast_confdisc_f)); 2574887Schin extern __MANGLE__ void astconflist __PROTO__((Sfio_t*, const char*, int, const char*)); 2584887Schin extern __MANGLE__ off_t astcopy __PROTO__((int, int, off_t)); 2594887Schin extern __MANGLE__ int astlicense __PROTO__((char*, int, char*, char*, int, int, int)); 2604887Schin extern __MANGLE__ int astquery __PROTO__((int, const char*, ...)); 2614887Schin extern __MANGLE__ void astwinsize __PROTO__((int, int*, int*)); 2624887Schin 2634887Schin extern __MANGLE__ ssize_t base64encode __PROTO__((const __V_*, size_t, __V_**, __V_*, size_t, __V_**)); 2644887Schin extern __MANGLE__ ssize_t base64decode __PROTO__((const __V_*, size_t, __V_**, __V_*, size_t, __V_**)); 2654887Schin extern __MANGLE__ int chresc __PROTO__((const char*, char**)); 2664887Schin extern __MANGLE__ int chrtoi __PROTO__((const char*)); 2674887Schin extern __MANGLE__ int eaccess __PROTO__((const char*, int)); 2684887Schin extern __MANGLE__ char* fmtbase __PROTO__((long, int, int)); 2694887Schin extern __MANGLE__ char* fmtbasell __PROTO__((intmax_t, int, int)); 2704887Schin #define fmtbase(a,b,c) fmtbasell((intmax_t)(a),b,c) /* until 2003-09-01 */ 2714887Schin extern __MANGLE__ char* fmtbuf __PROTO__((size_t)); 2724887Schin extern __MANGLE__ char* fmtclock __PROTO__((Sfulong_t)); 2734887Schin extern __MANGLE__ char* fmtelapsed __PROTO__((unsigned long, int)); 2744887Schin extern __MANGLE__ char* fmterror __PROTO__((int)); 2754887Schin extern __MANGLE__ char* fmtesc __PROTO__((const char*)); 2764887Schin extern __MANGLE__ char* fmtesq __PROTO__((const char*, const char*)); 2774887Schin extern __MANGLE__ char* fmtident __PROTO__((const char*)); 2784887Schin extern __MANGLE__ char* fmtip4 __PROTO__((uint32_t, int)); 2794887Schin extern __MANGLE__ char* fmtfmt __PROTO__((const char*)); 2804887Schin extern __MANGLE__ char* fmtgid __PROTO__((int)); 2814887Schin extern __MANGLE__ char* fmtmatch __PROTO__((const char*)); 2824887Schin extern __MANGLE__ char* fmtmode __PROTO__((int, int)); 2834887Schin extern __MANGLE__ char* fmtnesq __PROTO__((const char*, const char*, size_t)); 2844887Schin extern __MANGLE__ char* fmtnum __PROTO__((unsigned long, int)); 2854887Schin extern __MANGLE__ char* fmtperm __PROTO__((int)); 2864887Schin extern __MANGLE__ char* fmtquote __PROTO__((const char*, const char*, const char*, size_t, int)); 2874887Schin extern __MANGLE__ char* fmtre __PROTO__((const char*)); 2884887Schin extern __MANGLE__ char* fmtscale __PROTO__((Sfulong_t, int)); 2894887Schin extern __MANGLE__ char* fmtsignal __PROTO__((int)); 2904887Schin extern __MANGLE__ char* fmttime __PROTO__((const char*, time_t)); 2914887Schin extern __MANGLE__ char* fmtuid __PROTO__((int)); 2924887Schin extern __MANGLE__ char* fmtversion __PROTO__((unsigned long)); 2934887Schin extern __MANGLE__ __V_* memdup __PROTO__((const __V_*, size_t)); 2944887Schin extern __MANGLE__ void memfatal __PROTO__((void)); 2954887Schin extern __MANGLE__ unsigned int memhash __PROTO__((const __V_*, int)); 2964887Schin extern __MANGLE__ unsigned long memsum __PROTO__((const __V_*, int, unsigned long)); 2974887Schin extern __MANGLE__ char* pathaccess __PROTO__((char*, const char*, const char*, const char*, int)); 2984887Schin extern __MANGLE__ char* pathbin __PROTO__((void)); 2994887Schin extern __MANGLE__ char* pathcanon __PROTO__((char*, int)); 3004887Schin extern __MANGLE__ char* pathcat __PROTO__((char*, const char*, int, const char*, const char*)); 3014887Schin extern __MANGLE__ int pathcd __PROTO__((const char*, const char*)); 3024887Schin extern __MANGLE__ int pathcheck __PROTO__((const char*, const char*, Pathcheck_t*)); 3034887Schin extern __MANGLE__ int pathexists __PROTO__((char*, int)); 3044887Schin extern __MANGLE__ char* pathfind __PROTO__((const char*, const char*, const char*, char*, size_t)); 3054887Schin extern __MANGLE__ int pathgetlink __PROTO__((const char*, char*, int)); 3064887Schin extern __MANGLE__ int pathinclude __PROTO__((const char*)); 3074887Schin extern __MANGLE__ char* pathkey __PROTO__((char*, char*, const char*, const char*, const char*)); 3084887Schin extern __MANGLE__ size_t pathnative __PROTO__((const char*, char*, size_t)); 3094887Schin extern __MANGLE__ char* pathpath __PROTO__((char*, const char*, const char*, int)); 3104887Schin extern __MANGLE__ size_t pathposix __PROTO__((const char*, char*, size_t)); 3114887Schin extern __MANGLE__ char* pathprobe __PROTO__((char*, char*, const char*, const char*, const char*, int)); 31210898Sroland.mainz@nrubsig.org extern __MANGLE__ size_t pathprog __PROTO__((const char*, char*, size_t)); 3134887Schin extern __MANGLE__ char* pathrepl __PROTO__((char*, const char*, const char*)); 3144887Schin extern __MANGLE__ int pathsetlink __PROTO__((const char*, const char*)); 3154887Schin extern __MANGLE__ char* pathshell __PROTO__((void)); 3164887Schin extern __MANGLE__ char* pathtemp __PROTO__((char*, size_t, const char*, const char*, int*)); 3174887Schin extern __MANGLE__ char* pathtmp __PROTO__((char*, const char*, const char*, int*)); 3184887Schin extern __MANGLE__ char* setenviron __PROTO__((const char*)); 3194887Schin extern __MANGLE__ int stracmp __PROTO__((const char*, const char*)); 3204887Schin extern __MANGLE__ char* strcopy __PROTO__((char*, const char*)); 3214887Schin extern __MANGLE__ unsigned long strelapsed __PROTO__((const char*, char**, int)); 3224887Schin extern __MANGLE__ int stresc __PROTO__((char*)); 3234887Schin extern __MANGLE__ long streval __PROTO__((const char*, char**, long(*)(const char*, char**))); 3244887Schin extern __MANGLE__ long strexpr __PROTO__((const char*, char**, long(*)(const char*, char**, __V_*), __V_*)); 3254887Schin extern __MANGLE__ int strgid __PROTO__((const char*)); 3264887Schin extern __MANGLE__ int strgrpmatch __PROTO__((const char*, const char*, int*, int, int)); 3274887Schin extern __MANGLE__ unsigned int strhash __PROTO__((const char*)); 3284887Schin extern __MANGLE__ __V_* strlook __PROTO__((const __V_*, size_t, const char*)); 3294887Schin extern __MANGLE__ int strmatch __PROTO__((const char*, const char*)); 3304887Schin extern __MANGLE__ int strmode __PROTO__((const char*)); 3314887Schin extern __MANGLE__ int strnacmp __PROTO__((const char*, const char*, size_t)); 3324887Schin extern __MANGLE__ char* strncopy __PROTO__((char*, const char*, size_t)); 33310898Sroland.mainz@nrubsig.org extern __MANGLE__ int strnpcmp __PROTO__((const char*, const char*, size_t)); 3344887Schin extern __MANGLE__ double strntod __PROTO__((const char*, size_t, char**)); 3354887Schin extern __MANGLE__ _ast_fltmax_t strntold __PROTO__((const char*, size_t, char**)); 3364887Schin extern __MANGLE__ long strntol __PROTO__((const char*, size_t, char**, int)); 3374887Schin extern __MANGLE__ intmax_t strntoll __PROTO__((const char*, size_t, char**, int)); 3388462SApril.Chin@Sun.COM extern __MANGLE__ long strnton __PROTO__((const char*, size_t, char**, char*, int)); 3394887Schin extern __MANGLE__ unsigned long strntoul __PROTO__((const char*, size_t, char**, int)); 3408462SApril.Chin@Sun.COM extern __MANGLE__ intmax_t strntonll __PROTO__((const char*, size_t, char**, char*, int)); 3414887Schin extern __MANGLE__ uintmax_t strntoull __PROTO__((const char*, size_t, char**, int)); 34210898Sroland.mainz@nrubsig.org extern __MANGLE__ int strnvcmp __PROTO__((const char*, const char*, size_t)); 3434887Schin extern __MANGLE__ int stropt __PROTO__((const char*, const __V_*, int, int(*)(__V_*, const __V_*, int, const char*), __V_*)); 34410898Sroland.mainz@nrubsig.org extern __MANGLE__ int strpcmp __PROTO__((const char*, const char*)); 3454887Schin extern __MANGLE__ int strperm __PROTO__((const char*, char**, int)); 3464887Schin extern __MANGLE__ __V_* strpsearch __PROTO__((const __V_*, size_t, size_t, const char*, char**)); 3474887Schin extern __MANGLE__ __V_* strsearch __PROTO__((const __V_*, size_t, size_t, Strcmp_f, const char*, __V_*)); 3484887Schin extern __MANGLE__ void strsort __PROTO__((char**, int, int(*)(const char*, const char*))); 3494887Schin extern __MANGLE__ char* strsubmatch __PROTO__((const char*, const char*, int)); 3504887Schin extern __MANGLE__ unsigned long strsum __PROTO__((const char*, unsigned long)); 3514887Schin extern __MANGLE__ char* strtape __PROTO__((const char*, char**)); 3524887Schin extern __MANGLE__ int strtoip4 __PROTO__((const char*, char**, uint32_t*, unsigned char*)); 3534887Schin extern __MANGLE__ long strton __PROTO__((const char*, char**, char*, int)); 3544887Schin extern __MANGLE__ intmax_t strtonll __PROTO__((const char*, char**, char*, int)); 3554887Schin extern __MANGLE__ int struid __PROTO__((const char*)); 3564887Schin extern __MANGLE__ int struniq __PROTO__((char**, int)); 35710898Sroland.mainz@nrubsig.org extern __MANGLE__ int strvcmp __PROTO__((const char*, const char*)); 3584887Schin 3594887Schin #undef __MANGLE__ 3604887Schin #define __MANGLE__ __LINKAGE__ 3614887Schin 3624887Schin /* 3634887Schin * C library global data symbols not prototyped by <unistd.h> 3644887Schin */ 3654887Schin 3664887Schin #if !defined(environ) && defined(__DYNAMIC__) 3674887Schin #define environ __DYNAMIC__(environ) 3684887Schin #else 3694887Schin extern __MANGLE__ char** environ; 3704887Schin #endif 3714887Schin 3724887Schin /* 3734887Schin * really handy malloc()/free() (__FILE__,__LINE__,__FUNCTION__) tracing 3744887Schin * make with VMDEBUG==1 or debug=1 or CCFLAGS=$(CC.DEBUG) 3754887Schin * VMDEBUG==0 disables 3764887Schin * at runtime export VMDEBUG or VMTRACE per vmalloc.3 3774887Schin * to list originating call locations 3784887Schin */ 3794887Schin 3804887Schin #if !_std_malloc && !defined(VMFL) && !defined(_VMHDR_H) && \ 3814887Schin (!defined(VMDEBUG) || VMDEBUG) && (VMDEBUG || _BLD_DEBUG) 3824887Schin 3834887Schin #define VMFL 1 3844887Schin #include <vmalloc.h> 3854887Schin 3864887Schin #endif 3874887Schin 3884887Schin #endif 389