summaryrefslogtreecommitdiff
path: root/usr.bin/awk
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2022-01-27 16:58:38 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2022-01-27 16:58:38 +0000
commit2c36c83ee15dd3f136155d5f866415691d0acf11 (patch)
treed85ebe8876d71cca09c7b3f467a1127b15eb1216 /usr.bin/awk
parentc9e131110141b714133f7a23612504acb1b61af2 (diff)
Update awk to Dec 8, 2021 version.
Fixes error handling in closefile() and closeall(). Long standing warnings had been made fatal and some fatal errors went undetected.
Diffstat (limited to 'usr.bin/awk')
-rw-r--r--usr.bin/awk/FIXES7
-rw-r--r--usr.bin/awk/README.md11
-rw-r--r--usr.bin/awk/main.c4
-rw-r--r--usr.bin/awk/run.c39
4 files changed, 40 insertions, 21 deletions
diff --git a/usr.bin/awk/FIXES b/usr.bin/awk/FIXES
index a9b01b1a135..bf18508ff19 100644
--- a/usr.bin/awk/FIXES
+++ b/usr.bin/awk/FIXES
@@ -1,4 +1,4 @@
-/* $OpenBSD: FIXES,v 1.42 2021/11/12 15:16:58 millert Exp $ */
+/* $OpenBSD: FIXES,v 1.43 2022/01/27 16:58:37 millert Exp $ */
/****************************************************************
Copyright (C) Lucent Technologies 1997
All Rights Reserved
@@ -26,6 +26,11 @@ THIS SOFTWARE.
This file lists all bug fixes, changes, etc., made since the AWK book
was sent to the printers in August, 1987.
+December 8, 2021:
+ The error handling in closefile and closeall was mangled. Long
+ standing warnings had been made fatal and some fatal errors went
+ undetected. Thanks to Miguel Pineiro Jr. <mpj@pineiro.cc>.
+
Nov 03, 2021:
getline accesses uninitialized data after getrec()
returns 0 on EOF and leaves the contents of buf unchanged.
diff --git a/usr.bin/awk/README.md b/usr.bin/awk/README.md
index f90de30cd09..c50ac08d547 100644
--- a/usr.bin/awk/README.md
+++ b/usr.bin/awk/README.md
@@ -1,4 +1,4 @@
-$OpenBSD: README.md,v 1.5 2021/11/02 15:29:41 millert Exp $
+$OpenBSD: README.md,v 1.6 2022/01/27 16:58:37 millert Exp $
# The One True Awk
@@ -37,7 +37,7 @@ in `FIXES`. If you distribute this code further, please please please
distribute `FIXES` with it.
If you find errors, please report them
-to bwk@cs.princeton.edu.
+to the current maintainer, ozan.yigit@gmail.com.
Please _also_ open an issue in the GitHub issue tracker, to make
it easy to track issues.
Thanks.
@@ -92,7 +92,7 @@ move this to some place like `/usr/bin/awk`.
If your system does not have `yacc` or `bison` (the GNU
equivalent), you need to install one of them first.
-NOTE: This version uses ANSI C (C 99), as you should also. We have
+NOTE: This version uses ISO/IEC C99, as you should also. We have
compiled this without any changes using `gcc -Wall` and/or local C
compilers on a variety of systems, but new systems or compilers
may raise some new complaint; reports of difficulties are
@@ -111,7 +111,7 @@ More generally, turning on optimization can significantly improve
## A Note About Releases
-We don't do releases.
+We don't usually do releases.
## A Note About Maintenance
@@ -122,4 +122,5 @@ is not at the top of our priority list.
#### Last Updated
-Sat Jul 25 14:00:07 EDT 2021
+Sun 23 Jan 2022 03:48:01 PM EST
+
diff --git a/usr.bin/awk/main.c b/usr.bin/awk/main.c
index e5705999716..9d4d1a48ebb 100644
--- a/usr.bin/awk/main.c
+++ b/usr.bin/awk/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.50 2021/11/12 15:16:58 millert Exp $ */
+/* $OpenBSD: main.c,v 1.51 2022/01/27 16:58:37 millert Exp $ */
/****************************************************************
Copyright (C) Lucent Technologies 1997
All Rights Reserved
@@ -23,7 +23,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
****************************************************************/
-const char *version = "version 20211103";
+const char *version = "version 20211208";
#define DEBUG
#include <stdio.h>
diff --git a/usr.bin/awk/run.c b/usr.bin/awk/run.c
index 128a7eaead6..1a86cec5fea 100644
--- a/usr.bin/awk/run.c
+++ b/usr.bin/awk/run.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: run.c,v 1.70 2021/11/01 18:28:24 millert Exp $ */
+/* $OpenBSD: run.c,v 1.71 2022/01/27 16:58:37 millert Exp $ */
/****************************************************************
Copyright (C) Lucent Technologies 1997
All Rights Reserved
@@ -1984,8 +1984,8 @@ const char *filename(FILE *fp)
return "???";
}
- Cell *closefile(Node **a, int n)
- {
+Cell *closefile(Node **a, int n)
+{
Cell *x;
size_t i;
bool stat;
@@ -1996,8 +1996,15 @@ const char *filename(FILE *fp)
for (i = 0; i < nfiles; i++) {
if (!files[i].fname || strcmp(x->sval, files[i].fname) != 0)
continue;
- if (ferror(files[i].fp))
- FATAL("i/o error occurred on %s", files[i].fname);
+ if (files[i].mode == GT || files[i].mode == '|')
+ fflush(files[i].fp);
+ if (ferror(files[i].fp)) {
+ if ((files[i].mode == GT && files[i].fp != stderr)
+ || files[i].mode == '|')
+ FATAL("write error on %s", files[i].fname);
+ else
+ WARNING("i/o error occurred on %s", files[i].fname);
+ }
if (files[i].fp == stdin || files[i].fp == stdout ||
files[i].fp == stderr)
stat = freopen("/dev/null", "r+", files[i].fp) == NULL;
@@ -2006,7 +2013,7 @@ const char *filename(FILE *fp)
else
stat = fclose(files[i].fp) == EOF;
if (stat)
- FATAL("i/o error occurred closing %s", files[i].fname);
+ WARNING("i/o error occurred closing %s", files[i].fname);
if (i > 2) /* don't do /dev/std... */
xfree(files[i].fname);
files[i].fname = NULL; /* watch out for ref thru this */
@@ -2017,7 +2024,7 @@ const char *filename(FILE *fp)
x = gettemp();
setfval(x, (Awkfloat) (stat ? -1 : 0));
return(x);
- }
+}
void closeall(void)
{
@@ -2027,18 +2034,24 @@ void closeall(void)
for (i = 0; i < nfiles; i++) {
if (! files[i].fp)
continue;
- if (ferror(files[i].fp))
- FATAL( "i/o error occurred on %s", files[i].fname );
- if (files[i].fp == stdin)
+ if (files[i].mode == GT || files[i].mode == '|')
+ fflush(files[i].fp);
+ if (ferror(files[i].fp)) {
+ if ((files[i].mode == GT && files[i].fp != stderr)
+ || files[i].mode == '|')
+ FATAL("write error on %s", files[i].fname);
+ else
+ WARNING("i/o error occurred on %s", files[i].fname);
+ }
+ if (files[i].fp == stdin || files[i].fp == stdout ||
+ files[i].fp == stderr)
continue;
if (files[i].mode == '|' || files[i].mode == LE)
stat = pclose(files[i].fp) == -1;
- else if (files[i].fp == stdout || files[i].fp == stderr)
- stat = fflush(files[i].fp) == EOF;
else
stat = fclose(files[i].fp) == EOF;
if (stat)
- FATAL( "i/o error occurred while closing %s", files[i].fname );
+ WARNING("i/o error occurred while closing %s", files[i].fname);
}
}