Home | History | Annotate | Download | only in sh
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 
     22 /*
     23  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
     24  * Use is subject to license terms.
     25  */
     26 
     27 /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     28 /*	  All Rights Reserved  	*/
     29 
     30 
     31 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     32 /*
     33  *	UNIX shell
     34  */
     35 
     36 
     37 #include	"defs.h"
     38 #include	"sym.h"
     39 
     40 /*
     41  * error messages
     42  */
     43 #ifndef __STDC__
     44 #define const
     45 #endif
     46 
     47 const char	badopt[]	= "bad option(s)";
     48 const char	mailmsg[]	= "you have mail\n";
     49 const char	nospace[]	= "no space";
     50 const char	nostack[]	= "no stack space";
     51 const char	synmsg[]	= "syntax error";
     52 
     53 const char	badnum[]	= "bad number";
     54 const char	badsig[]	= "bad signal";
     55 const char	badid[]		= "invalid id";
     56 const char	badparam[]	= "parameter null or not set";
     57 const char	unset[]		= "parameter not set";
     58 const char	badsub[]	= "bad substitution";
     59 const char	badcreate[]	= "cannot create";
     60 const char	nofork[]	= "fork failed - too many processes";
     61 const char	noswap[]	= "cannot fork: no swap space";
     62 const char	restricted[]	= "restricted";
     63 const char	piperr[]	= "cannot make pipe";
     64 const char	badopen[]	= "cannot open";
     65 const char	coredump[]	= " - core dumped";
     66 const char	arglist[]	= "arg list too long";
     67 const char	txtbsy[]	= "text busy";
     68 const char	toobig[]	= "too big";
     69 const char	badexec[]	= "cannot execute";
     70 const char	notfound[]	= "not found";
     71 const char	badfile[]	= "bad file number";
     72 const char	badshift[]	= "cannot shift";
     73 const char	baddir[]	= "bad directory";
     74 const char	badtrap[]	= "bad trap";
     75 const char	wtfailed[]	= "is read only";
     76 const char	notid[]		= "is not an identifier";
     77 const char 	badulimit[]	= "exceeds allowable limit";
     78 const char	badreturn[] 	= "cannot return when not in function";
     79 const char	badexport[] 	= "cannot export functions";
     80 const char	badunset[] 	= "cannot unset";
     81 const char	nohome[]	= "no home directory";
     82 const char 	badperm[]	= "execute permission denied";
     83 const char	longpwd[]	= "sh error: pwd too long";
     84 const char	mssgargn[]	= "missing arguments";
     85 const char	libacc[] 	= "can't access a needed shared library";
     86 const char	libbad[]	= "accessing a corrupted shared library";
     87 const char	libscn[]	= ".lib section in a.out corrupted";
     88 const char	libmax[]	= "attempting to link in too many libs";
     89 const char	emultihop[]	= "Multihop attempted";
     90 const char	nulldir[]	= "null directory";
     91 const char	enotdir[]	= "not a directory";
     92 const char	enoent[]	= "does not exist";
     93 const char	eacces[]	= "permission denied";
     94 const char	enolink[]	= "remote link inactive";
     95 const char	exited[]	= "Done";
     96 const char	running[]	= "Running";
     97 const char	ambiguous[]	= "ambiguous";
     98 const char	usage[]		= "usage";
     99 const char	nojc[]		= "no job control";
    100 const char	stopuse[]	= "stop id ...";
    101 const char	ulimuse[]	= "ulimit [ -HSacdfnstv ] [ limit ]";
    102 const char	killuse[]	= "kill [ [ -sig ] id ... | -l ]";
    103 const char	jobsuse[]	= "jobs [ [ -l | -p ] [ id ... ] | -x cmd ]";
    104 const char	nosuchjob[]	= "no such job";
    105 const char	nosuchpid[]	= "no such process";
    106 const char	nosuchpgid[]	= "no such process group";
    107 const char	nocurjob[]	= "no current job";
    108 const char	jobsstopped[]	= "there are stopped jobs";
    109 const char	jobsrunning[]	= "there are running jobs";
    110 const char	loginsh[]	= "cannot stop login shell";
    111 const char	nlorsemi[]	= "newline or ;";
    112 const char	signalnum[]	= "Signal ";
    113 const char	badpwd[]	= "cannot determine current directory";
    114 const char	badlocale[]	= "couldn't set locale correctly\n";
    115 const char	nobracket[]	= "] missing";
    116 const char	noparen[]	= ") expected";
    117 const char	noarg[]		= "argument expected";
    118 
    119 /*
    120  * messages for 'builtin' functions
    121  */
    122 const char	btest[]		= "test";
    123 const char	badop[]		= "unknown operator ";
    124 /*
    125  * built in names
    126  */
    127 const char	pathname[]	= "PATH";
    128 const char	cdpname[]	= "CDPATH";
    129 const char	homename[]	= "HOME";
    130 const char	mailname[]	= "MAIL";
    131 const char	ifsname[]	= "IFS";
    132 const char	ps1name[]	= "PS1";
    133 const char	ps2name[]	= "PS2";
    134 const char	mchkname[]	= "MAILCHECK";
    135 const char	acctname[]  	= "SHACCT";
    136 const char	mailpname[]	= "MAILPATH";
    137 
    138 /*
    139  * string constants
    140  */
    141 const char	nullstr[]	= "";
    142 const char	sptbnl[]	= " \t\n";
    143 const char	defpath[]	= "/usr/bin:";
    144 const char	colon[]		= ": ";
    145 const char	minus[]		= "-";
    146 const char	endoffile[]	= "end of file";
    147 const char	unexpected[] 	= " unexpected";
    148 const char	atline[]	= " at line ";
    149 const char	devnull[]	= "/dev/null";
    150 const char	execpmsg[]	= "+ ";
    151 const char	readmsg[]	= "> ";
    152 const char	stdprompt[]	= "$ ";
    153 const char	supprompt[]	= "# ";
    154 const char	profile[]	= ".profile";
    155 const char	sysprofile[]	= "/etc/profile";
    156 
    157 /*
    158  * locale testing
    159  */
    160 const char	localedir[]	= "/usr/lib/locale";
    161 int		localedir_exists;
    162 
    163 /*
    164  * tables
    165  */
    166 
    167 const struct sysnod reserved[] =
    168 {
    169 	{ "case",	CASYM	},
    170 	{ "do",		DOSYM	},
    171 	{ "done",	ODSYM	},
    172 	{ "elif",	EFSYM	},
    173 	{ "else",	ELSYM	},
    174 	{ "esac",	ESSYM	},
    175 	{ "fi",		FISYM	},
    176 	{ "for",	FORSYM	},
    177 	{ "if",		IFSYM	},
    178 	{ "in",		INSYM	},
    179 	{ "then",	THSYM	},
    180 	{ "until",	UNSYM	},
    181 	{ "while",	WHSYM	},
    182 	{ "{",		BRSYM	},
    183 	{ "}",		KTSYM	}
    184 };
    185 
    186 const int no_reserved = sizeof(reserved)/sizeof(struct sysnod);
    187 
    188 const char	export[] = "export";
    189 const char	readonly[] = "readonly";
    190 
    191 
    192 const struct sysnod commands[] =
    193 {
    194 	{ ".",		SYSDOT	},
    195 	{ ":",		SYSNULL	},
    196 
    197 #ifndef RES
    198 	{ "[",		SYSTST },
    199 #endif
    200 	{ "bg",		SYSFGBG },
    201 	{ "break",	SYSBREAK },
    202 	{ "cd",		SYSCD	},
    203 	{ "chdir",	SYSCD	},
    204 	{ "continue",	SYSCONT	},
    205 	{ "echo",	SYSECHO },
    206 	{ "eval",	SYSEVAL	},
    207 	{ "exec",	SYSEXEC	},
    208 	{ "exit",	SYSEXIT	},
    209 	{ "export",	SYSXPORT },
    210 	{ "fg",		SYSFGBG },
    211 	{ "getopts",	SYSGETOPT },
    212 	{ "hash",	SYSHASH	},
    213 	{ "jobs",	SYSJOBS },
    214 	{ "kill",	SYSKILL },
    215 #ifdef RES
    216 	{ "login",	SYSLOGIN },
    217 	{ "newgrp",	SYSLOGIN },
    218 #else
    219 	{ "newgrp",	SYSNEWGRP },
    220 #endif
    221 
    222 	{ "pwd",	SYSPWD },
    223 	{ "read",	SYSREAD	},
    224 	{ "readonly",	SYSRDONLY },
    225 	{ "return",	SYSRETURN },
    226 	{ "set",	SYSSET	},
    227 	{ "shift",	SYSSHFT	},
    228 	{ "stop",	SYSSTOP	},
    229 	{ "suspend",	SYSSUSP},
    230 	{ "test",	SYSTST },
    231 	{ "times",	SYSTIMES },
    232 	{ "trap",	SYSTRAP	},
    233 	{ "type",	SYSTYPE },
    234 
    235 
    236 #ifndef RES
    237 	{ "ulimit",	SYSULIMIT },
    238 	{ "umask",	SYSUMASK },
    239 #endif
    240 
    241 	{ "unset", 	SYSUNS },
    242 	{ "wait",	SYSWAIT	}
    243 };
    244 
    245 const int no_commands = sizeof(commands)/sizeof(struct sysnod);
    246 
    247