X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fpath-util.c;h=70c8a8af06f9b2ea9db57784db96a405dc272e88;hb=72edcff5db936e54cfc322d9392ec46e2428fd9b;hp=39f77f64540eec6595f46b9d86a2d8a5b2f46f3a;hpb=f408b8f1bbf79aa566e3f2162f44e7c9c67c0396;p=elogind.git diff --git a/src/shared/path-util.c b/src/shared/path-util.c index 39f77f645..70c8a8af0 100644 --- a/src/shared/path-util.c +++ b/src/shared/path-util.c @@ -264,12 +264,12 @@ char *path_kill_slashes(char *path) { return path; } -bool path_startswith(const char *path, const char *prefix) { +char* path_startswith(const char *path, const char *prefix) { assert(path); assert(prefix); if ((path[0] == '/') != (prefix[0] == '/')) - return false; + return NULL; for (;;) { size_t a, b; @@ -278,19 +278,19 @@ bool path_startswith(const char *path, const char *prefix) { prefix += strspn(prefix, "/"); if (*prefix == 0) - return true; + return (char*) path; if (*path == 0) - return false; + return NULL; a = strcspn(path, "/"); b = strcspn(prefix, "/"); if (a != b) - return false; + return NULL; if (memcmp(path, prefix, a) != 0) - return false; + return NULL; path += a; prefix += b; @@ -349,8 +349,8 @@ int path_is_mount_point(const char *t, bool allow_symlink) { r = name_to_handle_at(AT_FDCWD, t, h, &mount_id, allow_symlink ? AT_SYMLINK_FOLLOW : 0); if (r < 0) { - if (errno == ENOTSUP) - /* This file system does not support + if (errno == ENOSYS || errno == ENOTSUP) + /* This kernel or file system does not support * name_to_handle_at(), hence fallback to the * traditional stat() logic */ goto fallback; @@ -387,8 +387,12 @@ fallback: else r = lstat(t, &a); - if (r < 0) + if (r < 0) { + if (errno == ENOENT) + return 0; + return -errno; + } r = path_get_parent(t, &parent); if (r < 0)