ref: ed4645979c0a6286d92c6bddaee7ea71727b0afb
parent: d332f8a9b5d4437e7d8d0946bb03c13d7fe8a236
author: Ori Bernstein <[email protected]>
date: Wed May 13 14:50:01 EDT 2020
stop fiddling with path construction. There's fd2path, which gives back the full path directly. This makes the code even simpler.
--- a/sys/src/cmd/yacc.c
+++ b/sys/src/cmd/yacc.c
@@ -143,7 +143,7 @@
/* communication variables between various I/O routines */
char* infile; /* input file name */
-char* inpath; /* input full path */
+char inpath[1024]; /* input full path */
int numbval; /* value of an input number */
char tokname[NAMESIZE+UTFmax+1]; /* input token name, slop for runes and 0 */
@@ -1185,7 +1185,7 @@
long c, t;
int i, j, lev, ty, ytab, *p;
int vflag, dflag, stem;
- char actnm[8], *stemc, dirbuf[512];
+ char actnm[8], *stemc;
ytab = 0;
vflag = 0;
@@ -1231,16 +1231,12 @@
if(argc < 1)
error("no input file");
- dirbuf[0] = '\0';
infile = argv[0];
- if(infile[0] != '/' && getwd(dirbuf, sizeof dirbuf)==nil)
- error("cannot get cwd");
- inpath = smprint("%s/%s", dirbuf, infile);
- cleanname(inpath);
-
- finput = Bopen(inpath, OREAD);
+ finput = Bopen(infile, OREAD);
if(finput == 0)
error("cannot open '%s'", argv[0]);
+ if(fd2path(Bfildes(finput), inpath, sizeof(inpath)) == -1)
+ error("cannot get path for %s", infile);
Blethal(finput, nil);
cnamp = cnames;