summaryrefslogtreecommitdiffstats
path: root/contrib/one-true-awk
diff options
context:
space:
mode:
authordelphij <delphij@FreeBSD.org>2013-01-03 07:25:30 +0000
committerdelphij <delphij@FreeBSD.org>2013-01-03 07:25:30 +0000
commit2010ab2cd033db0745001efef9d9ebd78c920505 (patch)
treecbfc9f88e2b6529d0fe67b75427d8336c8d60f72 /contrib/one-true-awk
parent185d79fdec059203ed8a9c75a62f3bc5401d3240 (diff)
downloadFreeBSD-src-2010ab2cd033db0745001efef9d9ebd78c920505.zip
FreeBSD-src-2010ab2cd033db0745001efef9d9ebd78c920505.tar.gz
MFV: one-true-awk 20121220.
MFC after: 1 month
Diffstat (limited to 'contrib/one-true-awk')
-rw-r--r--contrib/one-true-awk/FIXES16
-rw-r--r--contrib/one-true-awk/main.c2
-rw-r--r--contrib/one-true-awk/makefile10
-rw-r--r--contrib/one-true-awk/proto.h4
-rw-r--r--contrib/one-true-awk/run.c5
-rw-r--r--contrib/one-true-awk/tran.c2
6 files changed, 29 insertions, 10 deletions
diff --git a/contrib/one-true-awk/FIXES b/contrib/one-true-awk/FIXES
index a708027..c78aabc 100644
--- a/contrib/one-true-awk/FIXES
+++ b/contrib/one-true-awk/FIXES
@@ -25,6 +25,22 @@ THIS SOFTWARE.
This file lists all bug fixes, changes, etc., made since the AWK book
was sent to the printers in August, 1987.
+Dec 20, 2012:
+ fiddled makefile to get correct yacc and bison flags. pick yacc
+ (linux) or bison (mac) as necessary.
+
+ added __attribute__((__noreturn__)) to a couple of lines in
+ proto.h, to silence someone's enthusiastic checker.
+
+ fixed obscure call by value bug in split(a[1],a) reported on
+ 9fans. the management of temporary values is just a mess; i
+ took a shortcut by making an extra string copy. thanks
+ to paul patience and arnold robbins for passing it on and for
+ proposed patches.
+
+ tiny fiddle in setfval to eliminate -0 results in T.expr, which
+ has irritated me for 20+ years.
+
Aug 10, 2011:
another fix to avoid core dump with delete(ARGV); again, many thanks
to ruslan ermilov.
diff --git a/contrib/one-true-awk/main.c b/contrib/one-true-awk/main.c
index 8cc7057..ab01676 100644
--- a/contrib/one-true-awk/main.c
+++ b/contrib/one-true-awk/main.c
@@ -25,7 +25,7 @@ THIS SOFTWARE.
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-const char *version = "version 20110810 (FreeBSD)";
+const char *version = "version 20121220 (FreeBSD)";
#define DEBUG
#include <stdio.h>
diff --git a/contrib/one-true-awk/makefile b/contrib/one-true-awk/makefile
index 52c7424..88f9924 100644
--- a/contrib/one-true-awk/makefile
+++ b/contrib/one-true-awk/makefile
@@ -26,15 +26,15 @@ CFLAGS = -g
CFLAGS = -O2
CFLAGS =
-CC = gcc -Wall -g
-CC = cc
CC = gcc -Wall -g -Wwrite-strings
CC = gcc -fprofile-arcs -ftest-coverage # then gcov f1.c; cat f1.c.gcov
+CC = gcc -g -Wall -pedantic
CC = gcc -O4 -Wall -pedantic -fno-strict-aliasing
-YACC = bison -y
-YACC = yacc
-YFLAGS = -d
+YACC = bison -d -y
+YACC = yacc -d -S
+#YFLAGS = -d -S
+ # -S uses sprintf in yacc parser instead of sprint
OFILES = b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o
diff --git a/contrib/one-true-awk/proto.h b/contrib/one-true-awk/proto.h
index e4de112..9a657ef 100644
--- a/contrib/one-true-awk/proto.h
+++ b/contrib/one-true-awk/proto.h
@@ -46,7 +46,7 @@ extern void freetr(Node *);
extern int hexstr(uschar **);
extern int quoted(uschar **);
extern char *cclenter(const char *);
-extern void overflo(const char *);
+extern void overflo(const char *) __attribute__((__noreturn__));
extern void cfoll(fa *, Node *);
extern int first(Node *);
extern void follow(Node *);
@@ -132,7 +132,7 @@ extern void fpecatch(int);
extern void bracecheck(void);
extern void bcheck2(int, int, int);
extern void SYNTAX(const char *, ...);
-extern void FATAL(const char *, ...);
+extern void FATAL(const char *, ...) __attribute__((__noreturn__));
extern void WARNING(const char *, ...);
extern void error(void);
extern void eprint(void);
diff --git a/contrib/one-true-awk/run.c b/contrib/one-true-awk/run.c
index 942f250..cafaff3 100644
--- a/contrib/one-true-awk/run.c
+++ b/contrib/one-true-awk/run.c
@@ -1213,13 +1213,13 @@ Cell *dopa2(Node **a, int n) /* a[0], a[1] { a[2] } */
Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */
{
Cell *x = 0, *y, *ap;
- char *s;
+ char *s, *origs;
int sep;
char *t, temp, num[50], *fs = 0;
int n, tempstat, arg3type;
y = execute(a[0]); /* source string */
- s = getsval(y);
+ origs = s = strdup(getsval(y));
arg3type = ptoi(a[3]);
if (a[2] == 0) /* fs string */
fs = *FS;
@@ -1339,6 +1339,7 @@ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */
}
tempfree(ap);
tempfree(y);
+ free(origs);
if (a[2] != 0 && arg3type == STRING) {
tempfree(x);
}
diff --git a/contrib/one-true-awk/tran.c b/contrib/one-true-awk/tran.c
index e9d7750..a9fa325 100644
--- a/contrib/one-true-awk/tran.c
+++ b/contrib/one-true-awk/tran.c
@@ -298,6 +298,8 @@ Awkfloat setfval(Cell *vp, Awkfloat f) /* set float val of a Cell */
xfree(vp->sval); /* free any previous string */
vp->tval &= ~STR; /* mark string invalid */
vp->tval |= NUM; /* mark number ok */
+ if (f == -0) /* who would have thought this possible? */
+ f = 0;
dprintf( ("setfval %p: %s = %g, t=%o\n", (void*)vp, NN(vp->nval), f, vp->tval) );
return vp->fval = f;
}
OpenPOWER on IntegriCloud