Module Name:    src
Committed By:   christos
Date:           Sat Dec 29 02:44:26 UTC 2012

Modified Files:
        src/external/historical/nawk/dist: awkgram.y b.c lib.c main.c makefile
            proctab.c proto.h run.c tran.c

Log Message:
merge 2012-12-20


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/external/historical/nawk/dist/awkgram.y \
    src/external/historical/nawk/dist/b.c \
    src/external/historical/nawk/dist/proctab.c
cvs rdiff -u -r1.5 -r1.6 src/external/historical/nawk/dist/lib.c \
    src/external/historical/nawk/dist/run.c
cvs rdiff -u -r1.7 -r1.8 src/external/historical/nawk/dist/main.c
cvs rdiff -u -r1.2 -r1.3 src/external/historical/nawk/dist/makefile
cvs rdiff -u -r1.6 -r1.7 src/external/historical/nawk/dist/proto.h \
    src/external/historical/nawk/dist/tran.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/historical/nawk/dist/awkgram.y
diff -u src/external/historical/nawk/dist/awkgram.y:1.3 src/external/historical/nawk/dist/awkgram.y:1.4
--- src/external/historical/nawk/dist/awkgram.y:1.3	Sat May 28 11:13:04 2011
+++ src/external/historical/nawk/dist/awkgram.y	Fri Dec 28 21:44:26 2012
@@ -179,8 +179,8 @@ pa_pat:
 pa_stat:
 	  pa_pat			{ $$ = stat2(PASTAT, $1, stat2(PRINT, rectonode(), NIL)); }
 	| pa_pat lbrace stmtlist '}'	{ $$ = stat2(PASTAT, $1, $3); }
-	| pa_pat ',' pa_pat		{ $$ = pa2stat($1, $3, stat2(PRINT, rectonode(), NIL)); }
-	| pa_pat ',' pa_pat lbrace stmtlist '}'	{ $$ = pa2stat($1, $3, $5); }
+	| pa_pat ',' opt_nl pa_pat		{ $$ = pa2stat($1, $4, stat2(PRINT, rectonode(), NIL)); }
+	| pa_pat ',' opt_nl pa_pat lbrace stmtlist '}'	{ $$ = pa2stat($1, $4, $6); }
 	| lbrace stmtlist '}'		{ $$ = stat2(PASTAT, NIL, $2); }
 	| XBEGIN lbrace stmtlist '}'
 		{ beginloc = linkum(beginloc, $3); $$ = 0; }
Index: src/external/historical/nawk/dist/b.c
diff -u src/external/historical/nawk/dist/b.c:1.3 src/external/historical/nawk/dist/b.c:1.4
--- src/external/historical/nawk/dist/b.c:1.3	Sat Mar 10 14:18:48 2012
+++ src/external/historical/nawk/dist/b.c	Fri Dec 28 21:44:26 2012
@@ -843,7 +843,7 @@ Node *unary(Node *np)
  * to nelson beebe for the suggestion; let's see if it works everywhere.
  */
 
-/* #define HAS_ISBLANK */
+#define HAS_ISBLANK
 
 static const struct charclass {
 	const char *cc_name;
@@ -852,7 +852,11 @@ static const struct charclass {
 } charclasses[] = {
 	{ "alnum",	5,	isalnum },
 	{ "alpha",	5,	isalpha },
+#ifndef HAS_ISBLANK
+	{ "blank",	5,	isspace }, /* was isblank */
+#else
 	{ "blank",	5,	isblank },
+#endif
 	{ "cntrl",	5,	iscntrl },
 	{ "digit",	5,	isdigit },
 	{ "graph",	5,	isgraph },
Index: src/external/historical/nawk/dist/proctab.c
diff -u src/external/historical/nawk/dist/proctab.c:1.3 src/external/historical/nawk/dist/proctab.c:1.4
--- src/external/historical/nawk/dist/proctab.c:1.3	Fri Aug 27 12:49:47 2010
+++ src/external/historical/nawk/dist/proctab.c	Fri Dec 28 21:44:26 2012
@@ -7,100 +7,100 @@
 #include "awkgram.h"
 
 static const char * const printname[94] = {
-	"FIRSTTOKEN",	/* 257 */
-	"PROGRAM",	/* 258 */
-	"PASTAT",	/* 259 */
-	"PASTAT2",	/* 260 */
-	"XBEGIN",	/* 261 */
-	"XEND",	/* 262 */
-	"NL",	/* 263 */
-	"ARRAY",	/* 264 */
-	"MATCH",	/* 265 */
-	"NOTMATCH",	/* 266 */
-	"MATCHOP",	/* 267 */
-	"FINAL",	/* 268 */
-	"DOT",	/* 269 */
-	"ALL",	/* 270 */
-	"CCL",	/* 271 */
-	"NCCL",	/* 272 */
-	"CHAR",	/* 273 */
-	"OR",	/* 274 */
-	"STAR",	/* 275 */
-	"QUEST",	/* 276 */
-	"PLUS",	/* 277 */
-	"EMPTYRE",	/* 278 */
-	"AND",	/* 279 */
-	"BOR",	/* 280 */
-	"APPEND",	/* 281 */
-	"EQ",	/* 282 */
-	"GE",	/* 283 */
-	"GT",	/* 284 */
-	"LE",	/* 285 */
-	"LT",	/* 286 */
-	"NE",	/* 287 */
-	"IN",	/* 288 */
-	"ARG",	/* 289 */
-	"BLTIN",	/* 290 */
-	"BREAK",	/* 291 */
-	"CLOSE",	/* 292 */
-	"CONTINUE",	/* 293 */
-	"DELETE",	/* 294 */
-	"DO",	/* 295 */
-	"EXIT",	/* 296 */
-	"FOR",	/* 297 */
-	"FUNC",	/* 298 */
-	"SUB",	/* 299 */
-	"GSUB",	/* 300 */
-	"IF",	/* 301 */
-	"INDEX",	/* 302 */
-	"LSUBSTR",	/* 303 */
-	"MATCHFCN",	/* 304 */
-	"NEXT",	/* 305 */
-	"NEXTFILE",	/* 306 */
-	"ADD",	/* 307 */
-	"MINUS",	/* 308 */
-	"MULT",	/* 309 */
-	"DIVIDE",	/* 310 */
-	"MOD",	/* 311 */
-	"ASSIGN",	/* 312 */
-	"ASGNOP",	/* 313 */
-	"ADDEQ",	/* 314 */
-	"SUBEQ",	/* 315 */
-	"MULTEQ",	/* 316 */
-	"DIVEQ",	/* 317 */
-	"MODEQ",	/* 318 */
-	"POWEQ",	/* 319 */
-	"PRINT",	/* 320 */
-	"PRINTF",	/* 321 */
-	"SPRINTF",	/* 322 */
-	"ELSE",	/* 323 */
-	"INTEST",	/* 324 */
-	"CONDEXPR",	/* 325 */
-	"POSTINCR",	/* 326 */
-	"PREINCR",	/* 327 */
-	"POSTDECR",	/* 328 */
-	"PREDECR",	/* 329 */
-	"VAR",	/* 330 */
-	"IVAR",	/* 331 */
-	"VARNF",	/* 332 */
-	"CALL",	/* 333 */
-	"NUMBER",	/* 334 */
-	"STRING",	/* 335 */
-	"REGEXPR",	/* 336 */
-	"GETLINE",	/* 337 */
-	"GENSUB",	/* 338 */
-	"RETURN",	/* 339 */
-	"SPLIT",	/* 340 */
-	"SUBSTR",	/* 341 */
-	"WHILE",	/* 342 */
-	"CAT",	/* 343 */
-	"NOT",	/* 344 */
-	"UMINUS",	/* 345 */
-	"POWER",	/* 346 */
-	"DECR",	/* 347 */
-	"INCR",	/* 348 */
-	"INDIRECT",	/* 349 */
-	"LASTTOKEN",	/* 350 */
+	"FIRSTTOKEN",	/* 57346 */
+	"PROGRAM",	/* 57347 */
+	"PASTAT",	/* 57348 */
+	"PASTAT2",	/* 57349 */
+	"XBEGIN",	/* 57350 */
+	"XEND",	/* 57351 */
+	"NL",	/* 57352 */
+	"ARRAY",	/* 57353 */
+	"MATCH",	/* 57354 */
+	"NOTMATCH",	/* 57355 */
+	"MATCHOP",	/* 57356 */
+	"FINAL",	/* 57357 */
+	"DOT",	/* 57358 */
+	"ALL",	/* 57359 */
+	"CCL",	/* 57360 */
+	"NCCL",	/* 57361 */
+	"CHAR",	/* 57362 */
+	"OR",	/* 57363 */
+	"STAR",	/* 57364 */
+	"QUEST",	/* 57365 */
+	"PLUS",	/* 57366 */
+	"EMPTYRE",	/* 57367 */
+	"AND",	/* 57368 */
+	"BOR",	/* 57369 */
+	"APPEND",	/* 57370 */
+	"EQ",	/* 57371 */
+	"GE",	/* 57372 */
+	"GT",	/* 57373 */
+	"LE",	/* 57374 */
+	"LT",	/* 57375 */
+	"NE",	/* 57376 */
+	"IN",	/* 57377 */
+	"ARG",	/* 57378 */
+	"BLTIN",	/* 57379 */
+	"BREAK",	/* 57380 */
+	"CLOSE",	/* 57381 */
+	"CONTINUE",	/* 57382 */
+	"DELETE",	/* 57383 */
+	"DO",	/* 57384 */
+	"EXIT",	/* 57385 */
+	"FOR",	/* 57386 */
+	"FUNC",	/* 57387 */
+	"SUB",	/* 57388 */
+	"GSUB",	/* 57389 */
+	"IF",	/* 57390 */
+	"INDEX",	/* 57391 */
+	"LSUBSTR",	/* 57392 */
+	"MATCHFCN",	/* 57393 */
+	"NEXT",	/* 57394 */
+	"NEXTFILE",	/* 57395 */
+	"ADD",	/* 57396 */
+	"MINUS",	/* 57397 */
+	"MULT",	/* 57398 */
+	"DIVIDE",	/* 57399 */
+	"MOD",	/* 57400 */
+	"ASSIGN",	/* 57401 */
+	"ASGNOP",	/* 57402 */
+	"ADDEQ",	/* 57403 */
+	"SUBEQ",	/* 57404 */
+	"MULTEQ",	/* 57405 */
+	"DIVEQ",	/* 57406 */
+	"MODEQ",	/* 57407 */
+	"POWEQ",	/* 57408 */
+	"PRINT",	/* 57409 */
+	"PRINTF",	/* 57410 */
+	"SPRINTF",	/* 57411 */
+	"ELSE",	/* 57412 */
+	"INTEST",	/* 57413 */
+	"CONDEXPR",	/* 57414 */
+	"POSTINCR",	/* 57415 */
+	"PREINCR",	/* 57416 */
+	"POSTDECR",	/* 57417 */
+	"PREDECR",	/* 57418 */
+	"VAR",	/* 57419 */
+	"IVAR",	/* 57420 */
+	"VARNF",	/* 57421 */
+	"CALL",	/* 57422 */
+	"NUMBER",	/* 57423 */
+	"STRING",	/* 57424 */
+	"REGEXPR",	/* 57425 */
+	"GETLINE",	/* 57426 */
+	"GENSUB",	/* 57427 */
+	"RETURN",	/* 57428 */
+	"SPLIT",	/* 57429 */
+	"SUBSTR",	/* 57430 */
+	"WHILE",	/* 57431 */
+	"CAT",	/* 57432 */
+	"NOT",	/* 57433 */
+	"UMINUS",	/* 57434 */
+	"POWER",	/* 57435 */
+	"DECR",	/* 57436 */
+	"INCR",	/* 57437 */
+	"INDIRECT",	/* 57438 */
+	"LASTTOKEN",	/* 57439 */
 };
 
 

Index: src/external/historical/nawk/dist/lib.c
diff -u src/external/historical/nawk/dist/lib.c:1.5 src/external/historical/nawk/dist/lib.c:1.6
--- src/external/historical/nawk/dist/lib.c:1.5	Sat Mar 10 14:18:48 2012
+++ src/external/historical/nawk/dist/lib.c	Fri Dec 28 21:44:26 2012
@@ -97,8 +97,13 @@ void initgetrec(void)
 	char *p;
 
 	for (i = 1; i < *ARGC; i++) {
-		if (!isclvar(p = getargv(i))) {	/* find 1st real filename */
-			setsval(lookup("FILENAME", symtab), getargv(i));
+		p = getargv(i); /* find 1st real filename */
+		if (p == NULL || *p == '\0') {  /* deleted or zapped */
+			argno++;
+			continue;
+		}
+		if (!isclvar(p)) {
+			setsval(lookup("FILENAME", symtab), p);
 			return;
 		}
 		setclvar(p);	/* a commandline assignment before filename */
@@ -133,7 +138,7 @@ int getrec(uschar **pbuf, int *pbufsize,
 		   dprintf( ("argno=%d, file=|%s|\n", argno, file) );
 		if (infile == NULL) {	/* have to open a new file */
 			file = getargv(argno);
-			if (*file == '\0') {	/* it's been zapped */
+			if (file == NULL || *file == '\0') {	/* deleted or zapped */
 				argno++;
 				continue;
 			}
@@ -207,6 +212,7 @@ int readrec(uschar **pbuf, int *pbufsize
 			FATAL("field separator %.10s... is too long", *FS);
 		memcpy(inputFS, *FS, len_inputFS);
 	}
+	/*fflush(stdout); avoids some buffering problem but makes it 25% slower*/
 	if (**RS && (*RS)[1]) {
 		fa *pfa = makedfa(*RS, 1);
 		if (newflag)
@@ -265,6 +271,8 @@ char *getargv(int n)	/* get ARGV[n] */
 	extern Array *ARGVtab;
 
 	snprintf(temp, sizeof(temp), "%d", n);
+	if (lookup(temp, ARGVtab) == NULL)
+		return NULL;
 	x = setsymtab(temp, "", 0.0, STR, ARGVtab);
 	s = getsval(x);
 	   dprintf( ("getargv(%d) returns |%s|\n", n, s) );
@@ -294,6 +302,7 @@ void fldbld(void)	/* create fields from 
 {
 	/* this relies on having fields[] the same length as $0 */
 	/* the fields are all stored in this one array with \0's */
+	/* possibly with a final trailing \0 not associated with any field */
 	char *r, *fr, sep;
 	Cell *p;
 	int i, j, n;
@@ -306,7 +315,7 @@ void fldbld(void)	/* create fields from 
 	n = strlen(r);
 	if (n > fieldssize) {
 		xfree(fields);
-		if ((fields = malloc(n+1)) == NULL)
+		if ((fields = malloc(n+2)) == NULL) /* possibly 2 final \0s */
 			FATAL("out of space for fields in fldbld %d", n);
 		fieldssize = n;
 	}
@@ -537,7 +546,7 @@ void recbld(void)	/* create $0 from $1..
 	fldtab[0]->tval = REC | STR | DONTFREE;
 	fldtab[0]->sval = record;
 
-	   dprintf( ("in recbld inputFS=%s, fldtab[0]=%p\n", inputFS, fldtab[0]) );
+	   dprintf( ("in recbld inputFS=%s, fldtab[0]=%p\n", inputFS, (void*)fldtab[0]) );
 	   dprintf( ("recbld = |%s|\n", record) );
 	donerec = 1;
 }
Index: src/external/historical/nawk/dist/run.c
diff -u src/external/historical/nawk/dist/run.c:1.5 src/external/historical/nawk/dist/run.c:1.6
--- src/external/historical/nawk/dist/run.c:1.5	Sat Mar 10 14:18:48 2012
+++ src/external/historical/nawk/dist/run.c	Fri Dec 28 21:44:26 2012
@@ -1233,13 +1233,13 @@ static char regexpr[] = "(regexpr)";
 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;
@@ -1259,6 +1259,12 @@ Cell *split(Node **a, int nnn)	/* split(
 	ap->sval = (char *) makesymtab(NSYMTAB);
 
 	n = 0;
+        if (arg3type == REGEXPR && strlen((char*)((fa*)a[2])->restr) == 0) {
+		/* split(s, a, //); have to arrange that it looks like empty sep */
+		arg3type = 0;
+		fs = EMPTY;
+		sep = 0;
+	}
 	if (*s != '\0' && (strlen(fs) > 1 || arg3type == REGEXPR)) {	/* reg expr */
 		fa *pfa;
 		if (arg3type == REGEXPR) {	/* it's ready already */
@@ -1353,6 +1359,7 @@ Cell *split(Node **a, int nnn)	/* split(
 	}
 	tempfree(ap);
 	tempfree(y);
+	free(origs);
 	if (a[2] != 0 && arg3type == STRING) {
 		tempfree(x);
 	}
@@ -1604,7 +1611,8 @@ Cell *bltin(Node **a, int n)	/* builtin 
 			u = time((time_t *)0);
 		else
 			u = getfval(x);
-		srand(tmp = (unsigned int) u);
+		tmp = (unsigned int) u;
+		srand(tmp);
 		u = srand_seed;
 		srand_seed = tmp;
 		break;
@@ -1727,6 +1735,7 @@ struct files {
 	const char	*fname;
 	int	mode;	/* '|', 'a', 'w' => LE/LT, GT */
 } *files;
+
 size_t nfiles;
 
 void stdinit(void)	/* in case stdin, etc., are not constants */

Index: src/external/historical/nawk/dist/main.c
diff -u src/external/historical/nawk/dist/main.c:1.7 src/external/historical/nawk/dist/main.c:1.8
--- src/external/historical/nawk/dist/main.c:1.7	Mon Mar 12 14:17:12 2012
+++ src/external/historical/nawk/dist/main.c	Fri Dec 28 21:44:26 2012
@@ -22,7 +22,7 @@ ARISING OUT OF OR IN CONNECTION WITH THE
 THIS SOFTWARE.
 ****************************************************************/
 
-const char	*version = "version 20100523";
+const char	*version = "version 20121220";
 
 #if HAVE_NBTOOL_CONFIG_H
 #include "nbtool_config.h"
@@ -42,7 +42,7 @@ extern	char	**environ;
 extern	int	nfields;
 
 int	dbg	= 0;
-unsigned int srand_seed;
+unsigned int srand_seed = 1;
 char	*cmdname;	/* gets argv[0] for error messages */
 extern	FILE	*yyin;	/* lex input file */
 char	*lexprog;	/* points to program argument if it exists */
@@ -101,6 +101,7 @@ __dead static void fpecatch(int n
 int main(int argc, char *argv[])
 {
 	const char *fs = NULL;
+	char *fn;
 
 	setlocale(LC_ALL, "");
 	setlocale(LC_NUMERIC, "C"); /* for parsing cmdline & prog */
@@ -146,10 +147,15 @@ int main(int argc, char *argv[])
 				safe = 1;
 			break;
 		case 'f':	/* next argument is program filename */
-			argc--;
-			argv++;
-			if (argc <= 1)
-				FATAL("no program filename");
+			if (argv[1][2] != 0) /* arg is -fsomething */
+				fn = &argv[1][2];
+			else {
+				argc--;
+				argv++;
+				if (argc <= 1)
+					FATAL("no program filename");
+				fn = argv[1];
+			}
 			if (npfile >= maxpfile) {
 				maxpfile += 20;
 				pfile = realloc(pfile,
@@ -158,7 +164,7 @@ int main(int argc, char *argv[])
 					FATAL("error allocating space for "
 					    "-f options"); 
 			}
-			pfile[npfile++] = argv[1];
+			pfile[npfile++] = fn;
 			break;
 		case 'F':	/* set field separator */
 			if (argv[1][2] != 0) {	/* arg is -Fsomething */
@@ -172,10 +178,20 @@ int main(int argc, char *argv[])
 				WARNING("field separator FS is empty");
 			break;
 		case 'v':	/* -v a=1 to be done NOW.  one -v for each */
-			if (argv[1][2] == '\0' && --argc > 1 && isclvar((++argv)[1]))
-				setclvar(argv[1]);
-			else if (argv[1][2] != '\0')
-				setclvar(&argv[1][2]);
+			if (argv[1][2] != 0) {  /* arg is -vsomething */
+				if (isclvar(&argv[1][2]))
+					setclvar(&argv[1][2]);
+				else
+					FATAL("invalid -v option argument: %s", &argv[1][2]);
+			} else {		/* arg is -v something */
+				argc--; argv++;
+				if (argc <= 1)
+					FATAL("no variable name");
+				if (isclvar(argv[1]))
+					setclvar(argv[1]);
+				else
+					FATAL("invalid -v option argument: %s", argv[1]);
+			}
 			break;
 		case 'd':
 			dbg = atoi(&argv[1][2]);

Index: src/external/historical/nawk/dist/makefile
diff -u src/external/historical/nawk/dist/makefile:1.2 src/external/historical/nawk/dist/makefile:1.3
--- src/external/historical/nawk/dist/makefile:1.2	Thu Aug 26 10:55:20 2010
+++ src/external/historical/nawk/dist/makefile	Fri Dec 28 21:44:26 2012
@@ -32,22 +32,24 @@ CC = /opt/pure/purify/purify cc
 CC = cc
 CC = gcc -Wall -g -Wwrite-strings
 CC = gcc -fprofile-arcs -ftest-coverage # then gcov f1.c; cat f1.c.gcov
-CC = gcc -O4
+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
 
 SOURCE = awk.h ytab.c ytab.h proto.h awkgram.y lex.c b.c main.c \
-	maketab.c parse.c lib.c run.c tran.c proctab.c missing95.c
+	maketab.c parse.c lib.c run.c tran.c proctab.c 
 
 LISTING = awk.h proto.h awkgram.y lex.c b.c main.c maketab.c parse.c \
-	lib.c run.c tran.c missing95.c
+	lib.c run.c tran.c 
 
-SHIP = README FIXES $(SOURCE) ytab[ch].bak makefile makefile.win \
-	vcvars32.bat buildwin.bat awk.1
+SHIP = README FIXES $(SOURCE) ytab[ch].bak makefile  \
+	 awk.1
 
 a.out:	ytab.o $(OFILES)
 	$(CC) $(CFLAGS) ytab.o $(OFILES) $(ALLOC)  -lm

Index: src/external/historical/nawk/dist/proto.h
diff -u src/external/historical/nawk/dist/proto.h:1.6 src/external/historical/nawk/dist/proto.h:1.7
--- src/external/historical/nawk/dist/proto.h:1.6	Sat Mar 10 14:18:48 2012
+++ src/external/historical/nawk/dist/proto.h	Fri Dec 28 21:44:26 2012
@@ -46,7 +46,7 @@ extern	void	freetr(Node *);
 extern	int	hexstr(const uschar **);
 extern	int	quoted(const uschar **);
 extern	char	*cclenter(const char *);
-extern	void	overflo(const char *) __dead;
+extern	void	overflo(const char *) __attribute__((__noreturn__));
 extern	void	cfoll(fa *, Node *);
 extern	int	first(Node *);
 extern	void	follow(Node *);
@@ -123,7 +123,7 @@ extern	void	makefields(int, int);
 extern	void	growfldtab(int n);
 extern	int	getrec(uschar **, int *, int);
 extern	void	nextfile(void);
-extern	int	readrec(uschar **buf, int *bufsize, FILE *inf, int newflag);
+extern	int	readrec(uschar **buf, int *, FILE *, int);
 extern	char	*getargv(int);
 extern	void	setclvar(char *);
 extern	void	fldbld(void);
@@ -139,7 +139,7 @@ extern	void	bcheck2(int, int, int);
 extern	void	SYNTAX(const char *, ...)
     __attribute__((__format__(__printf__, 1, 2)));
 extern	void	FATAL(const char *, ...) __dead
-    __attribute__((__format__(__printf__, 1, 2)));
+    __attribute__((__format__(__printf__, 1, 2), __noreturn__));
 extern	void	WARNING(const char *, ...)
     __attribute__((__format__(__printf__, 1, 2)));
 extern	void	error(void);
@@ -149,7 +149,7 @@ extern	double	errcheck(double, const cha
 extern	int	isclvar(const char *);
 extern	int	is_number(const char *);
 
-extern	int	adjbuf(uschar **pb, int *sz, int min, int q, uschar **pbp, const char *what);
+extern	int	adjbuf(uschar **, int *, int, int, uschar **, const char *);
 extern	void	run(Node *);
 extern	Cell	*execute(Node *);
 extern	Cell	*program(Node **, int);
Index: src/external/historical/nawk/dist/tran.c
diff -u src/external/historical/nawk/dist/tran.c:1.6 src/external/historical/nawk/dist/tran.c:1.7
--- src/external/historical/nawk/dist/tran.c:1.6	Mon Dec 10 14:49:05 2012
+++ src/external/historical/nawk/dist/tran.c	Fri Dec 28 21:44:26 2012
@@ -322,6 +322,8 @@ Awkfloat setfval(Cell *vp, Awkfloat f)	/
 		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", vp, NN(vp->nval), f, vp->tval) );
 	return vp->fval = f;
 }
@@ -389,7 +391,8 @@ Awkfloat getfval(Cell *vp)	/* get float 
 		if (is_number(vp->sval) && !(vp->tval&CON))
 			vp->tval |= NUM;	/* make NUM only sparingly */
 	}
-	   dprintf( ("getfval %p: %s = %g, t=%o\n", vp, NN(vp->nval), vp->fval, vp->tval) );
+	   dprintf( ("getfval %p: %s = %g, t=%o\n",
+		vp, NN(vp->nval), vp->fval, vp->tval) );
 	return(vp->fval);
 }
 
@@ -415,7 +418,8 @@ static char *get_str_val(Cell *vp, char 
 		vp->tval |= STR;
 		setfree(vp);
 	}
-	   dprintf( ("getsval %p: %s = \"%s (%p)\", t=%o\n", vp, NN(vp->nval), vp->sval, vp->sval, vp->tval) );
+	   dprintf( ("getsval %p: %s = \"%s (%p)\", t=%o\n",
+		vp, NN(vp->nval), vp->sval, vp->sval, vp->tval) );
 	return(vp->sval);
 }
 

Reply via email to