btrfs-progs: don't clobber errno in close_file_or_dir
authorDavid Sterba <dsterba@suse.com>
Thu, 25 Jan 2018 12:37:13 +0000 (13:37 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 31 Jan 2018 14:14:03 +0000 (15:14 +0100)
Preserve the errno value for the caller in case closing happens in the
middle of eg. an ioctl and reporing the failure. The errors that could
happen in close/closedir do not bother us.

Signed-off-by: David Sterba <dsterba@suse.com>
utils.c

diff --git a/utils.c b/utils.c
index 4a16413..5f5965d 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -1549,10 +1549,16 @@ int open_file_or_dir(const char *fname, DIR **dirstream)
 
 void close_file_or_dir(int fd, DIR *dirstream)
 {
-       if (dirstream)
+       int old_errno;
+
+       old_errno = errno;
+       if (dirstream) {
                closedir(dirstream);
-       else if (fd >= 0)
+       } else if (fd >= 0) {
                close(fd);
+       }
+
+       errno = old_errno;
 }
 
 int get_device_info(int fd, u64 devid,