📄 sh.err.c
字号:
#ifndef lintstatic char *sccsid = "@(#)sh.err.c 4.2 (ULTRIX) 8/13/90";#endif/************************************************************************ * * * Copyright (c) 1988 by * * Digital Equipment Corporation, Maynard, MA * * All rights reserved. * * * * This software is furnished under a license and may be used and * * copied only in accordance with the terms of such license and * * with the inclusion of the above copyright notice. This * * software or any other copies thereof may not be provided or * * otherwise made available to any other person. No title to and * * ownership of the software is hereby transferred. * * * * The information in this software is subject to change without * * notice and should not be construed as a commitment by Digital * * Equipment Corporation. * * * * Digital assumes no responsibility for the use or reliability * * of its software on equipment which is not supplied by Digital. * * * ************************************************************************//* ------------------------------------------------------------------ *//* | Copyright Unpublished, MIPS Computer Systems, Inc. All Rights | *//* | Reserved. This software contains proprietary and confidential | *//* | information of MIPS and its suppliers. Use, disclosure or | *//* | reproduction is prohibited without the prior express written | *//* | consent of MIPS. | *//* ------------------------------------------------------------------ *//* $Header: sh.err.c,v 1.4 86/07/29 11:20:09 dce Exp $ */#include "sh.h"#include <sys/ioctl.h>/* * C Shell * * Modification History * * 001 - Bob Fontaine - Fri Jun 22 09:53:01 EDT 1990 * Changed call of internal printf to csh_printf to avoid conflict * with stdio library routine. */bool errspl; /* Argument to error was spliced by seterr2 */char one[2] = { '1', 0 };char *onev[2] = { one, NOSTR };/* * Print error string s with optional argument arg. * This routine always resets or exits. The flag haderr * is set so the routine who catches the unwind can propogate * 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. *//*VARARGS1*/error(s, arg) char *s;{ register char **v; register char *ep; /* * Must flush before we print as we wish output before the error * to go on (some form of) standard output, while output after * goes on (some form of) diagnostic output. * If didfds then output will go to 1/2 else to FSHOUT/FSHDIAG. * See flush in sh.print.c. */ flush(); haderr = 1; /* Now to diagnostic output */ timflg = 0; /* This isn't otherwise reset */ if (v = pargv) pargv = 0, blkfree(v); if (v = gargv) gargv = 0, blkfree(v); /* * A zero arguments causes no printing, else print * an error diagnostic here. */ if (s) csh_printf(s, arg), csh_printf(".\n"); /* 001 RNF */ didfds = 0; /* Forget about 0,1,2 */ if ((ep = err) && errspl) { errspl = 0; xfree(ep); } errspl = 0; /* * Go away if -e or we are a child shell */ if (exiterr || child) { exit(1); } /* * Reset the state of the input. * This buffered seek to end of file will also * clear the while/foreach stack. */ btoeof(); setq("status", onev, &shvhed); if (tpgrp > 0) (void) ioctl(FSHTTY, TIOCSPGRP, (char *)&tpgrp); reset(); /* Unwind */}/* * Perror is the shells version of perror which should otherwise * never be called. */Perror(s) char *s;{ /* * Perror uses unit 2, thus if we didn't set up the fd's * we must set up unit 2 now else the diagnostic will disappear */ if (!didfds) { register int oerrno = errno; (void) dcopy(SHDIAG, 2); errno = oerrno; } perror(s); error(NOSTR); /* To exit or unwind */}bferr(cp) char *cp;{ flush(); haderr = 1; csh_printf("%s: ", bname); /* 001 RNF */ error(cp);}/* * 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. */seterr(s) char *s;{ if (err == 0) err = s, errspl = 0;}/* Set err to a splice of cp and dp, to be freed later in error() */seterr2(cp, dp) char *cp, *dp;{ if (err) return; err = strspl(cp, dp); errspl++;}/* Set err to a splice of cp with a string form of character d */seterrc(cp, d) char *cp, d;{ char chbuf[2]; chbuf[0] = d; chbuf[1] = 0; seterr2(cp, chbuf);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -