git: ccfdf335d697 - main - crunchgen: use realpath(3) instead of ``pwd -P''
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 27 Oct 2021 09:27:45 UTC
The branch main has been updated by danfe (ports committer): URL: https://cgit.FreeBSD.org/src/commit/?id=ccfdf335d6976bb0e3436b808418d14f3d150a3d commit ccfdf335d6976bb0e3436b808418d14f3d150a3d Author: Alexey Dokuchaev <danfe@FreeBSD.org> AuthorDate: 2020-10-11 08:23:00 +0000 Commit: Alexey Dokuchaev <danfe@FreeBSD.org> CommitDate: 2021-10-27 09:26:00 +0000 crunchgen: use realpath(3) instead of ``pwd -P'' r366466 (9c7bd4f198e1) fixed a subtle bug by stripping the trailing '\n' appended to the output of popen("cd %s && pwd -P", p->srcdir). Replace this cumbersome implementation with a single realpath(3) call which avoids spawning a shell, reading from the stream with fgets(3), and final strdup(3). Reviewed by: arichardson, kevans Approved by: imp Differential Revision: https://reviews.freebsd.org/D26734 --- usr.sbin/crunch/crunchgen/crunchgen.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/usr.sbin/crunch/crunchgen/crunchgen.c b/usr.sbin/crunch/crunchgen/crunchgen.c index 94792c5ec50b..89d549b18b4e 100644 --- a/usr.sbin/crunch/crunchgen/crunchgen.c +++ b/usr.sbin/crunch/crunchgen/crunchgen.c @@ -639,7 +639,6 @@ fillin_program(prog_t *p) { char path[MAXPATHLEN]; char line[MAXLINELEN]; - FILE *f; snprintf(line, MAXLINELEN, "filling in parms for %s", p->name); status(line); @@ -654,22 +653,9 @@ fillin_program(prog_t *p) /* Determine the actual srcdir (maybe symlinked). */ if (p->srcdir) { - snprintf(line, MAXLINELEN, "cd %s && pwd -P", p->srcdir); - f = popen(line,"r"); - if (!f) - errx(1, "Can't execute: %s\n", line); - - path[0] = '\0'; - fgets(path, sizeof path, f); - if (pclose(f)) - errx(1, "Can't execute: %s\n", line); - - if (!*path) - errx(1, "Can't perform pwd on: %s\n", p->srcdir); - - /* Chop off trailing newline. */ - path[strlen(path) - 1] = '\0'; - p->realsrcdir = strdup(path); + p->realsrcdir = realpath(p->srcdir, NULL); + if (p->realsrcdir == NULL) + errx(1, "Can't resolve path: %s\n", p->srcdir); } /* Unless the option to make object files was specified the