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