summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-04-12 17:17:49 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-04-12 17:23:13 -0400
commitb972115c97b9ec1bb17ee4897da6b85d82727ca8 (patch)
tree0d6498e2216b04de0c1217bd9b99035bc1a87143
parenteb66db55fc4b342e4253065886e0cc0419c45a07 (diff)
path-util: also check for existence of binary when given absolute path
In contrast to a filename-only argument, find_binary() did not actually check if an path exists, allowing the code to fail later on. This was OK, but it seems nicer to treat both paths identically. Also take advantage of path_make_absolute_cwd doing strdup() by itself if necessary to simplify.
-rw-r--r--src/shared/path-util.c9
-rw-r--r--src/test/test-path-util.c2
2 files changed, 7 insertions, 4 deletions
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 1ad1084b2d..e35d7f8d67 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -427,15 +427,16 @@ int find_binary(const char *name, char **filename) {
assert(name);
if (strchr(name, '/')) {
+ if (access(name, X_OK) < 0)
+ return -errno;
+
if (filename) {
char *p;
- if (path_is_absolute(name))
- p = strdup(name);
- else
- p = path_make_absolute_cwd(name);
+ p = path_make_absolute_cwd(name);
if (!p)
return -ENOMEM;
+
*filename = p;
}
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index a2cf0af75f..527b275656 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -104,6 +104,8 @@ static void test_find_binary(void) {
free(p);
assert(find_binary("xxxx-xxxx", &p) == -ENOENT);
+
+ assert(find_binary("/some/dir/xxxx-xxxx", &p) == -ENOENT);
}
static void test_prefixes(void) {