1da2e3ebdSchin /*********************************************************************** 2da2e3ebdSchin * * 3da2e3ebdSchin * This software is part of the ast package * 4*b30d1939SAndy Fiddaman * Copyright (c) 1985-2012 AT&T Intellectual Property * 5da2e3ebdSchin * and is licensed under the * 6*b30d1939SAndy Fiddaman * Eclipse Public License, Version 1.0 * 77c2fbfb3SApril Chin * by AT&T Intellectual Property * 8da2e3ebdSchin * * 9da2e3ebdSchin * A copy of the License is available at * 10*b30d1939SAndy Fiddaman * http://www.eclipse.org/org/documents/epl-v10.html * 11*b30d1939SAndy Fiddaman * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12da2e3ebdSchin * * 13da2e3ebdSchin * Information and Software Systems Research * 14da2e3ebdSchin * AT&T Research * 15da2e3ebdSchin * Florham Park NJ * 16da2e3ebdSchin * * 17da2e3ebdSchin * Glenn Fowler <gsf@research.att.com> * 18da2e3ebdSchin * David Korn <dgk@research.att.com> * 19da2e3ebdSchin * Phong Vo <kpv@research.att.com> * 20da2e3ebdSchin * * 21da2e3ebdSchin ***********************************************************************/ 22da2e3ebdSchin #pragma prototyped 23da2e3ebdSchin /* 24da2e3ebdSchin * Advanced Software Technology Library 25da2e3ebdSchin * AT&T Research 26da2e3ebdSchin * 27da2e3ebdSchin * std + posix + ast 28da2e3ebdSchin */ 29da2e3ebdSchin 30da2e3ebdSchin #ifndef _AST_H 31da2e3ebdSchin #define _AST_H 32da2e3ebdSchin 33da2e3ebdSchin #ifndef _AST_STD_H 34da2e3ebdSchin #include <ast_std.h> 35da2e3ebdSchin #endif 36da2e3ebdSchin 37da2e3ebdSchin #ifndef _SFIO_H 38da2e3ebdSchin #include <sfio.h> 39da2e3ebdSchin #endif 40da2e3ebdSchin 41da2e3ebdSchin #ifndef ast 42da2e3ebdSchin #define ast _ast_info 43da2e3ebdSchin #endif 44da2e3ebdSchin 45da2e3ebdSchin #ifndef PATH_MAX 46da2e3ebdSchin #define PATH_MAX 1024 47da2e3ebdSchin #endif 48da2e3ebdSchin 49da2e3ebdSchin /* 50da2e3ebdSchin * workaround botched headers that assume <stdio.h> 51da2e3ebdSchin */ 52da2e3ebdSchin 53da2e3ebdSchin #ifndef FILE 54da2e3ebdSchin #ifndef _SFIO_H 55da2e3ebdSchin struct _sfio_s; 56da2e3ebdSchin #endif 57da2e3ebdSchin #define FILE struct _sfio_s 58da2e3ebdSchin #ifndef __FILE_typedef 59da2e3ebdSchin #define __FILE_typedef 1 60da2e3ebdSchin #endif 61da2e3ebdSchin #ifndef _FILEDEFED 62da2e3ebdSchin #define _FILEDEFED 1 63da2e3ebdSchin #endif 64da2e3ebdSchin #endif 65da2e3ebdSchin 66da2e3ebdSchin /* 67da2e3ebdSchin * exit() support -- this matches shell exit codes 68da2e3ebdSchin */ 69da2e3ebdSchin 70da2e3ebdSchin #define EXIT_BITS 8 /* # exit status bits */ 71da2e3ebdSchin 72da2e3ebdSchin #define EXIT_USAGE 2 /* usage exit code */ 73da2e3ebdSchin #define EXIT_QUIT ((1<<(EXIT_BITS))-1) /* parent should quit */ 74da2e3ebdSchin #define EXIT_NOTFOUND ((1<<(EXIT_BITS-1))-1) /* command not found */ 75da2e3ebdSchin #define EXIT_NOEXEC ((1<<(EXIT_BITS-1))-2) /* other exec error */ 76da2e3ebdSchin 77da2e3ebdSchin #define EXIT_CODE(x) ((x)&((1<<EXIT_BITS)-1)) 78da2e3ebdSchin #define EXIT_CORE(x) (EXIT_CODE(x)|(1<<EXIT_BITS)|(1<<(EXIT_BITS-1))) 79da2e3ebdSchin #define EXIT_TERM(x) (EXIT_CODE(x)|(1<<EXIT_BITS)) 80da2e3ebdSchin 81da2e3ebdSchin /* 82da2e3ebdSchin * NOTE: for compatibility the following work for EXIT_BITS={7,8} 83da2e3ebdSchin */ 84da2e3ebdSchin 85da2e3ebdSchin #define EXIT_STATUS(x) (((x)&((1<<(EXIT_BITS-2))-1))?(x):EXIT_CODE((x)>>EXIT_BITS)) 86da2e3ebdSchin 87da2e3ebdSchin #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)))) 88da2e3ebdSchin #define EXITED_TERM(x) ((x)&((1<<EXIT_BITS)|(1<<(EXIT_BITS-1)))) 89da2e3ebdSchin 90da2e3ebdSchin /* 91da2e3ebdSchin * astconflist() flags 92da2e3ebdSchin */ 93da2e3ebdSchin 94da2e3ebdSchin #define ASTCONF_parse 0x0001 95da2e3ebdSchin #define ASTCONF_write 0x0002 96da2e3ebdSchin #define ASTCONF_read 0x0004 97da2e3ebdSchin #define ASTCONF_lower 0x0008 98da2e3ebdSchin #define ASTCONF_base 0x0010 99da2e3ebdSchin #define ASTCONF_defined 0x0020 100da2e3ebdSchin #define ASTCONF_quote 0x0040 101da2e3ebdSchin #define ASTCONF_table 0x0080 102da2e3ebdSchin #define ASTCONF_matchcall 0x0100 103da2e3ebdSchin #define ASTCONF_matchname 0x0200 104da2e3ebdSchin #define ASTCONF_matchstandard 0x0400 105da2e3ebdSchin #define ASTCONF_error 0x0800 106da2e3ebdSchin #define ASTCONF_system 0x1000 107da2e3ebdSchin #define ASTCONF_AST 0x2000 108da2e3ebdSchin 109da2e3ebdSchin /* 110da2e3ebdSchin * pathcanon() flags 111da2e3ebdSchin */ 112da2e3ebdSchin 113da2e3ebdSchin #define PATH_PHYSICAL 01 114da2e3ebdSchin #define PATH_DOTDOT 02 115da2e3ebdSchin #define PATH_EXISTS 04 116da2e3ebdSchin #define PATH_VERIFIED(n) (((n)&01777)<<5) 117da2e3ebdSchin 118da2e3ebdSchin /* 119da2e3ebdSchin * pathaccess() flags 120da2e3ebdSchin */ 121da2e3ebdSchin 122da2e3ebdSchin #define PATH_READ 004 123da2e3ebdSchin #define PATH_WRITE 002 124da2e3ebdSchin #define PATH_EXECUTE 001 125da2e3ebdSchin #define PATH_REGULAR 010 126da2e3ebdSchin #define PATH_ABSOLUTE 020 127da2e3ebdSchin 128da2e3ebdSchin /* 129da2e3ebdSchin * touch() flags 130da2e3ebdSchin */ 131da2e3ebdSchin 132da2e3ebdSchin #define PATH_TOUCH_CREATE 01 133da2e3ebdSchin #define PATH_TOUCH_VERBATIM 02 134da2e3ebdSchin 135da2e3ebdSchin /* 136da2e3ebdSchin * pathcheck() info 137da2e3ebdSchin */ 138da2e3ebdSchin 139da2e3ebdSchin typedef struct 140da2e3ebdSchin { 141da2e3ebdSchin unsigned long date; 142da2e3ebdSchin char* feature; 143da2e3ebdSchin char* host; 144da2e3ebdSchin char* user; 145da2e3ebdSchin } Pathcheck_t; 146da2e3ebdSchin 147da2e3ebdSchin /* 148da2e3ebdSchin * strgrpmatch() flags 149da2e3ebdSchin */ 150da2e3ebdSchin 151da2e3ebdSchin #define STR_MAXIMAL 01 /* maximal match */ 152da2e3ebdSchin #define STR_LEFT 02 /* implicit left anchor */ 153da2e3ebdSchin #define STR_RIGHT 04 /* implicit right anchor */ 154da2e3ebdSchin #define STR_ICASE 010 /* ignore case */ 155da2e3ebdSchin #define STR_GROUP 020 /* (|&) inside [@|&](...) only */ 156da2e3ebdSchin 157da2e3ebdSchin /* 158da2e3ebdSchin * fmtquote() flags 159da2e3ebdSchin */ 160da2e3ebdSchin 161da2e3ebdSchin #define FMT_ALWAYS 0x01 /* always quote */ 162da2e3ebdSchin #define FMT_ESCAPED 0x02 /* already escaped */ 163da2e3ebdSchin #define FMT_SHELL 0x04 /* escape $ ` too */ 164da2e3ebdSchin #define FMT_WIDE 0x08 /* don't escape 8 bit chars */ 165da2e3ebdSchin #define FMT_PARAM 0x10 /* disable FMT_SHELL ${$( quote */ 166da2e3ebdSchin 167*b30d1939SAndy Fiddaman /* 168*b30d1939SAndy Fiddaman * chrexp() flags 169*b30d1939SAndy Fiddaman */ 170*b30d1939SAndy Fiddaman 171*b30d1939SAndy Fiddaman #define FMT_EXP_CHAR 0x020 /* expand single byte chars */ 172*b30d1939SAndy Fiddaman #define FMT_EXP_LINE 0x040 /* expand \n and \r */ 173*b30d1939SAndy Fiddaman #define FMT_EXP_WIDE 0x080 /* expand \u \U \x wide chars */ 174*b30d1939SAndy Fiddaman #define FMT_EXP_NOCR 0x100 /* skip \r */ 175*b30d1939SAndy Fiddaman #define FMT_EXP_NONL 0x200 /* skip \n */ 176*b30d1939SAndy Fiddaman 177da2e3ebdSchin /* 178da2e3ebdSchin * multibyte macros 179da2e3ebdSchin */ 180da2e3ebdSchin 181da2e3ebdSchin #define mbmax() (ast.mb_cur_max) 182da2e3ebdSchin #define mberr() (ast.tmp_int<0) 183da2e3ebdSchin 184da2e3ebdSchin #define mbcoll() (ast.mb_xfrm!=0) 185da2e3ebdSchin #define mbwide() (mbmax()>1) 186da2e3ebdSchin 187*b30d1939SAndy Fiddaman #define mb2wc(w,p,n) (*ast.mb_towc)(&w,(char*)p,n) 18834f9b3eeSRoland Mainz #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++))) 189*b30d1939SAndy Fiddaman #define mbnchar(p,n) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),n))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) 190da2e3ebdSchin #define mbinit() (mbwide()?(*ast.mb_towc)((wchar_t*)0,(char*)0,mbmax()):0) 191da2e3ebdSchin #define mbsize(p) (mbwide()?(*ast.mb_len)((char*)(p),mbmax()):((p),1)) 192*b30d1939SAndy Fiddaman #define mbnsize(p,n) (mbwide()?(*ast.mb_len)((char*)(p),n):((p),1)) 193da2e3ebdSchin #define mbconv(s,w) (ast.mb_conv?(*ast.mb_conv)(s,w):((*(s)=(w)),1)) 194*b30d1939SAndy Fiddaman #define mbwidth(w) (ast.mb_width?(*ast.mb_width)(w):1) 195da2e3ebdSchin #define mbxfrm(t,f,n) (mbcoll()?(*ast.mb_xfrm)((char*)(t),(char*)(f),n):0) 196*b30d1939SAndy Fiddaman #define mbalpha(w) (ast.mb_alpha?(*ast.mb_alpha)(w):isalpha((w)&0xff)) 197da2e3ebdSchin 198da2e3ebdSchin /* 199da2e3ebdSchin * common macros 200da2e3ebdSchin */ 201da2e3ebdSchin 202da2e3ebdSchin #define elementsof(x) (sizeof(x)/sizeof(x[0])) 203da2e3ebdSchin #define integralof(x) (((char*)(x))-((char*)0)) 204da2e3ebdSchin #define newof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)calloc(1,sizeof(t)*(n)+(x))) 205da2e3ebdSchin #define oldof(p,t,n,x) ((p)?(t*)realloc((char*)(p),sizeof(t)*(n)+(x)):(t*)malloc(sizeof(t)*(n)+(x))) 206da2e3ebdSchin #define pointerof(x) ((void*)((char*)0+(x))) 207da2e3ebdSchin #define roundof(x,y) (((x)+(y)-1)&~((y)-1)) 208da2e3ebdSchin #define ssizeof(x) ((int)sizeof(x)) 209da2e3ebdSchin 210da2e3ebdSchin #define streq(a,b) (*(a)==*(b)&&!strcmp(a,b)) 211da2e3ebdSchin #define strneq(a,b,n) (*(a)==*(b)&&!strncmp(a,b,n)) 212da2e3ebdSchin #define strsignal(s) fmtsignal(s) 213da2e3ebdSchin 214da2e3ebdSchin #if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus) 215da2e3ebdSchin #define NiL 0 216da2e3ebdSchin #define NoP(x) (void)(x) 217da2e3ebdSchin #else 218da2e3ebdSchin #define NiL ((char*)0) 219da2e3ebdSchin #define NoP(x) (&x,1) 220da2e3ebdSchin #endif 221da2e3ebdSchin 222da2e3ebdSchin #if !defined(NoF) 223da2e3ebdSchin #define NoF(x) void _DATA_ ## x () {} 224da2e3ebdSchin #if !defined(_DATA_) 225da2e3ebdSchin #define _DATA_ 226da2e3ebdSchin #endif 227da2e3ebdSchin #endif 228da2e3ebdSchin 229da2e3ebdSchin #if !defined(NoN) 230da2e3ebdSchin #define NoN(x) void _STUB_ ## x () {} 231da2e3ebdSchin #if !defined(_STUB_) 232da2e3ebdSchin #define _STUB_ 233da2e3ebdSchin #endif 234da2e3ebdSchin #endif 235da2e3ebdSchin 236da2e3ebdSchin #define NOT_USED(x) NoP(x) 237da2e3ebdSchin 238da2e3ebdSchin typedef int (*Error_f)(void*, void*, int, ...); 239da2e3ebdSchin 240da2e3ebdSchin typedef int (*Ast_confdisc_f)(const char*, const char*, const char*); 241da2e3ebdSchin typedef int (*Strcmp_context_f)(const char*, const char*, void*); 242da2e3ebdSchin typedef int (*Strcmp_f)(const char*, const char*); 243da2e3ebdSchin 244da2e3ebdSchin #if _BLD_ast && defined(__EXPORT__) 245da2e3ebdSchin #define extern __EXPORT__ 246da2e3ebdSchin #endif 247da2e3ebdSchin 248da2e3ebdSchin extern char* astgetconf(const char*, const char*, const char*, int, Error_f); 249da2e3ebdSchin extern char* astconf(const char*, const char*, const char*); 250da2e3ebdSchin extern Ast_confdisc_f astconfdisc(Ast_confdisc_f); 251da2e3ebdSchin extern void astconflist(Sfio_t*, const char*, int, const char*); 252da2e3ebdSchin extern off_t astcopy(int, int, off_t); 253da2e3ebdSchin extern int astlicense(char*, int, char*, char*, int, int, int); 254da2e3ebdSchin extern int astquery(int, const char*, ...); 255da2e3ebdSchin extern void astwinsize(int, int*, int*); 256da2e3ebdSchin 257da2e3ebdSchin extern ssize_t base64encode(const void*, size_t, void**, void*, size_t, void**); 258da2e3ebdSchin extern ssize_t base64decode(const void*, size_t, void**, void*, size_t, void**); 259da2e3ebdSchin extern int chresc(const char*, char**); 260*b30d1939SAndy Fiddaman extern int chrexp(const char*, char**, int*, int); 261da2e3ebdSchin extern int chrtoi(const char*); 262*b30d1939SAndy Fiddaman extern char* conformance(const char*, size_t); 263da2e3ebdSchin extern int eaccess(const char*, int); 264*b30d1939SAndy Fiddaman extern char* fmtbase(intmax_t, int, int); 265*b30d1939SAndy Fiddaman #define fmtbasell(a,b,c) fmtbase(a,b,c) /* until 2014-01-01 */ 266da2e3ebdSchin extern char* fmtbuf(size_t); 267da2e3ebdSchin extern char* fmtclock(Sfulong_t); 268da2e3ebdSchin extern char* fmtelapsed(unsigned long, int); 269da2e3ebdSchin extern char* fmterror(int); 270da2e3ebdSchin extern char* fmtesc(const char*); 271da2e3ebdSchin extern char* fmtesq(const char*, const char*); 272da2e3ebdSchin extern char* fmtident(const char*); 273da2e3ebdSchin extern char* fmtip4(uint32_t, int); 274da2e3ebdSchin extern char* fmtfmt(const char*); 275da2e3ebdSchin extern char* fmtgid(int); 276*b30d1939SAndy Fiddaman extern char* fmtint(intmax_t, int); 277da2e3ebdSchin extern char* fmtmatch(const char*); 278da2e3ebdSchin extern char* fmtmode(int, int); 279da2e3ebdSchin extern char* fmtnesq(const char*, const char*, size_t); 280da2e3ebdSchin extern char* fmtnum(unsigned long, int); 281da2e3ebdSchin extern char* fmtperm(int); 282da2e3ebdSchin extern char* fmtquote(const char*, const char*, const char*, size_t, int); 283da2e3ebdSchin extern char* fmtre(const char*); 284da2e3ebdSchin extern char* fmtscale(Sfulong_t, int); 285da2e3ebdSchin extern char* fmtsignal(int); 286da2e3ebdSchin extern char* fmttime(const char*, time_t); 287da2e3ebdSchin extern char* fmtuid(int); 288da2e3ebdSchin extern char* fmtversion(unsigned long); 289da2e3ebdSchin extern void* memdup(const void*, size_t); 290da2e3ebdSchin extern void memfatal(void); 291da2e3ebdSchin extern unsigned int memhash(const void*, int); 292da2e3ebdSchin extern unsigned long memsum(const void*, int, unsigned long); 293da2e3ebdSchin extern char* pathaccess(char*, const char*, const char*, const char*, int); 294*b30d1939SAndy Fiddaman extern char* pathaccess_20100601(const char*, const char*, const char*, int, char*, size_t); 295da2e3ebdSchin extern char* pathbin(void); 296da2e3ebdSchin extern char* pathcanon(char*, int); 297*b30d1939SAndy Fiddaman extern char* pathcanon_20100601(char*, size_t, int); 298da2e3ebdSchin extern char* pathcat(char*, const char*, int, const char*, const char*); 299*b30d1939SAndy Fiddaman extern char* pathcat_20100601(const char*, int, const char*, const char*, char*, size_t); 300da2e3ebdSchin extern int pathcd(const char*, const char*); 301da2e3ebdSchin extern int pathcheck(const char*, const char*, Pathcheck_t*); 302da2e3ebdSchin extern int pathexists(char*, int); 303da2e3ebdSchin extern char* pathfind(const char*, const char*, const char*, char*, size_t); 304da2e3ebdSchin extern int pathgetlink(const char*, char*, int); 305da2e3ebdSchin extern int pathinclude(const char*); 306da2e3ebdSchin extern char* pathkey(char*, char*, const char*, const char*, const char*); 307*b30d1939SAndy Fiddaman extern char* pathkey_20100601(const char*, const char*, const char*, char*, size_t, char*, size_t); 308da2e3ebdSchin extern size_t pathnative(const char*, char*, size_t); 309da2e3ebdSchin extern char* pathpath(char*, const char*, const char*, int); 310*b30d1939SAndy Fiddaman extern char* pathpath_20100601(const char*, const char*, int, char*, size_t); 311da2e3ebdSchin extern size_t pathposix(const char*, char*, size_t); 312da2e3ebdSchin extern char* pathprobe(char*, char*, const char*, const char*, const char*, int); 313*b30d1939SAndy Fiddaman extern char* pathprobe_20100601(const char*, const char*, const char*, int, char*, size_t, char*, size_t); 31434f9b3eeSRoland Mainz extern size_t pathprog(const char*, char*, size_t); 315da2e3ebdSchin extern char* pathrepl(char*, const char*, const char*); 316*b30d1939SAndy Fiddaman extern char* pathrepl_20100601(char*, size_t, const char*, const char*); 317da2e3ebdSchin extern int pathsetlink(const char*, const char*); 318da2e3ebdSchin extern char* pathshell(void); 319da2e3ebdSchin extern char* pathtemp(char*, size_t, const char*, const char*, int*); 320da2e3ebdSchin extern char* pathtmp(char*, const char*, const char*, int*); 321da2e3ebdSchin extern char* setenviron(const char*); 322da2e3ebdSchin extern int stracmp(const char*, const char*); 323da2e3ebdSchin extern char* strcopy(char*, const char*); 324da2e3ebdSchin extern unsigned long strelapsed(const char*, char**, int); 325da2e3ebdSchin extern int stresc(char*); 326*b30d1939SAndy Fiddaman extern int strexp(char*, int); 327da2e3ebdSchin extern long streval(const char*, char**, long(*)(const char*, char**)); 328da2e3ebdSchin extern long strexpr(const char*, char**, long(*)(const char*, char**, void*), void*); 329da2e3ebdSchin extern int strgid(const char*); 330da2e3ebdSchin extern int strgrpmatch(const char*, const char*, int*, int, int); 331*b30d1939SAndy Fiddaman extern int strgrpmatch_20120528(const char*, const char*, ssize_t*, int, int); 332da2e3ebdSchin extern unsigned int strhash(const char*); 333da2e3ebdSchin extern void* strlook(const void*, size_t, const char*); 334da2e3ebdSchin extern int strmatch(const char*, const char*); 335da2e3ebdSchin extern int strmode(const char*); 336da2e3ebdSchin extern int strnacmp(const char*, const char*, size_t); 337da2e3ebdSchin extern char* strncopy(char*, const char*, size_t); 33834f9b3eeSRoland Mainz extern int strnpcmp(const char*, const char*, size_t); 339da2e3ebdSchin extern double strntod(const char*, size_t, char**); 340da2e3ebdSchin extern _ast_fltmax_t strntold(const char*, size_t, char**); 341da2e3ebdSchin extern long strntol(const char*, size_t, char**, int); 342da2e3ebdSchin extern intmax_t strntoll(const char*, size_t, char**, int); 3437c2fbfb3SApril Chin extern long strnton(const char*, size_t, char**, char*, int); 344da2e3ebdSchin extern unsigned long strntoul(const char*, size_t, char**, int); 3457c2fbfb3SApril Chin extern intmax_t strntonll(const char*, size_t, char**, char*, int); 346da2e3ebdSchin extern uintmax_t strntoull(const char*, size_t, char**, int); 34734f9b3eeSRoland Mainz extern int strnvcmp(const char*, const char*, size_t); 348da2e3ebdSchin extern int stropt(const char*, const void*, int, int(*)(void*, const void*, int, const char*), void*); 34934f9b3eeSRoland Mainz extern int strpcmp(const char*, const char*); 350da2e3ebdSchin extern int strperm(const char*, char**, int); 351da2e3ebdSchin extern void* strpsearch(const void*, size_t, size_t, const char*, char**); 352da2e3ebdSchin extern void* strsearch(const void*, size_t, size_t, Strcmp_f, const char*, void*); 353da2e3ebdSchin extern void strsort(char**, int, int(*)(const char*, const char*)); 354da2e3ebdSchin extern char* strsubmatch(const char*, const char*, int); 355da2e3ebdSchin extern unsigned long strsum(const char*, unsigned long); 356da2e3ebdSchin extern char* strtape(const char*, char**); 357da2e3ebdSchin extern int strtoip4(const char*, char**, uint32_t*, unsigned char*); 358da2e3ebdSchin extern long strton(const char*, char**, char*, int); 359da2e3ebdSchin extern intmax_t strtonll(const char*, char**, char*, int); 360da2e3ebdSchin extern int struid(const char*); 361da2e3ebdSchin extern int struniq(char**, int); 36234f9b3eeSRoland Mainz extern int strvcmp(const char*, const char*); 363*b30d1939SAndy Fiddaman extern int wc2utf8(char*, uint32_t); 364da2e3ebdSchin 365da2e3ebdSchin #undef extern 366da2e3ebdSchin 367da2e3ebdSchin /* 368da2e3ebdSchin * C library global data symbols not prototyped by <unistd.h> 369da2e3ebdSchin */ 370da2e3ebdSchin 371da2e3ebdSchin #if !defined(environ) && defined(__DYNAMIC__) 372da2e3ebdSchin #define environ __DYNAMIC__(environ) 373da2e3ebdSchin #else 374da2e3ebdSchin extern char** environ; 375da2e3ebdSchin #endif 376da2e3ebdSchin 377da2e3ebdSchin /* 378da2e3ebdSchin * really handy malloc()/free() (__FILE__,__LINE__,__FUNCTION__) tracing 379da2e3ebdSchin * make with VMDEBUG==1 or debug=1 or CCFLAGS=$(CC.DEBUG) 380da2e3ebdSchin * VMDEBUG==0 disables 381*b30d1939SAndy Fiddaman * at runtime export VMALLOC_OPTIONS per vmalloc.3 382da2e3ebdSchin * to list originating call locations 383da2e3ebdSchin */ 384da2e3ebdSchin 385da2e3ebdSchin #if !_std_malloc && !defined(VMFL) && !defined(_VMHDR_H) && \ 386*b30d1939SAndy Fiddaman (VMDEBUG || !defined(VMDEBUG) && _BLD_DEBUG) 387da2e3ebdSchin 388da2e3ebdSchin #define VMFL 1 389da2e3ebdSchin #include <vmalloc.h> 390da2e3ebdSchin 391da2e3ebdSchin #endif 392da2e3ebdSchin 393*b30d1939SAndy Fiddaman #include <ast_api.h> 394*b30d1939SAndy Fiddaman 395*b30d1939SAndy Fiddaman #undef AST_PLUGIN_VERSION 396*b30d1939SAndy Fiddaman #define AST_PLUGIN_VERSION(v) ((v)>AST_VERSION?(v):AST_VERSION) 397*b30d1939SAndy Fiddaman 398*b30d1939SAndy Fiddaman #if defined(__EXPORT__) 399*b30d1939SAndy Fiddaman #define extern __EXPORT__ 400*b30d1939SAndy Fiddaman #endif 401*b30d1939SAndy Fiddaman 402*b30d1939SAndy Fiddaman extern unsigned long plugin_version(void); 403*b30d1939SAndy Fiddaman 404*b30d1939SAndy Fiddaman #undef extern 405*b30d1939SAndy Fiddaman 406da2e3ebdSchin #endif 407