da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1982-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* http://www.opensource.org/licenses/cpl1.0.txt *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma prototyped
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef PATH_OFFSET
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * UNIX shell path handling interface
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Written by David Korn
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * These are the definitions for the lexical analyzer
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include "FEATURE/options"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <nval.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if !defined(SHOPT_SPAWN)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# if _UWIN || _use_spawnveg || !_lib_fork
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define SHOPT_SPAWN 1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* !SHOPT_SPAWN */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_PATH 0001
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_FPATH 0002
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_CDPATH 0004
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_BFPATH 0010
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_SKIP 0020
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_BUILTIN_LIB 0040
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_STD_DIR 0100 /* directory is on $(getconf PATH) */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#define PATH_OFFSET 2 /* path offset for path_join */
34f9b3eef6fdadbda0a846aa4d68691ac40eace5Roland Mainz#define MAXDEPTH (sizeof(char*)==2?64:1024) /* maximum recursion depth*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * path component structure for path searching
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypedef struct pathcomp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct pathcomp *next;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin int refcount;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin dev_t dev;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin ino_t ino;
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin time_t mtime;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *name;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *lib;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin char *blib;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin void *bltin_lib;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short len;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin unsigned short flags;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin Shell_t *shp;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin} Pathcomp_t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifndef ARG_RAW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin struct argnod;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* !ARG_RAW */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* pathname handling routines */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void path_newdir(Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_dirfind(Pathcomp_t*,const char*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_unsetfpath(Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_addpath(Pathcomp_t*,const char*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_dup(Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void path_delete(Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void path_alias(Namval_t*,Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_absolute(const char*, Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *path_basename(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *path_fullname(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int path_expand(const char*, struct argnod**);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern void path_exec(const char*,char*[],struct argnod*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern pid_t path_spawn(const char*,char*[],char*[],Pathcomp_t*,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if defined(__EXPORT__) && defined(_BLD_DLL) && defined(_BLD_shell)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# define extern __EXPORT__
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int path_open(const char*,Pathcomp_t*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_get(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#undef extern
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *path_pwd(int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern Pathcomp_t *path_nextcomp(Pathcomp_t*,const char*,Pathcomp_t*);
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern int path_search(const char*,Pathcomp_t**,int);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern char *path_relative(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern int path_complete(const char*, const char*,struct argnod**);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if SHOPT_BRACEPAT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern int path_generate(struct argnod*,struct argnod**);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SHOPT_BRACEPAT */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/* constant strings needed for whence */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_timeformat[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_badtformat[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_dot[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_pfsh[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_pwd[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_logout[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_alphanum[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_mailmsg[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_suidprofile[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_sysprofile[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_traceprompt[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char e_crondir[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if SHOPT_SUID_EXEC
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern const char e_suidexec[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SHOPT_SUID_EXEC */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_alias[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_builtin[];
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinextern const char is_spcbuiltin[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_builtver[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_reserved[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_talias[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_xalias[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_function[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinextern const char is_ufunction[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#ifdef SHELLMAGIC
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern const char e_prohibited[];
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SHELLMAGIC */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#if SHOPT_ACCT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# include "FEATURE/acct"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# ifdef _sys_acct
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void sh_accinit(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void sh_accbegin(const char*);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void sh_accend(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin extern void sh_accsusp(void);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# else
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# undef SHOPT_ACCT
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# endif /* _sys_acct */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /* SHOPT_ACCT */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#endif /*! PATH_OFFSET */