diff options
author | obrien <obrien@FreeBSD.org> | 2000-04-18 07:31:36 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2000-04-18 07:31:36 +0000 |
commit | 6d573144b323d585e9999b045a7cdfb0f3f8d491 (patch) | |
tree | 6f3237f7547194d4258d65f1e1ecc234ebd3692f /bin/csh/err.c | |
parent | a0eba154d3e138792cbfc004135e7ab7310e0e6a (diff) | |
download | FreeBSD-src-6d573144b323d585e9999b045a7cdfb0f3f8d491.zip FreeBSD-src-6d573144b323d585e9999b045a7cdfb0f3f8d491.tar.gz |
Upgrade csh.
Diffstat (limited to 'bin/csh/err.c')
-rw-r--r-- | bin/csh/err.c | 411 |
1 files changed, 0 insertions, 411 deletions
diff --git a/bin/csh/err.c b/bin/csh/err.c deleted file mode 100644 index 9eb689d..0000000 --- a/bin/csh/err.c +++ /dev/null @@ -1,411 +0,0 @@ -/*- - * Copyright (c) 1980, 1991, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)err.c 8.1 (Berkeley) 5/31/93"; -#else -static const char rcsid[] = - "$FreeBSD$"; -#endif -#endif /* not lint */ - -#include <sys/types.h> -#include <unistd.h> -#if __STDC__ -# include <stdarg.h> -#else -# include <varargs.h> -#endif - -#include "csh.h" -#include "extern.h" - -char *seterr = NULL; /* Holds last error if there was one */ - -#define ERR_FLAGS 0xf0000000 -#define ERR_NAME 0x10000000 -#define ERR_SILENT 0x20000000 -#define ERR_OLD 0x40000000 - -static char *errorlist[] = -{ -#define ERR_SYNTAX 0 - "Syntax Error", -#define ERR_NOTALLOWED 1 - "%s is not allowed", -#define ERR_WTOOLONG 2 - "Word too long", -#define ERR_LTOOLONG 3 - "$< line too long", -#define ERR_DOLZERO 4 - "No file for $0", -#define ERR_DOLQUEST 5 - "$? not allowed here", -#define ERR_INCBR 6 - "Incomplete [] modifier", -#define ERR_EXPORD 7 - "$ expansion must end before ]", -#define ERR_BADMOD 8 - "Bad : modifier in $ (%c)", -#define ERR_SUBSCRIPT 9 - "Subscript error", -#define ERR_BADNUM 10 - "Badly formed number", -#define ERR_NOMORE 11 - "No more words", -#define ERR_FILENAME 12 - "Missing file name", -#define ERR_GLOB 13 - "Internal glob error", -#define ERR_COMMAND 14 - "Command not found", -#define ERR_TOOFEW 15 - "Too few arguments", -#define ERR_TOOMANY 16 - "Too many arguments", -#define ERR_DANGER 17 - "Too dangerous to alias that", -#define ERR_EMPTYIF 18 - "Empty if", -#define ERR_IMPRTHEN 19 - "Improper then", -#define ERR_NOPAREN 20 - "Words not parenthesized", -#define ERR_NOTFOUND 21 - "%s not found", -#define ERR_MASK 22 - "Improper mask", -#define ERR_LIMIT 23 - "No such limit", -#define ERR_TOOLARGE 24 - "Argument too large", -#define ERR_SCALEF 25 - "Improper or unknown scale factor", -#define ERR_UNDVAR 26 - "Undefined variable", -#define ERR_DEEP 27 - "Directory stack not that deep", -#define ERR_BADSIG 28 - "Bad signal number", -#define ERR_UNKSIG 29 - "Unknown signal; kill -l lists signals", -#define ERR_VARBEGIN 30 - "Variable name must begin with a letter", -#define ERR_VARTOOLONG 31 - "Variable name too long", -#define ERR_VARALNUM 32 - "Variable name must contain alphanumeric characters", -#define ERR_JOBCONTROL 33 - "No job control in this shell", -#define ERR_EXPRESSION 34 - "Expression Syntax", -#define ERR_NOHOMEDIR 35 - "No home directory", -#define ERR_CANTCHANGE 36 - "Can't change to home directory", -#define ERR_NULLCOM 37 - "Invalid null command", -#define ERR_ASSIGN 38 - "Assignment missing expression", -#define ERR_UNKNOWNOP 39 - "Unknown operator", -#define ERR_AMBIG 40 - "Ambiguous", -#define ERR_EXISTS 41 - "%s: File exists", -#define ERR_INTR 42 - "Interrupted", -#define ERR_RANGE 43 - "Subscript out of range", -#define ERR_OVERFLOW 44 - "Line overflow", -#define ERR_VARMOD 45 - "Unknown variable modifier", -#define ERR_NOSUCHJOB 46 - "No such job", -#define ERR_TERMINAL 47 - "Can't from terminal", -#define ERR_NOTWHILE 48 - "Not in while/foreach", -#define ERR_NOPROC 49 - "No more processes", -#define ERR_NOMATCH 50 - "No match", -#define ERR_MISSING 51 - "Missing %c", -#define ERR_UNMATCHED 52 - "Unmatched %c", -#define ERR_NOMEM 53 - "Out of memory", -#define ERR_PIPE 54 - "Can't make pipe", -#define ERR_SYSTEM 55 - "%s: %s", -#define ERR_STRING 56 - "%s", -#define ERR_JOBS 57 - "Usage: jobs [ -l ]", -#define ERR_JOBARGS 58 - "Arguments should be jobs or process id's", -#define ERR_JOBCUR 59 - "No current job", -#define ERR_JOBPREV 60 - "No previous job", -#define ERR_JOBPAT 61 - "No job matches pattern", -#define ERR_NESTING 62 - "Fork nesting > %d; maybe `...` loop", -#define ERR_JOBCTRLSUB 63 - "No job control in subshells", -#define ERR_BADPLPS 64 - "Badly placed ()'s", -#define ERR_STOPPED 65 - "%sThere are suspended jobs", -#define ERR_NODIR 66 - "No other directory", -#define ERR_EMPTY 67 - "Directory stack empty", -#define ERR_BADDIR 68 - "Bad directory", -#define ERR_DIRUS 69 - "Usage: %s [-lvn]%s", -#define ERR_HFLAG 70 - "No operand for -h flag", -#define ERR_NOTLOGIN 71 - "Not a login shell", -#define ERR_DIV0 72 - "Division by 0", -#define ERR_MOD0 73 - "Mod by 0", -#define ERR_BADSCALE 74 - "Bad scaling; did you mean \"%s\"?", -#define ERR_SUSPLOG 75 - "Can't suspend a login shell (yet)", -#define ERR_UNKUSER 76 - "Unknown user: %s", -#define ERR_NOHOME 77 - "No $home variable set", -#define ERR_HISTUS 78 - "Usage: history [-rh] [# number of events]", -#define ERR_SPDOLLT 79 - "$, ! or < not allowed with $# or $?", -#define ERR_NEWLINE 80 - "Newline in variable name", -#define ERR_SPSTAR 81 - "* not allowed with $# or $?", -#define ERR_DIGIT 82 - "$?<digit> or $#<digit> not allowed", -#define ERR_VARILL 83 - "Illegal variable name", -#define ERR_NLINDEX 84 - "Newline in variable index", -#define ERR_EXPOVFL 85 - "Expansion buffer overflow", -#define ERR_VARSYN 86 - "Variable syntax", -#define ERR_BADBANG 87 - "Bad ! form", -#define ERR_NOSUBST 88 - "No previous substitute", -#define ERR_BADSUBST 89 - "Bad substitute", -#define ERR_LHS 90 - "No previous left hand side", -#define ERR_RHSLONG 91 - "Right hand side too long", -#define ERR_BADBANGMOD 92 - "Bad ! modifier: %c", -#define ERR_MODFAIL 93 - "Modifier failed", -#define ERR_SUBOVFL 94 - "Substitution buffer overflow", -#define ERR_BADBANGARG 95 - "Bad ! arg selector", -#define ERR_NOSEARCH 96 - "No prev search", -#define ERR_NOEVENT 97 - "%s: Event not found", -#define ERR_TOOMANYRP 98 - "Too many )'s", -#define ERR_TOOMANYLP 99 - "Too many ('s", -#define ERR_BADPLP 100 - "Badly placed (", -#define ERR_MISRED 101 - "Missing name for redirect", -#define ERR_OUTRED 102 - "Ambiguous output redirect", -#define ERR_REDPAR 103 - "Can't << within ()'s", -#define ERR_INRED 104 - "Ambiguous input redirect", -#define ERR_ALIASLOOP 105 - "Alias loop", -#define ERR_HISTLOOP 106 - "!# History loop", -#define ERR_ARCH 107 - "%s: %s. Wrong Architecture", -#define ERR_FILEINQ 108 - "Malformed file inquiry", -#define ERR_SELOVFL 109 - "Selector overflow", -#define ERR_INVALID 110 - "Invalid Error" -}; - -/* - * The parser and scanner set up errors for later by calling seterr, - * which sets the variable err as a side effect; later to be tested, - * e.g. in process. - */ -void -#if __STDC__ -seterror(int id, ...) -#else -seterror(id, va_alist) - int id; - va_dcl -#endif -{ - if (seterr == 0) { - char berr[BUFSIZ]; - va_list va; - -#if __STDC__ - va_start(va, id); -#else - va_start(va); -#endif - if (id < 0 || id > sizeof(errorlist) / sizeof(errorlist[0])) - id = ERR_INVALID; - vsnprintf(berr, sizeof(berr), errorlist[id], va); - va_end(va); - - seterr = strsave(berr); - } -} - -/* - * Print the error with the given id. - * - * Special ids: - * ERR_SILENT: Print nothing. - * ERR_OLD: Print the previously set error if one was there. - * otherwise return. - * ERR_NAME: If this bit is set, print the name of the function - * in bname - * - * This routine always resets or exits. The flag haderr - * is set so the routine who catches the unwind can propagate - * it if they want. - * - * Note that any open files at the point of error will eventually - * be closed in the routine process in sh.c which is the only - * place error unwinds are ever caught. - */ -void -#if __STDC__ -stderror(int id, ...) -#else -stderror(id, va_alist) - int id; - va_dcl -#endif -{ - va_list va; - Char **v; - int flags = id & ERR_FLAGS; - - id &= ~ERR_FLAGS; - - if ((flags & ERR_OLD) && seterr == NULL) - return; - - if (id < 0 || id > sizeof(errorlist) / sizeof(errorlist[0])) - id = ERR_INVALID; - - (void) fflush(cshout); - (void) fflush(csherr); - haderr = 1; /* Now to diagnostic output */ - timflg = 0; /* This isn't otherwise reset */ - - - if (!(flags & ERR_SILENT)) { - if (flags & ERR_NAME) - (void) fprintf(csherr, "%s: ", bname); - if ((flags & ERR_OLD)) - /* Old error. */ - (void) fprintf(csherr, "%s.\n", seterr); - else { -#if __STDC__ - va_start(va, id); -#else - va_start(va); -#endif - (void) vfprintf(csherr, errorlist[id], va); - va_end(va); - (void) fprintf(csherr, ".\n"); - } - } - - if (seterr) { - xfree((ptr_t) seterr); - seterr = NULL; - } - - if ((v = pargv) != NULL) - pargv = 0, blkfree(v); - if ((v = gargv) != NULL) - gargv = 0, blkfree(v); - - (void) fflush(cshout); - (void) fflush(csherr); - didfds = 0; /* Forget about 0,1,2 */ - /* - * Go away if -e or we are a child shell - */ - if (exiterr || child) - xexit(1); - - /* - * Reset the state of the input. This buffered seek to end of file will - * also clear the while/foreach stack. - */ - btoeof(); - - set(STRstatus, Strsave(STR1)); - if (tpgrp > 0) - (void) tcsetpgrp(FSHTTY, tpgrp); - reset(); /* Unwind */ -} |