1da2e3ebdSchin /*********************************************************************** 2da2e3ebdSchin * * 3da2e3ebdSchin * This software is part of the ast package * 4*b30d1939SAndy Fiddaman * Copyright (c) 1982-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 * David Korn <dgk@research.att.com> * 18da2e3ebdSchin * * 19da2e3ebdSchin ***********************************************************************/ 20da2e3ebdSchin #pragma prototyped 21da2e3ebdSchin #ifndef PATH_OFFSET 22da2e3ebdSchin 23da2e3ebdSchin /* 24da2e3ebdSchin * UNIX shell path handling interface 25da2e3ebdSchin * Written by David Korn 26da2e3ebdSchin * These are the definitions for the lexical analyzer 27da2e3ebdSchin */ 28da2e3ebdSchin 29da2e3ebdSchin #include "FEATURE/options" 30da2e3ebdSchin #include <nval.h> 31*b30d1939SAndy Fiddaman #include "defs.h" 32da2e3ebdSchin 33da2e3ebdSchin #if !defined(SHOPT_SPAWN) 34da2e3ebdSchin # if _UWIN || _use_spawnveg || !_lib_fork 35da2e3ebdSchin # define SHOPT_SPAWN 1 36da2e3ebdSchin # endif 37da2e3ebdSchin #endif /* !SHOPT_SPAWN */ 38da2e3ebdSchin 39da2e3ebdSchin #define PATH_PATH 0001 40da2e3ebdSchin #define PATH_FPATH 0002 41da2e3ebdSchin #define PATH_CDPATH 0004 42da2e3ebdSchin #define PATH_BFPATH 0010 43da2e3ebdSchin #define PATH_SKIP 0020 44da2e3ebdSchin #define PATH_BUILTIN_LIB 0040 45da2e3ebdSchin #define PATH_STD_DIR 0100 /* directory is on $(getconf PATH) */ 46da2e3ebdSchin 47da2e3ebdSchin #define PATH_OFFSET 2 /* path offset for path_join */ 4834f9b3eeSRoland Mainz #define MAXDEPTH (sizeof(char*)==2?64:1024) /* maximum recursion depth*/ 49da2e3ebdSchin 50da2e3ebdSchin /* 51da2e3ebdSchin * path component structure for path searching 52da2e3ebdSchin */ 53da2e3ebdSchin typedef struct pathcomp 54da2e3ebdSchin { 55da2e3ebdSchin struct pathcomp *next; 56da2e3ebdSchin int refcount; 57da2e3ebdSchin dev_t dev; 58da2e3ebdSchin ino_t ino; 597c2fbfb3SApril Chin time_t mtime; 60da2e3ebdSchin char *name; 61da2e3ebdSchin char *lib; 62*b30d1939SAndy Fiddaman char *bbuf; 63da2e3ebdSchin char *blib; 64da2e3ebdSchin unsigned short len; 65da2e3ebdSchin unsigned short flags; 66da2e3ebdSchin Shell_t *shp; 67da2e3ebdSchin } Pathcomp_t; 68da2e3ebdSchin 69da2e3ebdSchin #ifndef ARG_RAW 70da2e3ebdSchin struct argnod; 71da2e3ebdSchin #endif /* !ARG_RAW */ 72da2e3ebdSchin 73da2e3ebdSchin /* pathname handling routines */ 74*b30d1939SAndy Fiddaman extern void path_newdir(Shell_t*,Pathcomp_t*); 75da2e3ebdSchin extern Pathcomp_t *path_dirfind(Pathcomp_t*,const char*,int); 76*b30d1939SAndy Fiddaman extern Pathcomp_t *path_unsetfpath(Shell_t*); 77*b30d1939SAndy Fiddaman extern Pathcomp_t *path_addpath(Shell_t*,Pathcomp_t*,const char*,int); 78da2e3ebdSchin extern Pathcomp_t *path_dup(Pathcomp_t*); 79da2e3ebdSchin extern void path_delete(Pathcomp_t*); 80da2e3ebdSchin extern void path_alias(Namval_t*,Pathcomp_t*); 81*b30d1939SAndy Fiddaman extern Pathcomp_t *path_absolute(Shell_t*, const char*, Pathcomp_t*); 82da2e3ebdSchin extern char *path_basename(const char*); 83*b30d1939SAndy Fiddaman extern char *path_fullname(Shell_t*,const char*); 84*b30d1939SAndy Fiddaman extern int path_expand(Shell_t*,const char*, struct argnod**); 85*b30d1939SAndy Fiddaman extern void path_exec(Shell_t*,const char*,char*[],struct argnod*); 86*b30d1939SAndy Fiddaman extern pid_t path_spawn(Shell_t*,const char*,char*[],char*[],Pathcomp_t*,int); 87da2e3ebdSchin #if defined(__EXPORT__) && defined(_BLD_DLL) && defined(_BLD_shell) 88da2e3ebdSchin # define extern __EXPORT__ 89da2e3ebdSchin #endif 90*b30d1939SAndy Fiddaman extern int path_open(Shell_t*,const char*,Pathcomp_t*); 91*b30d1939SAndy Fiddaman extern Pathcomp_t *path_get(Shell_t*,const char*); 92da2e3ebdSchin #undef extern 93*b30d1939SAndy Fiddaman extern char *path_pwd(Shell_t*,int); 94*b30d1939SAndy Fiddaman extern Pathcomp_t *path_nextcomp(Shell_t*,Pathcomp_t*,const char*,Pathcomp_t*); 95*b30d1939SAndy Fiddaman extern int path_search(Shell_t*,const char*,Pathcomp_t**,int); 96*b30d1939SAndy Fiddaman extern char *path_relative(Shell_t*,const char*); 97*b30d1939SAndy Fiddaman extern int path_complete(Shell_t*,const char*, const char*,struct argnod**); 98da2e3ebdSchin #if SHOPT_BRACEPAT 99*b30d1939SAndy Fiddaman extern int path_generate(Shell_t*,struct argnod*,struct argnod**); 100da2e3ebdSchin #endif /* SHOPT_BRACEPAT */ 101*b30d1939SAndy Fiddaman extern int path_xattr(Shell_t*, const char*, char*); 102*b30d1939SAndy Fiddaman 103*b30d1939SAndy Fiddaman /* builtin/plugin routines */ 104*b30d1939SAndy Fiddaman extern int sh_addlib(Shell_t*,void*,char*,Pathcomp_t*); 105*b30d1939SAndy Fiddaman extern Shbltin_f sh_getlib(Shell_t*,char*,Pathcomp_t*); 106da2e3ebdSchin 107da2e3ebdSchin /* constant strings needed for whence */ 108da2e3ebdSchin extern const char e_timeformat[]; 109da2e3ebdSchin extern const char e_badtformat[]; 110da2e3ebdSchin extern const char e_dot[]; 111*b30d1939SAndy Fiddaman extern const char e_funload[]; 112da2e3ebdSchin extern const char e_pfsh[]; 113da2e3ebdSchin extern const char e_pwd[]; 114da2e3ebdSchin extern const char e_logout[]; 115da2e3ebdSchin extern const char e_alphanum[]; 116da2e3ebdSchin extern const char e_mailmsg[]; 117da2e3ebdSchin extern const char e_suidprofile[]; 118da2e3ebdSchin extern const char e_sysprofile[]; 119da2e3ebdSchin extern const char e_traceprompt[]; 120da2e3ebdSchin extern const char e_crondir[]; 121da2e3ebdSchin #if SHOPT_SUID_EXEC 122da2e3ebdSchin extern const char e_suidexec[]; 123da2e3ebdSchin #endif /* SHOPT_SUID_EXEC */ 124da2e3ebdSchin extern const char is_alias[]; 125da2e3ebdSchin extern const char is_builtin[]; 1267c2fbfb3SApril Chin extern const char is_spcbuiltin[]; 127da2e3ebdSchin extern const char is_builtver[]; 128da2e3ebdSchin extern const char is_reserved[]; 129da2e3ebdSchin extern const char is_talias[]; 130da2e3ebdSchin extern const char is_xalias[]; 131da2e3ebdSchin extern const char is_function[]; 132da2e3ebdSchin extern const char is_ufunction[]; 133da2e3ebdSchin #ifdef SHELLMAGIC 134da2e3ebdSchin extern const char e_prohibited[]; 135da2e3ebdSchin #endif /* SHELLMAGIC */ 136da2e3ebdSchin 137da2e3ebdSchin #if SHOPT_ACCT 138da2e3ebdSchin # include "FEATURE/acct" 139da2e3ebdSchin # ifdef _sys_acct 140da2e3ebdSchin extern void sh_accinit(void); 141da2e3ebdSchin extern void sh_accbegin(const char*); 142da2e3ebdSchin extern void sh_accend(void); 143da2e3ebdSchin extern void sh_accsusp(void); 144da2e3ebdSchin # else 145da2e3ebdSchin # undef SHOPT_ACCT 146da2e3ebdSchin # endif /* _sys_acct */ 147da2e3ebdSchin #endif /* SHOPT_ACCT */ 148da2e3ebdSchin 149da2e3ebdSchin #endif /*! PATH_OFFSET */ 150