mkfs.btrfs: fail on scandir error (-r mode)
authorSergei Trofimovich <slyfox@gentoo.org>
Sat, 4 Jun 2011 08:19:18 +0000 (11:19 +0300)
committerChris Mason <chris.mason@oracle.com>
Tue, 25 Oct 2011 13:18:58 +0000 (09:18 -0400)
mkfs.btrfs does not handle relative pathnames for now. When
they are passed to it it creates empty image. So first time
I thought it does not work at all.

This patch adds error handling for scandir(). With patch it behaves
this way:

    $ mkfs.btrfs -r ./root
    ...
    fs created label (null) on output.img
            nodesize 4096 leafsize 4096 sectorsize 4096 size 256.00MB
    Btrfs v0.19-52-g438c5ff-dirty
    scandir for ./root failed: No such file or directory
    unable to traverse_directory
    Making image is aborted.
    mkfs.btrfs: mkfs.c:1402: main: Assertion `!(ret)' failed.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Signed-off-by: Hugo Mills <hugo@carfax.org.uk>
mkfs.c

diff --git a/mkfs.c b/mkfs.c
index 171710e..efd85d5 100644 (file)
--- a/mkfs.c
+++ b/mkfs.c
@@ -895,6 +895,12 @@ static int traverse_directory(struct btrfs_trans_handle *trans,
 
                count = scandir(parent_dir_entry->path, &files,
                                directory_select, NULL);
+               if (count == -1)
+               {
+                       fprintf(stderr, "scandir for %s failed: %s\n",
+                               parent_dir_name, strerror (errno));
+                       goto fail;
+               }
 
                for (i = 0; i < count; i++) {
                        cur_file = files[i];