X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fpath-util.c;h=e68d3677a7a1b46fa4f7bfb66791f97f0f3dd028;hb=30d7c9c472bd7be1b6a09d3bd5afd939988de990;hp=d193494afb266b94d771d2fc44128c45c47f7e4d;hpb=7d8da2c9641c584ff977493eeb8148300dce8759;p=elogind.git diff --git a/src/shared/path-util.c b/src/shared/path-util.c index d193494af..e68d3677a 100644 --- a/src/shared/path-util.c +++ b/src/shared/path-util.c @@ -442,7 +442,7 @@ int path_is_mount_point(const char *t, bool allow_symlink) { }; int mount_id, mount_id_parent; - char *parent; + _cleanup_free_ char *parent = NULL; struct stat a, b; int r; @@ -473,7 +473,6 @@ int path_is_mount_point(const char *t, bool allow_symlink) { h.handle.handle_bytes = MAX_HANDLE_SZ; r = name_to_handle_at(AT_FDCWD, parent, &h.handle, &mount_id_parent, 0); - free(parent); if (r < 0) { /* The parent can't do name_to_handle_at() but the * directory we are interested in can? If so, it must @@ -504,7 +503,6 @@ fallback: return r; r = lstat(parent, &b); - free(parent); if (r < 0) return -errno; @@ -543,7 +541,7 @@ int path_is_os_tree(const char *path) { int find_binary(const char *name, char **filename) { assert(name); - if (strchr(name, '/')) { + if (is_path(name)) { if (access(name, X_OK) < 0) return -errno; @@ -628,8 +626,25 @@ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool upd } int fsck_exists(const char *fstype) { + _cleanup_free_ char *p = NULL, *d = NULL; const char *checker; + int r; checker = strappenda("fsck.", fstype); - return find_binary(checker, NULL); + + r = find_binary(checker, &p); + if (r < 0) + return r; + + /* An fsck that is linked to /bin/true is a non-existant + * fsck */ + + r = readlink_malloc(p, &d); + if (r >= 0 && + (path_equal(d, "/bin/true") || + path_equal(d, "/usr/bin/true") || + path_equal(d, "/dev/null"))) + return -ENOENT; + + return 0; }