From f01c1bb732f56a4cb6d989d6ae0e3c613fceb0a0 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 8 May 2003 16:56:32 +0300 Subject: [PATCH] Returned errno was often wrong. --HG-- branch : HEAD --- src/lib/unlink-directory.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/lib/unlink-directory.c b/src/lib/unlink-directory.c index 42d7b9233e..e58e60c46a 100644 --- a/src/lib/unlink-directory.c +++ b/src/lib/unlink-directory.c @@ -153,10 +153,9 @@ static int unlink_directory_r(const char *dir) } } } + old_errno = errno; (void)close(dir_fd); - - old_errno = errno; if (closedir(dirp) < 0) return -1; @@ -170,7 +169,7 @@ static int unlink_directory_r(const char *dir) int unlink_directory(const char *dir, int unlink_dir) { - int fd, ret; + int fd, ret, old_errno; fd = open(".", O_RDONLY); if (fd == -1) @@ -179,6 +178,7 @@ int unlink_directory(const char *dir, int unlink_dir) ret = unlink_directory_r(dir); if (ret < 0 && errno == ENOENT) ret = 0; + old_errno = errno; if (fchdir(fd) < 0) { i_fatal("unlink_directory(%s): " @@ -186,10 +186,15 @@ int unlink_directory(const char *dir, int unlink_dir) } (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; } -- 2.47.3