summaryrefslogtreecommitdiff
path: root/src/shared/path-util.c
diff options
context:
space:
mode:
authorMike Gilbert <floppym@gentoo.org>2014-04-12 16:07:45 -0400
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2014-04-12 17:23:13 -0400
commiteb66db55fc4b342e4253065886e0cc0419c45a07 (patch)
treeba9a5862de90e86b3ebeb662a7746cc740618eeb /src/shared/path-util.c
parentb189101727e80a09864c5e5880663ef565467f19 (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.c39
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);
+}