Module Name: src Committed By: sjg Date: Tue Apr 20 17:48:16 UTC 2010
Modified Files: src/usr.bin/make: var.c Log Message: Behavior of realpath() appears to vary. To ensure consistent results, use stat(2) as a final check for success. To generate a diff of this commit: cvs rdiff -u -r1.156 -r1.157 src/usr.bin/make/var.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/var.c diff -u src/usr.bin/make/var.c:1.156 src/usr.bin/make/var.c:1.157 --- src/usr.bin/make/var.c:1.156 Thu Apr 15 03:48:39 2010 +++ src/usr.bin/make/var.c Tue Apr 20 17:48:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.156 2010/04/15 03:48:39 sjg Exp $ */ +/* $NetBSD: var.c,v 1.157 2010/04/20 17:48:16 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.156 2010/04/15 03:48:39 sjg Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.157 2010/04/20 17:48:16 sjg Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: var.c,v 1.156 2010/04/15 03:48:39 sjg Exp $"); +__RCSID("$NetBSD: var.c,v 1.157 2010/04/20 17:48:16 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -123,6 +123,7 @@ * XXX: There's a lot of duplication in these functions. */ +#include <sys/stat.h> #ifndef NO_REGEX #include <sys/types.h> #include <regex.h> @@ -1870,6 +1871,7 @@ char *word, Boolean addSpace, Buffer *buf, void *patternp __unused) { + struct stat st; char rbuf[MAXPATHLEN]; char *rp; @@ -1878,7 +1880,7 @@ } addSpace = TRUE; rp = realpath(word, rbuf); - if (rp && *rp == '/') + if (rp && *rp == '/' && stat(rp, &st) == 0) word = rp; Buf_AddBytes(buf, strlen(word), word);