MFV: one-true-awk 20121220.
MFC after: 1 month
This commit is contained in:
parent
185d79fdec
commit
2010ab2cd0
@ -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.
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user