diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 12:35:31 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2010-07-16 12:35:31 +0300 |
commit | 8ceb5f934787eb7be5fb452fb39179df66119954 (patch) | |
tree | 56a80fc5c118f7c2ebad7ab44bd8be048b2f7ec2 /builtin.c | |
parent | 2f83a4e72166e811a9f0b4726c19a3d5a0b17dcb (diff) | |
download | egawk-8ceb5f934787eb7be5fb452fb39179df66119954.tar.gz egawk-8ceb5f934787eb7be5fb452fb39179df66119954.tar.bz2 egawk-8ceb5f934787eb7be5fb452fb39179df66119954.zip |
Move to gawk-2.15.6.
Diffstat (limited to 'builtin.c')
-rw-r--r-- | builtin.c | 24 |
1 files changed, 18 insertions, 6 deletions
@@ -3,7 +3,7 @@ */ /* - * Copyright (C) 1986, 1988, 1989, 1991, 1992, 1993 the Free Software Foundation, Inc. + * Copyright (C) 1986, 1988, 1989, 1991-1995 the Free Software Foundation, Inc. * * This file is part of GAWK, the GNU implementation of the * AWK Progamming Language. @@ -29,7 +29,7 @@ #ifndef SRANDOM_PROTO extern void srandom P((unsigned int seed)); #endif -#ifndef linux +#if defined(RANDOM_MISSING) extern char *initstate P((unsigned seed, char *state, int n)); extern char *setstate P((char *state)); extern long random P((void)); @@ -441,8 +441,18 @@ check_pos: case 'l': if (big) break; + else { + static int warned = 0; + + if (do_lint && ! warned) { + warning("`l' is meaningless in awk formats; ignored"); + warned++; + } + if (do_posix) + fatal("'l' is not permitted in POSIX awk formats"); + } big++; - goto check_pos; + goto retry; case 'c': parse_next_arg(); if (arg->flags & NUMBER) { @@ -1076,7 +1086,8 @@ int global; if (*scan == '&') { repllen--; ampersands++; - } else if (*scan == '\\' && *(scan+1) == '&') { + } else if (*scan == '\\' + && (*(scan+1) == '&' || *(scan+1) == '\\')) { repllen--; scan++; } @@ -1095,7 +1106,7 @@ int global; len = matchstart - text + repllen + ampersands * (matchend - matchstart); sofar = bp - buf; - while ((long)(buflen - sofar - len - 1) < 0) { + while (buflen < (sofar + len + 1)) { buflen *= 2; erealloc(buf, char *, buflen, "do_sub"); bp = buf + sofar; @@ -1106,7 +1117,8 @@ int global; if (*scan == '&') for (cp = matchstart; cp < matchend; cp++) *bp++ = *cp; - else if (*scan == '\\' && *(scan+1) == '&') { + else if (*scan == '\\' + && (*(scan+1) == '&' || *(scan+1) == '\\')) { scan++; *bp++ = *scan; } else |