X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fpath-util.c;h=dd12d3d63409654fb446028ba92a0860bc83e4c1;hb=01e10de3c2b9c2944bd86b12fab83d1164d0b64a;hp=2dddc8f2f689001e4b5dbd8dab206a9c01d5b508;hpb=1640a0b6b05b8ae01abbe5939f86f17a61e7998f;p=elogind.git diff --git a/src/shared/path-util.c b/src/shared/path-util.c index 2dddc8f2f..dd12d3d63 100644 --- a/src/shared/path-util.c +++ b/src/shared/path-util.c @@ -181,6 +181,7 @@ char **path_strv_canonicalize(char **l) { t = path_make_absolute_cwd(*s); free(*s); + *s = NULL; if (!t) { enomem = true; @@ -264,12 +265,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 +279,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 +350,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; @@ -385,10 +386,14 @@ fallback: if (allow_symlink) r = stat(t, &a); else - r = lstat(t, &b); + r = lstat(t, &a); + + if (r < 0) { + if (errno == ENOENT) + return 0; - if (r < 0) return -errno; + } r = path_get_parent(t, &parent); if (r < 0)