]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
filefrag: Fix uninitialized "expected" value
authorEric Sandeen <sandeen@redhat.com>
Fri, 16 Sep 2011 20:49:30 +0000 (15:49 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 16 Sep 2011 22:43:05 +0000 (18:43 -0400)
The "count" variable is only ever set if FIBMAP is used,
due to the -B switch, or a fiemap failure.  However,
we use it unconditionally to calculate "expected" for
extN files, so we can end up printing garbage.

Initialize count to 0, and unless we go through the FIBMAP
path, expected will be 0 as well, and in that case do not
print the message.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
misc/filefrag.c

index 2795e158c293eb036877de1e692cc75da7f83d05..b055c2bf7b42326e239d27df58299023b0ccafdf 100644 (file)
@@ -272,7 +272,7 @@ static void frag_report(const char *filename)
 #endif
        int             bs;
        long            fd;
-       unsigned long   block, last_block = 0, numblocks, i, count;
+       unsigned long   block, last_block = 0, numblocks, i, count = 0;
        long            bpib;   /* Blocks per indirect block */
        long            cylgroups;
        int             num_extents = 0, expected;
@@ -373,8 +373,9 @@ static void frag_report(const char *filename)
                printf("%s: 1 extent found", filename);
        else
                printf("%s: %d extents found", filename, num_extents);
+       /* count, and thus expected, only set for indirect FIBMAP'd files */
        expected = (count/((bs*8)-(fsinfo.f_files/8/cylgroups)-3))+1;
-       if (is_ext2 && expected < num_extents)
+       if (is_ext2 && expected && expected < num_extents)
                printf(", perfection would be %d extent%s\n", expected,
                        (expected>1) ? "s" : "");
        else