btrfs-progs: let test_isdir return the exact error
authorDavid Sterba <dsterba@suse.com>
Wed, 13 Jan 2016 16:45:39 +0000 (17:45 +0100)
committerDavid Sterba <dsterba@suse.com>
Wed, 13 Jan 2016 16:45:41 +0000 (17:45 +0100)
Return any error from stat, normalize the return value in case the path
is a directory.

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

diff --git a/utils.c b/utils.c
index 74bb066..ad3ada0 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -2799,11 +2799,11 @@ int test_issubvolname(const char *name)
 }
 
 /*
- * test if path is a directory
- * this function return
- * 0-> path exists but it is not a directory
- * 1-> path exists and it is a directory
- * -1 -> path is unaccessible
+ * Test if path is a directory
+ * Returns:
+ *   0 - path exists but it is not a directory
+ *   1 - path exists and it is a directory
+ * < 0 - error
  */
 int test_isdir(const char *path)
 {
@@ -2811,10 +2811,10 @@ int test_isdir(const char *path)
        int ret;
 
        ret = stat(path, &st);
-       if(ret < 0 )
-               return -1;
+       if (ret < 0)
+               return -errno;
 
-       return S_ISDIR(st.st_mode);
+       return !!S_ISDIR(st.st_mode);
 }
 
 void units_set_mode(unsigned *units, unsigned mode)