=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/awk/main.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- src/usr.bin/awk/main.c 1997/01/20 19:43:22 1.3 +++ src/usr.bin/awk/main.c 1997/08/25 16:17:12 1.4 @@ -1,5 +1,6 @@ +/* $OpenBSD: main.c,v 1.4 1997/08/25 16:17:12 kstailey Exp $ */ /**************************************************************** -Copyright (C) AT&T and Lucent Technologies 1996 +Copyright (C) Lucent Technologies 1997 All Rights Reserved Permission to use, copy, modify, and distribute this software and @@ -7,22 +8,22 @@ granted, provided that the above copyright notice appear in all copies and that both that the copyright notice and this permission notice and warranty disclaimer appear in supporting -documentation, and that the names of AT&T or Lucent Technologies -or any of their entities not be used in advertising or publicity -pertaining to distribution of the software without specific, -written prior permission. +documentation, and that the name Lucent Technologies or any of +its entities not be used in advertising or publicity pertaining +to distribution of the software without specific, written prior +permission. -AT&T AND LUCENT DISCLAIM ALL WARRANTIES WITH REGARD TO THIS -SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL AT&T OR LUCENT OR ANY OF THEIR -ENTITIES BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL -DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. +LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER +IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. ****************************************************************/ -char *version = "version June 29, 1996"; +char *version = "version 970821"; #define DEBUG #include @@ -32,7 +33,7 @@ #include #include #include "awk.h" -#include "awkgram.h" +#include "ytab.h" extern char **environ; extern int nfields; @@ -49,6 +50,8 @@ int npfile = 0; /* number of filenames */ int curpfile = 0; /* current filename */ +int safe = 0; /* 1 => "safe" mode */ + int main(int argc, char *argv[]) { char *fs = NULL, *marg; @@ -61,20 +64,23 @@ else cmdname = argv[0]; if (argc == 1) { - fprintf(stderr, "Usage: %s [-f programfile | 'program'] [-Ffieldsep] [-v var=value] [-mf n] [-mr n] [files]\n", cmdname); + fprintf(stderr, "Usage: %s [-f programfile | 'program'] [-Ffieldsep] [-v var=value] [files]\n", cmdname); exit(1); } - gs = newGstring(); /* for lex */ signal(SIGFPE, fpecatch); yyin = NULL; symtab = makesymtab(NSYMTAB); while (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\0') { - if (strcmp((char *) argv[1], "--") == 0) { /* explicit end of args */ + if (strcmp(argv[1], "--") == 0) { /* explicit end of args */ argc--; argv++; break; } switch (argv[1][1]) { + case 's': + if (strcmp(argv[1], "-safe") == 0) + safe = 1; + break; case 'f': /* next argument is program filename */ argc--; argv++; @@ -85,13 +91,13 @@ case 'F': /* set field separator */ if (argv[1][2] != 0) { /* arg is -Fsomething */ if (argv[1][2] == 't' && argv[1][3] == 0) /* wart: t=>\t */ - fs = (char *) "\t"; + fs = "\t"; else if (argv[1][2] != 0) fs = &argv[1][2]; } else { /* arg is -F something */ argc--; argv++; if (argc > 1 && argv[1][0] == 't' && argv[1][1] == 0) /* wart: t=>\t */ - fs = (char *) "\t"; + fs = "\t"; else if (argc > 1 && argv[1][0] != 0) fs = &argv[1][0]; } @@ -103,6 +109,7 @@ setclvar(argv[1]); break; case 'm': /* more memory: -mr=record, -mf=fields */ + /* no longer needed */ marg = argv[1]; if (argv[1][3]) temp = atoi(&argv[1][3]); @@ -136,7 +143,7 @@ exit(0); ERROR "no program given" FATAL; } - dprintf( ("program = |%s|\n", argv[1]) ); + dprintf( ("program = |%s|\n", argv[1]) ); lexprog = argv[1]; argc--; argv++; @@ -145,13 +152,14 @@ syminit(); compile_time = 1; argv[0] = cmdname; /* put prog name at front of arglist */ - dprintf( ("argc=%d, argv[0]=%s\n", argc, argv[0]) ); + dprintf( ("argc=%d, argv[0]=%s\n", argc, argv[0]) ); arginit(argc, argv); - envinit(environ); + if (!safe) + envinit(environ); yyparse(); if (fs) - *FS = tostring(qstring(fs, '\0')); - dprintf( ("errorflag=%d\n", errorflag) ); + *FS = qstring(fs, '\0'); + dprintf( ("errorflag=%d\n", errorflag) ); if (errorflag == 0) { compile_time = 0; run(winner); @@ -168,9 +176,9 @@ if (yyin == NULL) { if (curpfile >= npfile) return EOF; - if (strcmp((char *) pfile[curpfile], "-") == 0) + if (strcmp(pfile[curpfile], "-") == 0) yyin = stdin; - else if ((yyin = fopen((char *) pfile[curpfile], "r")) == NULL) + else if ((yyin = fopen(pfile[curpfile], "r")) == NULL) ERROR "can't open file %s", pfile[curpfile] FATAL; } if ((c = getc(yyin)) != EOF)