From: Paul Smith Date: Sun, 9 Sep 2012 23:14:55 +0000 (+0000) Subject: On BSD, realpath(3) doesn't fail if the target doesn't exist, so test X-Git-Tag: moved-to-git~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9c4a38022e5238356957bba6c2ffaef7a219a23;p=thirdparty%2Fmake.git On BSD, realpath(3) doesn't fail if the target doesn't exist, so test explicitly with stat(2). Fixes Savannah bug #35919. --- diff --git a/ChangeLog b/ChangeLog index 943552ee..ba6ddaed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2012-09-09 Paul Smith + * function.c (func_realpath): BSD realpath(3) doesn't fail if the + file does not exist: use stat. Fixes Savannah bug #35919. + * file.c (expand_deps): Duplicate the current variable buffer, not the old pointer. Fixes Savannah bug #36925. diff --git a/function.c b/function.c index 67405ccf..325d9304 100644 --- a/function.c +++ b/function.c @@ -2066,9 +2066,7 @@ func_realpath (char *o, char **argv, const char *funcname UNUSED) const char *path = 0; int doneany = 0; unsigned int len = 0; -#ifndef HAVE_REALPATH struct stat st; -#endif PATH_VAR (in); PATH_VAR (out); @@ -2083,9 +2081,9 @@ func_realpath (char *o, char **argv, const char *funcname UNUSED) #ifdef HAVE_REALPATH realpath (in, out) #else - abspath (in, out) && stat (out, &st) == 0 + abspath (in, out) #endif - ) + && stat (out, &st) == 0) { o = variable_buffer_output (o, out, strlen (out)); o = variable_buffer_output (o, " ", 1);