summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Smith <psmith@gnu.org>2012-09-09 23:14:55 +0000
committerPaul Smith <psmith@gnu.org>2012-09-09 23:14:55 +0000
commitb9c4a38022e5238356957bba6c2ffaef7a219a23 (patch)
treeab1f7e2572889d5913ebda516c924071981ca40d
parent90ee335724c3165ae31bfc45486a1c185d85a19c (diff)
downloadgunmake-b9c4a38022e5238356957bba6c2ffaef7a219a23.tar.gz
On BSD, realpath(3) doesn't fail if the target doesn't exist, so test
explicitly with stat(2). Fixes Savannah bug #35919.
-rw-r--r--ChangeLog3
-rw-r--r--function.c6
2 files changed, 5 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 943552e..ba6ddae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2012-09-09 Paul Smith <psmith@gnu.org>
+ * 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 67405cc..325d930 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);