Home | History | Annotate | Download | only in sh
      1     0    stevel /*
      2     0    stevel  * CDDL HEADER START
      3     0    stevel  *
      4     0    stevel  * The contents of this file are subject to the terms of the
      5  2256  na195498  * Common Development and Distribution License (the "License").
      6  2256  na195498  * You may not use this file except in compliance with the License.
      7     0    stevel  *
      8     0    stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0    stevel  * or http://www.opensolaris.org/os/licensing.
     10     0    stevel  * See the License for the specific language governing permissions
     11     0    stevel  * and limitations under the License.
     12     0    stevel  *
     13     0    stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0    stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0    stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0    stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0    stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0    stevel  *
     19     0    stevel  * CDDL HEADER END
     20     0    stevel  */
     21     0    stevel 
     22     0    stevel /*
     23  9369  Nobutomo  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     24     0    stevel  * Use is subject to license terms.
     25     0    stevel  */
     26     0    stevel 
     27   527      chin /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28   527      chin /*	  All Rights Reserved  	*/
     29     0    stevel 
     30     0    stevel #ifndef	_DEFS_H
     31     0    stevel #define	_DEFS_H
     32     0    stevel 
     33     0    stevel #ifdef	__cplusplus
     34     0    stevel extern "C" {
     35     0    stevel #endif
     36     0    stevel 
     37     0    stevel /*
     38     0    stevel  *	UNIX shell
     39     0    stevel  */
     40     0    stevel 
     41     0    stevel /* execute flags */
     42     0    stevel #define		XEC_EXECED	01
     43     0    stevel #define			XEC_LINKED	02
     44     0    stevel #define		XEC_NOSTOP	04
     45     0    stevel 
     46     0    stevel /* endjobs flags */
     47     0    stevel #define			JOB_STOPPED	01
     48     0    stevel #define			JOB_RUNNING	02
     49     0    stevel 
     50     0    stevel /* error exits from various parts of shell */
     51     0    stevel #define		ERROR		1
     52     0    stevel #define		SYNBAD		2
     53     0    stevel #define		SIGFAIL 	2000
     54     0    stevel #define		SIGFLG		0200
     55     0    stevel 
     56     0    stevel /* command tree */
     57     0    stevel #define		FPIN		0x0100
     58     0    stevel #define		FPOU		0x0200
     59     0    stevel #define		FAMP		0x0400
     60     0    stevel #define		COMMSK		0x00F0
     61  9369  Nobutomo #define		CNTMSK		0x000F	/* this bit fields no longer used */
     62     0    stevel 
     63     0    stevel #define		TCOM		0x0000
     64     0    stevel #define		TPAR		0x0010
     65     0    stevel #define		TFIL		0x0020
     66     0    stevel #define		TLST		0x0030
     67     0    stevel #define		TIF			0x0040
     68     0    stevel #define		TWH			0x0050
     69     0    stevel #define		TUN			0x0060
     70     0    stevel #define		TSW			0x0070
     71     0    stevel #define		TAND		0x0080
     72     0    stevel #define		TORF		0x0090
     73     0    stevel #define		TFORK		0x00A0
     74     0    stevel #define		TFOR		0x00B0
     75     0    stevel #define			TFND		0x00C0
     76     0    stevel 
     77     0    stevel /* execute table */
     78     0    stevel #define		SYSSET		1
     79     0    stevel #define		SYSCD		2
     80     0    stevel #define		SYSEXEC		3
     81     0    stevel 
     82     0    stevel #ifdef RES	/*	include login code	*/
     83     0    stevel #define		SYSLOGIN	4
     84     0    stevel #else
     85     0    stevel #define		SYSNEWGRP 	4
     86     0    stevel #endif
     87     0    stevel 
     88     0    stevel #define		SYSTRAP		5
     89     0    stevel #define		SYSEXIT		6
     90     0    stevel #define		SYSSHFT 	7
     91     0    stevel #define		SYSWAIT		8
     92     0    stevel #define		SYSCONT 	9
     93     0    stevel #define		SYSBREAK	10
     94     0    stevel #define		SYSEVAL 	11
     95     0    stevel #define		SYSDOT		12
     96     0    stevel #define		SYSRDONLY 	13
     97     0    stevel #define		SYSTIMES 	14
     98     0    stevel #define		SYSXPORT	15
     99     0    stevel #define		SYSNULL 	16
    100     0    stevel #define		SYSREAD 	17
    101     0    stevel #define			SYSTST		18
    102     0    stevel 
    103     0    stevel #ifndef RES	/*	exclude umask code	*/
    104     0    stevel #define		SYSUMASK 	20
    105     0    stevel #define		SYSULIMIT 	21
    106     0    stevel #endif
    107     0    stevel 
    108     0    stevel #define		SYSECHO		22
    109     0    stevel #define			SYSHASH		23
    110     0    stevel #define			SYSPWD		24
    111     0    stevel #define		SYSRETURN	25
    112     0    stevel #define			SYSUNS		26
    113     0    stevel #define			SYSMEM		27
    114     0    stevel #define			SYSTYPE  	28
    115     0    stevel #define			SYSGETOPT	29
    116     0    stevel #define		SYSJOBS		30
    117     0    stevel #define		SYSFGBG		31
    118     0    stevel #define		SYSKILL		32
    119     0    stevel #define		SYSSUSP		33
    120     0    stevel #define		SYSSTOP		34
    121     0    stevel 
    122     0    stevel /* used for input and output of shell */
    123     0    stevel #define		INIO 		19
    124     0    stevel 
    125     0    stevel /* io nodes */
    126     0    stevel #define		USERIO		10
    127     0    stevel #define		IOUFD		15
    128  5976   nakanon #define		IODOC		0x0010
    129  5976   nakanon #define		IOPUT		0x0020
    130  5976   nakanon #define		IOAPP		0x0040
    131  5976   nakanon #define		IOMOV		0x0080
    132  5976   nakanon #define		IORDW		0x0100
    133  5976   nakanon #define		IOSTRIP		0x0200
    134  5976   nakanon #define		IODOC_SUBST	0x0400
    135     0    stevel #define		INPIPE		0
    136     0    stevel #define		OTPIPE		1
    137     0    stevel 
    138     0    stevel /* arg list terminator */
    139     0    stevel #define		ENDARGS		0
    140     0    stevel 
    141     0    stevel #include	<unistd.h>
    142   527      chin #include 	"mac.h"
    143     0    stevel #include	"mode.h"
    144     0    stevel #include	"name.h"
    145     0    stevel #include	<signal.h>
    146     0    stevel #include	<sys/types.h>
    147     0    stevel 
    148     0    stevel /* id's */
    149     0    stevel extern pid_t	mypid;
    150     0    stevel extern pid_t	mypgid;
    151     0    stevel extern pid_t	mysid;
    152     0    stevel 
    153     0    stevel /* getopt */
    154     0    stevel 
    155     0    stevel extern int		optind;
    156     0    stevel extern int		opterr;
    157     0    stevel extern int 		_sp;
    158     0    stevel extern char 		*optarg;
    159     0    stevel 
    160     0    stevel 
    161     0    stevel /* use sh-private versions of memory allocation routines */
    162     0    stevel 
    163     0    stevel #define		alloc 		malloc
    164     0    stevel 
    165     0    stevel /* result type declarations */
    166     0    stevel 
    167     0    stevel extern int handle();
    168     0    stevel extern void chktrap();
    169   527      chin extern void done(int)
    170   527      chin 	__NORETURN;
    171     0    stevel extern void sh_free();
    172     0    stevel extern unsigned char *make();
    173     0    stevel extern unsigned char *movstr();
    174     0    stevel extern unsigned char *movstrn();
    175     0    stevel extern unsigned char *cwdget();
    176     0    stevel extern struct trenod *cmd();
    177     0    stevel extern struct trenod *makefork();
    178     0    stevel extern struct namnod *lookup();
    179     0    stevel extern struct namnod *findnam();
    180     0    stevel extern struct dolnod *useargs();
    181     0    stevel extern float expr();
    182     0    stevel extern unsigned char *catpath();
    183     0    stevel extern unsigned char *getpath();
    184     0    stevel extern unsigned char *nextpath();
    185     0    stevel extern unsigned char **scan();
    186     0    stevel extern unsigned char *mactrim();
    187     0    stevel extern unsigned char *macro();
    188   527      chin extern void exname(struct namnod *);
    189   527      chin extern void printnam(struct namnod *);
    190   527      chin extern void printro(struct namnod *);
    191   527      chin extern void printexp(struct namnod *);
    192     0    stevel extern unsigned int readwc();
    193     0    stevel extern unsigned int nextwc();
    194     0    stevel extern unsigned char skipc();
    195     0    stevel extern unsigned char **local_setenv();
    196     0    stevel extern time_t time();
    197   527      chin extern void exitsh(int)
    198   527      chin 	__NORETURN;
    199  2256  na195498 extern void failed_real(unsigned char *, const char *, unsigned char *)
    200  2256  na195498     __NORETURN;
    201  2256  na195498 extern void error(const char *) __NORETURN;
    202   527      chin extern void prf();
    203   527      chin extern void assign(struct namnod *, unsigned char *);
    204   527      chin extern void setmode(int);
    205   527      chin extern void trim(unsigned char *);
    206   527      chin extern void preacct(unsigned char *);
    207  9369  Nobutomo extern void addblok(unsigned int);
    208  9369  Nobutomo extern void freetree(struct trenod *);
    209   527      chin 
    210   527      chin 
    211     0    stevel 
    212     0    stevel #define		attrib(n, f)		(n->namflg |= f)
    213     0    stevel #define		round(a, b)		(((int)(((char *)(a)+b)-1))&~((b)-1))
    214  2256  na195498 #define		closepipe(x)		(close(x[INPIPE]), close(x[OTPIPE]))
    215     0    stevel #define		eq(a, b)		(cf(a, b) == 0)
    216     0    stevel #define		max(a, b)		((a) > (b)?(a):(b))
    217     0    stevel #define		assert(x)
    218  2256  na195498 #define		_gettext(s)		(unsigned char *)gettext(s)
    219  2256  na195498 
    220  2256  na195498 /*
    221  2256  na195498  * macros using failed_real(). Only s2 is gettext'd with both functions.
    222  2256  na195498  */
    223  2256  na195498 #define		failed(s1, s2)		failed_real(s1, s2, NULL)
    224  2256  na195498 #define		bfailed(s1, s2, s3)	failed_real(s1, s2, s3)
    225  2256  na195498 
    226  2256  na195498 /*
    227  2256  na195498  * macros using failure_real(). s1 and s2 is gettext'd with gfailure(), but
    228  2256  na195498  * only s2 is gettext'd with failure().
    229  2256  na195498  */
    230  2256  na195498 #define		failure(s1, s2)		failure_real(s1, s2, 0)
    231  2256  na195498 #define		gfailure(s1, s2)	failure_real(s1, s2, 1)
    232     0    stevel 
    233     0    stevel /* temp files and io */
    234     0    stevel extern int				output;
    235     0    stevel extern int				ioset;
    236     0    stevel extern struct ionod	*iotemp; /* files to be deleted sometime */
    237     0    stevel extern struct ionod	*fiotemp; /* function files to be deleted sometime */
    238     0    stevel extern struct ionod	*iopend; /* documents waiting to be read at NL */
    239     0    stevel extern struct fdsave	fdmap[];
    240     0    stevel extern int savpipe;
    241     0    stevel 
    242     0    stevel /* substitution */
    243     0    stevel extern int				dolc;
    244     0    stevel extern unsigned char				**dolv;
    245     0    stevel extern struct dolnod	*argfor;
    246     0    stevel extern struct argnod	*gchain;
    247     0    stevel 
    248     0    stevel /* stak stuff */
    249     0    stevel #include		"stak.h"
    250     0    stevel 
    251     0    stevel /*
    252     0    stevel  * If non-ANSI C, make const go away.  We bring it back
    253     0    stevel  * at the end of the file to avoid side-effects.
    254     0    stevel  */
    255     0    stevel #ifndef __STDC__
    256     0    stevel #define	const
    257     0    stevel #endif
    258     0    stevel 
    259     0    stevel /* string constants */
    260     0    stevel extern const char				atline[];
    261     0    stevel extern const char				readmsg[];
    262     0    stevel extern const char				colon[];
    263     0    stevel extern const char				minus[];
    264     0    stevel extern const char				nullstr[];
    265     0    stevel extern const char				sptbnl[];
    266     0    stevel extern const char				unexpected[];
    267     0    stevel extern const char				endoffile[];
    268     0    stevel extern const char				synmsg[];
    269     0    stevel 
    270     0    stevel /* name tree and words */
    271     0    stevel extern const struct sysnod	reserved[];
    272     0    stevel extern const int				no_reserved;
    273     0    stevel extern const struct sysnod	commands[];
    274     0    stevel extern const int				no_commands;
    275     0    stevel 
    276     0    stevel extern int				wdval;
    277     0    stevel extern int				wdnum;
    278     0    stevel extern int				fndef;
    279     0    stevel extern int				nohash;
    280     0    stevel extern struct argnod	*wdarg;
    281     0    stevel extern int				wdset;
    282     0    stevel extern BOOL				reserv;
    283     0    stevel 
    284     0    stevel /* prompting */
    285     0    stevel extern const char				stdprompt[];
    286     0    stevel extern const char				supprompt[];
    287     0    stevel extern const char				profile[];
    288     0    stevel extern const char				sysprofile[];
    289     0    stevel 
    290     0    stevel /* locale testing */
    291     0    stevel extern const char			localedir[];
    292     0    stevel extern int				localedir_exists;
    293     0    stevel 
    294     0    stevel /* built in names */
    295     0    stevel extern struct namnod	fngnod;
    296     0    stevel extern struct namnod	cdpnod;
    297     0    stevel extern struct namnod	ifsnod;
    298     0    stevel extern struct namnod	homenod;
    299     0    stevel extern struct namnod	mailnod;
    300     0    stevel extern struct namnod	pathnod;
    301     0    stevel extern struct namnod	ps1nod;
    302     0    stevel extern struct namnod	ps2nod;
    303     0    stevel extern struct namnod	mchknod;
    304     0    stevel extern struct namnod	acctnod;
    305     0    stevel extern struct namnod	mailpnod;
    306     0    stevel 
    307     0    stevel /* special names */
    308     0    stevel extern unsigned char				flagadr[];
    309     0    stevel extern unsigned char				*pcsadr;
    310     0    stevel extern unsigned char				*pidadr;
    311     0    stevel extern unsigned char				*cmdadr;
    312     0    stevel 
    313     0    stevel /* names always present */
    314     0    stevel extern const char				defpath[];
    315     0    stevel extern const char				mailname[];
    316     0    stevel extern const char				homename[];
    317     0    stevel extern const char				pathname[];
    318     0    stevel extern const char				cdpname[];
    319     0    stevel extern const char				ifsname[];
    320     0    stevel extern const char				ps1name[];
    321     0    stevel extern const char				ps2name[];
    322     0    stevel extern const char				mchkname[];
    323     0    stevel extern const char				acctname[];
    324     0    stevel extern const char				mailpname[];
    325     0    stevel 
    326     0    stevel /* transput */
    327     0    stevel extern unsigned char				tmpout[];
    328   527      chin extern int 					tmpout_offset;
    329   527      chin extern unsigned int				serial;
    330     0    stevel 
    331   527      chin /*
    332   527      chin  * allow plenty of room for size for temp file name:
    333   527      chin  * "/tmp/sh"(7) + <pid> (<=6) + <unsigned int #> (<=10) + \0 (1)
    334   527      chin  */
    335   527      chin #define			TMPOUTSZ 		32
    336     0    stevel 
    337     0    stevel extern struct fileblk	*standin;
    338     0    stevel 
    339     0    stevel #define		input		(standin->fdes)
    340     0    stevel #define		eof			(standin->feof)
    341     0    stevel 
    342     0    stevel extern int				peekc;
    343     0    stevel extern int				peekn;
    344     0    stevel extern unsigned char				*comdiv;
    345     0    stevel extern
    346     0    stevel #ifdef __STDC__
    347     0    stevel const
    348     0    stevel #endif
    349     0    stevel char				devnull[];
    350     0    stevel 
    351     0    stevel /* flags */
    352     0    stevel #define			noexec		01
    353     0    stevel #define			sysflg		01
    354     0    stevel #define			intflg		02
    355     0    stevel #define			prompt		04
    356     0    stevel #define			setflg		010
    357     0    stevel #define			errflg		020
    358     0    stevel #define			ttyflg		040
    359     0    stevel #define			forked		0100
    360     0    stevel #define			oneflg		0200
    361     0    stevel #define			rshflg		0400
    362     0    stevel #define			subsh		01000
    363     0    stevel #define			stdflg		02000
    364     0    stevel #define			STDFLG		's'
    365     0    stevel #define			execpr		04000
    366     0    stevel #define			readpr		010000
    367     0    stevel #define			keyflg		020000
    368     0    stevel #define			hashflg		040000
    369     0    stevel #define			nofngflg	0200000
    370     0    stevel #define			exportflg	0400000
    371     0    stevel #define			monitorflg	01000000
    372     0    stevel #define			jcflg		02000000
    373     0    stevel #define			privflg		04000000
    374     0    stevel #define			forcexit	010000000
    375     0    stevel #define			jcoff		020000000
    376     0    stevel #define			pfshflg		040000000
    377     0    stevel 
    378     0    stevel extern long				flags;
    379     0    stevel extern int				rwait;	/* flags read waiting */
    380     0    stevel 
    381     0    stevel /* error exits from various parts of shell */
    382     0    stevel #include	<setjmp.h>
    383     0    stevel extern jmp_buf			subshell;
    384     0    stevel extern jmp_buf			errshell;
    385     0    stevel 
    386     0    stevel /* fault handling */
    387     0    stevel #include	"brkincr.h"
    388     0    stevel 
    389     0    stevel extern unsigned			brkincr;
    390     0    stevel #define		MINTRAP		0
    391     0    stevel #define		MAXTRAP		NSIG
    392     0    stevel 
    393     0    stevel #define		TRAPSET		2
    394     0    stevel #define		SIGSET		4
    395     0    stevel #define			SIGMOD		8
    396     0    stevel #define			SIGIGN		16
    397     0    stevel 
    398     0    stevel extern BOOL				trapnote;
    399     0    stevel 
    400     0    stevel /* name tree and words */
    401     0    stevel extern unsigned char				**environ;
    402     0    stevel extern unsigned char				numbuf[];
    403     0    stevel extern const char				export[];
    404     0    stevel extern const char				duperr[];
    405     0    stevel extern const char				readonly[];
    406     0    stevel 
    407     0    stevel /* execflgs */
    408     0    stevel extern int				exitval;
    409     0    stevel extern int				retval;
    410     0    stevel extern BOOL				execbrk;
    411     0    stevel extern int				loopcnt;
    412     0    stevel extern int				breakcnt;
    413     0    stevel extern int				funcnt;
    414     0    stevel extern int				tried_to_exit;
    415     0    stevel 
    416     0    stevel /* messages */
    417     0    stevel extern const char				mailmsg[];
    418     0    stevel extern const char				coredump[];
    419     0    stevel extern const char				badopt[];
    420     0    stevel extern const char				badparam[];
    421     0    stevel extern const char				unset[];
    422     0    stevel extern const char				badsub[];
    423     0    stevel extern const char				nospace[];
    424     0    stevel extern const char				nostack[];
    425     0    stevel extern const char				notfound[];
    426     0    stevel extern const char				badtrap[];
    427     0    stevel extern const char				baddir[];
    428     0    stevel extern const char				badshift[];
    429     0    stevel extern const char				restricted[];
    430     0    stevel extern const char				execpmsg[];
    431     0    stevel extern const char				notid[];
    432     0    stevel extern const char 				badulimit[];
    433     0    stevel extern const char 				ulimit[];
    434     0    stevel extern const char				wtfailed[];
    435     0    stevel extern const char				badcreate[];
    436     0    stevel extern const char				nofork[];
    437     0    stevel extern const char				noswap[];
    438     0    stevel extern const char				piperr[];
    439     0    stevel extern const char				badopen[];
    440     0    stevel extern const char				badnum[];
    441     0    stevel extern const char				badsig[];
    442     0    stevel extern const char				badid[];
    443     0    stevel extern const char				arglist[];
    444     0    stevel extern const char				txtbsy[];
    445     0    stevel extern const char				toobig[];
    446     0    stevel extern const char				badexec[];
    447     0    stevel extern const char				badfile[];
    448     0    stevel extern const char				badreturn[];
    449     0    stevel extern const char				badexport[];
    450     0    stevel extern const char				badunset[];
    451     0    stevel extern const char				nohome[];
    452     0    stevel extern const char				badperm[];
    453     0    stevel extern const char				mssgargn[];
    454     0    stevel extern const char				libacc[];
    455     0    stevel extern const char				libbad[];
    456     0    stevel extern const char				libscn[];
    457     0    stevel extern const char				libmax[];
    458     0    stevel extern const char				emultihop[];
    459     0    stevel extern const char				nulldir[];
    460     0    stevel extern const char				enotdir[];
    461     0    stevel extern const char				enoent[];
    462     0    stevel extern const char				eacces[];
    463     0    stevel extern const char				enolink[];
    464     0    stevel extern const char				exited[];
    465     0    stevel extern const char				running[];
    466     0    stevel extern const char				ambiguous[];
    467     0    stevel extern const char				nosuchjob[];
    468     0    stevel extern const char				nosuchpid[];
    469     0    stevel extern const char				nosuchpgid[];
    470     0    stevel extern const char				usage[];
    471     0    stevel extern const char				nojc[];
    472     0    stevel extern const char				killuse[];
    473     0    stevel extern const char				jobsuse[];
    474     0    stevel extern const char				stopuse[];
    475     0    stevel extern const char				ulimuse[];
    476     0    stevel extern const char				nocurjob[];
    477     0    stevel extern const char				loginsh[];
    478     0    stevel extern const char				jobsstopped[];
    479     0    stevel extern const char				jobsrunning[];
    480  2256  na195498 extern const char				nlorsemi[];
    481  2256  na195498 extern const char				signalnum[];
    482  2256  na195498 extern const char				badpwd[];
    483  2256  na195498 extern const char				badlocale[];
    484  2256  na195498 extern const char				nobracket[];
    485  2256  na195498 extern const char				noparen[];
    486  2256  na195498 extern const char				noarg[];
    487     0    stevel 
    488     0    stevel /*	'builtin' error messages	*/
    489     0    stevel 
    490     0    stevel extern const char				btest[];
    491     0    stevel extern const char				badop[];
    492     0    stevel 
    493     0    stevel #ifndef __STDC__
    494     0    stevel #undef const 					/* bring back const */
    495     0    stevel #endif
    496     0    stevel 
    497     0    stevel /*	fork constant	*/
    498     0    stevel 
    499     0    stevel #define		FORKLIM 	32
    500     0    stevel 
    501     0    stevel extern address			end[];
    502     0    stevel 
    503     0    stevel #include	"ctype.h"
    504     0    stevel #include	<ctype.h>
    505     0    stevel #include	<locale.h>
    506     0    stevel 
    507     0    stevel extern int				eflag;
    508     0    stevel extern int				ucb_builtins;
    509     0    stevel 
    510     0    stevel /*
    511     0    stevel  * Find out if it is time to go away.
    512     0    stevel  * `trapnote' is set to SIGSET when fault is seen and
    513     0    stevel  * no trap has been set.
    514     0    stevel  */
    515     0    stevel 
    516     0    stevel #define		sigchk()	if (trapnote & SIGSET)	\
    517     0    stevel 					exitsh(exitval ? exitval : SIGFAIL)
    518     0    stevel 
    519     0    stevel #define		exitset()	retval = exitval
    520     0    stevel 
    521     0    stevel /* Multibyte characters */
    522     0    stevel unsigned char *readw();
    523     0    stevel #include <stdlib.h>
    524     0    stevel #include <limits.h>
    525     0    stevel #define	MULTI_BYTE_MAX MB_LEN_MAX
    526     0    stevel 
    527     0    stevel 
    528     0    stevel #ifdef	__cplusplus
    529     0    stevel }
    530     0    stevel #endif
    531     0    stevel 
    532     0    stevel #endif	/* _DEFS_H */
    533