X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fshared%2Fpath-util.c;h=4857971b33002f29b496f6292a380d742c069b28;hp=39f77f64540eec6595f46b9d86a2d8a5b2f46f3a;hb=874310b7b68c4c0d36ff07397db30a959bb7dae5;hpb=f408b8f1bbf79aa566e3f2162f44e7c9c67c0396 diff --git a/src/shared/path-util.c b/src/shared/path-util.c index 39f77f645..4857971b3 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; @@ -189,13 +190,17 @@ char **path_strv_canonicalize(char **l) { errno = 0; u = canonicalize_file_name(t); - free(t); if (!u) { - if (errno == ENOMEM || !errno) - enomem = true; - - continue; + if (errno == ENOENT) + u = t; + else { + free(t); + if (errno == ENOMEM || !errno) + enomem = true; + + continue; + } } l[k++] = u; @@ -264,12 +269,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 +283,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 +354,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 +392,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)