Date: Wed, 19 Dec 2007 17:26:21 -0500 From: Ed Maste <emaste@freebsd.org> To: freebsd-hackers@freebsd.org Subject: config(8) patch for review for src dir handling Message-ID: <20071219222621.GA79432@sandvine.com>
next in thread | raw e-mail | index | archive | help
I've attached a patch I'd like to commit to config(8) for the way it handles get_srcdir. I'm asking for review since it partially reverts some changes made in revision 1.42 of usr.sbin/config/main.c and I'd like to make sure there are no issues there. Right now config(8) calls realpath("../..", ... to find the src path to write into the kernel Makefile. I want to change this to use $PWD with the last two path components removed, assuming it's the same dir as ../.. . I want to put this in because I often build from an amd(8)-mounted src tree, and realpath produces a path using amd's special temporary mount directory /.amd_mnt/... instead of the intended /host_mounts/... type of path and it times out when accessed that way. Using the logical cwd means that the generated Makefile references /host_mounts/... and amd knows the mount is still in use when building. Comments? -Ed Index: main.c =================================================================== RCS file: /usr/cvs/src/usr.sbin/config/main.c,v retrieving revision 1.76 diff -p -u -r1.76 main.c --- main.c 17 May 2007 04:53:52 -0000 1.76 +++ main.c 18 Dec 2007 21:02:32 -0000 @@ -249,9 +249,30 @@ main(int argc, char **argv) static void get_srcdir(void) { + char *pwd; if (realpath("../..", srcdir) == NULL) errx(2, "Unable to find root of source tree"); + + if ((pwd = getenv("PWD")) != NULL && *pwd == '/' && + (pwd = strdup(pwd))) { + struct stat lg, phy; + int i; + char *p; + + /* remove last two path components */ + for (i = 0; i < 2; i++) { + if ((p = strrchr(pwd, '/')) == NULL) { + free(pwd); + return; + } + *p = '\0'; + } + if (stat(pwd, &lg) != -1 && stat(srcdir, &phy) != -1 && + lg.st_dev == phy.st_dev && lg.st_ino == phy.st_ino) + strlcpy(srcdir, pwd, MAXPATHLEN); + free(pwd); + } } static void
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071219222621.GA79432>