diff options
author | Mike Gilbert <floppym@gentoo.org> | 2014-04-12 16:07:45 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2014-04-12 17:23:13 -0400 |
commit | eb66db55fc4b342e4253065886e0cc0419c45a07 (patch) | |
tree | ba9a5862de90e86b3ebeb662a7746cc740618eeb /src/shared/path-util.c | |
parent | b189101727e80a09864c5e5880663ef565467f19 (diff) |
fsck: Search for fsck.type in PATH
Modifies find_binary() to accept NULL in the second argument.
fsck.type lookup logic moved to new fsck_exists() function, with a test.
Diffstat (limited to 'src/shared/path-util.c')
-rw-r--r-- | src/shared/path-util.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/src/shared/path-util.c b/src/shared/path-util.c index bdc54a9aa5..1ad1084b2d 100644 --- a/src/shared/path-util.c +++ b/src/shared/path-util.c @@ -425,19 +425,20 @@ int path_is_os_tree(const char *path) { int find_binary(const char *name, char **filename) { assert(name); - assert(filename); if (strchr(name, '/')) { - char *p; + if (filename) { + char *p; - if (path_is_absolute(name)) - p = strdup(name); - else - p = path_make_absolute_cwd(name); - if (!p) - return -ENOMEM; + if (path_is_absolute(name)) + p = strdup(name); + else + p = path_make_absolute_cwd(name); + if (!p) + return -ENOMEM; + *filename = p; + } - *filename = p; return 0; } else { const char *path; @@ -453,18 +454,19 @@ int find_binary(const char *name, char **filename) { path = DEFAULT_PATH; FOREACH_WORD_SEPARATOR(w, l, path, ":", state) { - char *p; + _cleanup_free_ char *p = NULL; if (asprintf(&p, "%.*s/%s", (int) l, w, name) < 0) return -ENOMEM; - if (access(p, X_OK) < 0) { - free(p); + if (access(p, X_OK) < 0) continue; - } - path_kill_slashes(p); - *filename = p; + if (filename) { + path_kill_slashes(p); + *filename = p; + p = NULL; + } return 0; } @@ -507,3 +509,10 @@ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool upd return changed; } + +int fsck_exists(const char *fstype) { + const char *checker; + + checker = strappenda("fsck.", fstype); + return find_binary(checker, NULL); +} |