X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=c1e1f9f020f6eb9287c6c46ee4c2f72e4aa1f785;hb=7d8da2c9641c584ff977493eeb8148300dce8759;hp=bce4e634c23537ae7ede93520ae0898496be5d75;hpb=1554afae546f6cfb8ac85e36300d7bf608886780;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index bce4e634c..c1e1f9f02 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -2671,7 +2671,7 @@ finish: } int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct stat *root_dev) { - DIR *d; + _cleanup_closedir_ DIR *d = NULL; int ret = 0; assert(fd >= 0); @@ -2694,15 +2694,12 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct errno = 0; de = readdir(d); - if (!de && errno != 0) { - if (ret == 0) + if (!de) { + if (errno != 0 && ret == 0) ret = -errno; - break; + return ret; } - if (!de) - break; - if (streq(de->d_name, ".") || streq(de->d_name, "..")) continue; @@ -2758,10 +2755,6 @@ int rm_rf_children_dangerous(int fd, bool only_dirs, bool honour_sticky, struct } } } - - closedir(d); - - return ret; } _pure_ static int is_temporary_fs(struct statfs *s) { @@ -5686,7 +5679,7 @@ static int search_and_fopen_internal(const char *path, const char *mode, const c assert(mode); assert(_f); - if (!path_strv_canonicalize_absolute_uniq(search, root)) + if (!path_strv_resolve_uniq(search, root)) return -ENOMEM; STRV_FOREACH(i, search) {