]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Returned errno was often wrong.
authorTimo Sirainen <tss@iki.fi>
Thu, 8 May 2003 13:56:32 +0000 (16:56 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 8 May 2003 13:56:32 +0000 (16:56 +0300)
--HG--
branch : HEAD

src/lib/unlink-directory.c

index 42d7b9233ead68d3f259b3b1a800b154a1ce2e4b..e58e60c46a92cf2754e2fb8b4fed8821d365a653 100644 (file)
@@ -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;
 }