=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/awk/run.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- src/usr.bin/awk/run.c 1999/12/08 23:09:46 1.16 +++ src/usr.bin/awk/run.c 2001/09/08 00:12:40 1.17 @@ -1,4 +1,4 @@ -/* $OpenBSD: run.c,v 1.16 1999/12/08 23:09:46 millert Exp $ */ +/* $OpenBSD: run.c,v 1.17 2001/09/08 00:12:40 millert Exp $ */ /**************************************************************** Copyright (C) Lucent Technologies 1997 All Rights Reserved @@ -300,7 +300,7 @@ } } tempfree(fcn); - if (isexit(y) || isnext(y) || isnextfile(y)) + if (isexit(y) || isnext(y)) return y; tempfree(y); /* this can free twice! */ z = fp->retval; /* return value */ @@ -316,7 +316,8 @@ y = gettemp(); y->csub = CCOPY; /* prevents freeing until call is over */ y->nval = x->nval; /* BUG? */ - y->sval = x->sval ? tostring(x->sval) : NULL; + if (isstr(x)) + y->sval = tostring(x->sval); y->fval = x->fval; y->tval = x->tval & ~(CON|FLD|REC|DONTFREE); /* copy is not constant or field */ /* is DONTFREE right? */ @@ -730,8 +731,9 @@ if (k <= 1) { tempfree(x); tempfree(y); - if (a[2] != 0) + if (a[2] != 0) { tempfree(z); + } x = gettemp(); setsval(x, ""); return(x); @@ -823,7 +825,7 @@ for (t = fmt; (*t++ = *s) != '\0'; s++) { if (!adjbuf(&fmt, &fmtsz, MAXNUMSIZE+1+t-fmt, recsize, &t, 0)) FATAL("format item %.30s... ran format() out of memory", os); - if (isalpha(*s) && *s != 'l' && *s != 'h' && *s != 'L') + if (isalpha((uschar)*s) && *s != 'l' && *s != 'h' && *s != 'L') break; /* the ansi panoply */ if (*s == '*') { x = execute(a); @@ -1282,7 +1284,7 @@ sprintf(num, "%d", n); buf[0] = *s; buf[1] = 0; - if (isdigit(buf[0])) + if (isdigit((uschar)buf[0])) setsymtab(num, buf, atof(buf), STR|NUM, (Array *) ap->sval); else setsymtab(num, buf, 0.0, STR, (Array *) ap->sval); @@ -1307,8 +1309,9 @@ } tempfree(ap); tempfree(y); - if (a[2] != 0 && arg3type == STRING) + if (a[2] != 0 && arg3type == STRING) { tempfree(x); + } x = gettemp(); x->tval = NUM; x->fval = n; @@ -1373,7 +1376,7 @@ x = execute(a[0]); if (isbreak(x)) return True; - if (isnext(x) || isnextfile(x) || isexit(x) || isret(x)) + if (isnext(x) || isexit(x) || isret(x)) return(x); tempfree(x); x = execute(a[1]); @@ -1496,11 +1499,11 @@ buf = tostring(getsval(x)); if (t == FTOUPPER) { for (p = buf; *p; p++) - if (islower(*p)) + if (islower((uschar) *p)) *p = toupper(*p); } else { for (p = buf; *p; p++) - if (isupper(*p)) + if (isupper((uschar) *p)) *p = tolower(*p); } tempfree(x); @@ -1659,7 +1662,8 @@ n = n; x = execute(a[0]); getsval(x); - for (i = 0; i < FOPEN_MAX; i++) + stat = -1; + for (i = 0; i < FOPEN_MAX; i++) { if (files[i].fname && strcmp(x->sval, files[i].fname) == 0) { if (ferror(files[i].fp)) WARNING( "i/o error occurred on %s", files[i].fname ); @@ -1674,15 +1678,18 @@ files[i].fname = NULL; /* watch out for ref thru this */ files[i].fp = NULL; } + } tempfree(x); - return(True); + x = gettemp(); + setfval(x, (Awkfloat) stat); + return(x); } void closeall(void) { int i, stat; - for (i = 0; i < FOPEN_MAX; i++) + for (i = 0; i < FOPEN_MAX; i++) { if (files[i].fp) { if (ferror(files[i].fp)) WARNING( "i/o error occurred on %s", files[i].fname ); @@ -1693,6 +1700,7 @@ if (stat == EOF) WARNING( "i/o error occurred while closing %s", files[i].fname ); } + } } void backsub(char **pb_ptr, char **sptr_ptr);