1
0
mirror of https://github.com/openbsd/src.git synced 2025-01-10 06:47:55 -08:00

There is no need to waste short for holding EOF in the pushback buffer.

Now that the input_file structure is sufficiently fleshed out, just stop
EOF at the putback level, and make sure files at EOF STAY at EOF.
This commit is contained in:
espie 2000-01-15 14:26:00 +00:00
parent 03158d93f6
commit 37b94dd487
4 changed files with 30 additions and 29 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: extern.h,v 1.15 2000/01/12 17:49:53 espie Exp $ */
/* $OpenBSD: extern.h,v 1.16 2000/01/15 14:26:00 espie Exp $ */
/* $NetBSD: extern.h,v 1.3 1996/01/13 23:25:24 pk Exp $ */
/*-
@ -89,10 +89,10 @@ extern int fp; /* m4 call frame pointer */
extern int ilevel; /* input file stack pointer */
extern int oindex; /* diversion index. */
extern int sp; /* current m4 stack pointer */
extern pbent *bp; /* first available character */
extern pbent *buf; /* push-back buffer */
extern pbent *bufbase; /* buffer base for this ilevel */
extern pbent *bbase[]; /* buffer base per ilevel */
extern char *bp; /* first available character */
extern char *buf; /* push-back buffer */
extern char *bufbase; /* buffer base for this ilevel */
extern char *bbase[]; /* buffer base per ilevel */
extern char ecommt[MAXCCHARS+1];/* end character for comment */
extern char *ep; /* first free char in strspace */
extern char lquote[MAXCCHARS+1];/* left quote character (`) */

View File

@ -1,4 +1,4 @@
/* $OpenBSD: main.c,v 1.27 2000/01/13 17:35:09 espie Exp $ */
/* $OpenBSD: main.c,v 1.28 2000/01/15 14:26:00 espie Exp $ */
/* $NetBSD: main.c,v 1.12 1997/02/08 23:54:49 cgd Exp $ */
/*-
@ -47,7 +47,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: main.c,v 1.27 2000/01/13 17:35:09 espie Exp $";
static char rcsid[] = "$OpenBSD: main.c,v 1.28 2000/01/15 14:26:00 espie Exp $";
#endif
#endif /* not lint */
@ -220,7 +220,6 @@ main(argc,argv)
if (*m4wraps) { /* anything for rundown ?? */
ilevel = 0; /* in case m4wrap includes.. */
bufbase = bp = buf; /* use the entire buffer */
putback(EOF); /* eof is a must !! */
pbstr(m4wraps); /* user-defined wrapup act */
macro(); /* last will and testament */
}
@ -257,8 +256,7 @@ do_look_ahead(t, token)
for (i = 1; *++token; i++) {
t = gpbc();
if (t == EOF || t != *token) {
if (t != EOF)
putback(t);
putback(t);
while (--i)
putback(*--token);
return 0;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: mdef.h,v 1.12 2000/01/12 17:49:53 espie Exp $ */
/* $OpenBSD: mdef.h,v 1.13 2000/01/15 14:26:00 espie Exp $ */
/* $NetBSD: mdef.h,v 1.7 1996/01/13 23:25:27 pk Exp $ */
/*
@ -145,8 +145,6 @@ typedef union { /* stack structure */
char *sstr; /* string entry */
} stae;
typedef short pbent; /* pushback entry; needs to hold chars + EOF */
struct input_file {
FILE *file;
char *name;

View File

@ -1,4 +1,4 @@
/* $OpenBSD: misc.c,v 1.16 2000/01/13 17:35:10 espie Exp $ */
/* $OpenBSD: misc.c,v 1.17 2000/01/15 14:26:00 espie Exp $ */
/* $NetBSD: misc.c,v 1.6 1995/09/28 05:37:41 tls Exp $ */
/*
@ -41,7 +41,7 @@
#if 0
static char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";
#else
static char rcsid[] = "$OpenBSD: misc.c,v 1.16 2000/01/13 17:35:10 espie Exp $";
static char rcsid[] = "$OpenBSD: misc.c,v 1.17 2000/01/15 14:26:00 espie Exp $";
#endif
#endif /* not lint */
@ -66,11 +66,11 @@ static size_t strsize = STRSPMAX;
static size_t bufsize = BUFSIZE;
static int low_sp = 0;
pbent *buf; /* push-back buffer */
pbent *bufbase; /* the base for current ilevel */
pbent *bbase[MAXINP]; /* the base for each ilevel */
pbent *bp; /* first available character */
static pbent *endpbb; /* end of push-back buffer */
char *buf; /* push-back buffer */
char *bufbase; /* the base for current ilevel */
char *bbase[MAXINP]; /* the base for each ilevel */
char *bp; /* first available character */
static char *endpbb; /* end of push-back buffer */
static void enlarge_bufspace __P((void));
@ -96,8 +96,10 @@ indx(s1, s2)
*/
void
putback(c)
pbent c;
int c;
{
if (c == EOF)
return;
if (bp >= endpbb)
enlarge_bufspace();
*bp++ = c;
@ -149,7 +151,7 @@ initspaces()
strspace = xalloc(strsize+1);
ep = strspace;
endest = strspace+strsize;
buf = (pbent *)xalloc(bufsize * sizeof(pbent));
buf = (char *)xalloc(bufsize);
bufbase = buf;
bp = buf;
endpbb = buf + bufsize;
@ -162,8 +164,8 @@ initspaces()
* duplicate it transparently, and to reclaim the correct
* space when the stack is unwound.
*/
static
void enlarge_strspace()
static void
enlarge_strspace()
{
char *newstrspace;
@ -182,14 +184,14 @@ void enlarge_strspace()
endest = strspace + strsize;
}
static
void enlarge_bufspace()
static void
enlarge_bufspace()
{
pbent *newbuf;
char *newbuf;
int i;
bufsize *= 2;
newbuf = realloc(buf, bufsize*sizeof(pbent));
newbuf = realloc(buf, bufsize);
if (!newbuf)
errx(1, "too many characters pushed back");
for (i = 0; i < MAXINP; i++)
@ -299,7 +301,9 @@ int
obtain_char(f)
struct input_file *f;
{
if (f->c == '\n')
if (f->c == EOF)
return EOF;
else if (f->c == '\n')
f->lineno++;
f->c = fgetc(f->file);
@ -324,6 +328,7 @@ release_input(f)
{
if (f->file != stdin)
fclose(f->file);
f->c = EOF;
/*
* XXX can't free filename, as there might still be
* error information pointing to it.