diff options
author | Ori Bernstein <ori@eigenstate.org> | 2019-12-11 23:26:15 -0800 |
---|---|---|
committer | Ori Bernstein <ori@eigenstate.org> | 2019-12-11 23:26:15 -0800 |
commit | 685670b0ddb9eb8398d88cbae1b08a2872b5adf6 (patch) | |
tree | 8436300039d53887fa143398547f69cb913db250 /sys/src/cmd/yacc.c | |
parent | 80ecdec0ec82f1cdfba26c67d425cbc72aa46f3f (diff) |
normalize error messages in yacc, stop writing to closed fd.
Diffstat (limited to 'sys/src/cmd/yacc.c')
-rw-r--r-- | sys/src/cmd/yacc.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/sys/src/cmd/yacc.c b/sys/src/cmd/yacc.c index 482823ea0..997c2aac7 100644 --- a/sys/src/cmd/yacc.c +++ b/sys/src/cmd/yacc.c @@ -125,7 +125,10 @@ enum /* command to clobber tempfiles after use */ -#define ZAPFILE(x) if(x) remove(x) +#define ZAPFILE(bfd, x) {\ + if(bfd) Bterm(bfd); \ + if(x) remove(x); \ + } /* I/O descriptors */ @@ -140,6 +143,7 @@ Biobuf* foutput; /* y.output file */ /* communication variables between various I/O routines */ char* infile; /* input file name */ +char* inpath; /* input full path */ int numbval; /* value of an input number */ char tokname[NAMESIZE+UTFmax+1]; /* input token name, slop for runes and 0 */ @@ -486,8 +490,7 @@ others(void) Blethal(faction, nil); while((c=Bgetrune(faction)) != Beof) Bputrune(ftable, c); - Bterm(faction); - ZAPFILE(actname); + ZAPFILE(faction, actname); c = Bgetrune(finput); } } @@ -617,11 +620,14 @@ summary(void) void error(char *s, ...) { + va_list ap; nerrors++; - fprint(2, "\n fatal error:"); - fprint(2, s, (&s)[1]); - fprint(2, ", %s:%d\n", infile, lineno); + va_start(ap, s); + fprint(2, "%s:%d: fatal error: ", infile, lineno); + vfprint(2, s, ap); + fprint(2, "\n"); + va_end(ap); if(!fatfl) return; summary(); @@ -1155,8 +1161,8 @@ flset(Lkset *p) void cleantmp(void) { - ZAPFILE(actname); - ZAPFILE(tempname); + ZAPFILE(faction, actname); + ZAPFILE(ftemp, tempname); } void @@ -1231,10 +1237,10 @@ setup(int argc, char *argv[]) if(s != nil){ snprint(s, i, "%s/%s", dirbuf, infile); cleanname(s); - infile = s; + inpath = s; } } - finput = Bopen(infile, OREAD); + finput = Bopen(inpath, OREAD); if(finput == 0) error("cannot open '%s'", argv[0]); Blethal(finput, nil); @@ -1509,7 +1515,7 @@ setup(int argc, char *argv[]) finact(); if(t == MARK) { - Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, infile); + Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, inpath); while((c=Bgetrune(finput)) != Beof) Bputrune(ftable, c); } @@ -1845,7 +1851,7 @@ cpyunion(void) long c; int level; - Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, infile); + Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, inpath); Bprint(ftable, "typedef union "); if(fdefine != 0) Bprint(fdefine, "\ntypedef union "); @@ -1892,7 +1898,7 @@ cpycode(void) c = Bgetrune(finput); lineno++; } - Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, infile); + Bprint(ftable, "\n#line\t%d\t\"%s\"\n", lineno, inpath); while(c != Beof) { if(c == '\\') { if((c=Bgetrune(finput)) == '}') @@ -1953,7 +1959,7 @@ cpyact(int offset) long c; int brac, match, j, s, fnd, tok; - Bprint(faction, "\n#line\t%d\t\"%s\"\n", lineno, infile); + Bprint(faction, "\n#line\t%d\t\"%s\"\n", lineno, inpath); brac = 0; loop: @@ -2735,7 +2741,7 @@ callopt(void) /* write out the output appropriate to the language */ aoutput(); osummary(); - ZAPFILE(tempname); + ZAPFILE(ftemp, tempname); } void |