}
}
}
+ old_errno = errno;
(void)close(dir_fd);
-
- old_errno = errno;
if (closedir(dirp) < 0)
return -1;
int unlink_directory(const char *dir, int unlink_dir)
{
- int fd, ret;
+ int fd, ret, old_errno;
fd = open(".", O_RDONLY);
if (fd == -1)
ret = unlink_directory_r(dir);
if (ret < 0 && errno == ENOENT)
ret = 0;
+ old_errno = errno;
if (fchdir(fd) < 0) {
i_fatal("unlink_directory(%s): "
}
(void)close(fd);
+ if (ret < 0) {
+ errno = old_errno;
+ return -1;
+ }
+
if (unlink_dir) {
if (rmdir(dir) < 0 && errno != ENOENT)
return -1;
}
- return ret;
+ return 0;
}