From f2ca701c1c5e8000c60c8a8dbae5afad5f500138 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Sun, 1 Jun 2014 21:27:41 -0400 Subject: [PATCH] filefrag: fix issues with 29758d2 29758d2 filefrag: exit with error code if an error is hit introduced a couple errors; in one case it missed returning a value, and possibly picked up errno from (unchecked) close(), and in the other used a test where it needed an assignment. So capture the error, move perror() directly after the failed call in both cases, and fix the assignment. Also fix a precedence problem with: if (fe_flags & mask == 0) which is equivalent to: if (fe_flags & (mask == 0)) but we need: if ((fe_flags & mask) == 0) Signed-off-by: Eric Sandeen Signed-off-by: Theodore Ts'o Reviewed-by: Andreas Dilger --- misc/filefrag.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/misc/filefrag.c b/misc/filefrag.c index 37c44163..820821b5 100644 --- a/misc/filefrag.c +++ b/misc/filefrag.c @@ -175,7 +175,7 @@ static void print_extent_info(struct fiemap_extent *fm_extent, int cur_ex, for (mask = 1; fe_flags != 0 && mask != 0; mask <<= 1) { char hex[6]; - if (fe_flags & mask == 0) + if ((fe_flags & mask) == 0) continue; sprintf(hex, "%#04x,", mask); print_flag(&fe_flags, mask, flags, hex); @@ -378,17 +378,18 @@ static int frag_report(const char *filename) #else if (fstat(fd, &st) < 0) { #endif - close(fd); rc = -errno; perror("stat"); + close(fd); return rc; } if (last_device != st.st_dev) { if (fstatfs(fd, &fsinfo) < 0) { - close(fd); + rc = -errno; perror("fstatfs"); - return; + close(fd); + return rc; } if (verbose) printf("Filesystem type is: %lx\n", @@ -556,7 +557,7 @@ int main(int argc, char**argv) int rc2 = frag_report(*cpp); if (rc2 < 0 && rc == 0) - rc == rc2; + rc = rc2; } return rc;