shithub: riscv

Download patch

ref: ed4645979c0a6286d92c6bddaee7ea71727b0afb
parent: d332f8a9b5d4437e7d8d0946bb03c13d7fe8a236
author: Ori Bernstein <ori@eigenstate.org>
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;