From: Richard Jones Date: Tue, 6 Apr 2010 10:03:03 +0000 (+0100) Subject: Check error returns from posix_fallocate (RHBZ#579664). X-Git-Tag: 1.3.1~5 X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=2ade61d1f864c75ce65c358e4ac8a012a897b89a;p=libguestfs.git Check error returns from posix_fallocate (RHBZ#579664). posix_fallocate has a non-standard way to return error indications. Thus all our calls to posix_fallocate were effectively unchecked. For example: $ guestfish alloc test.img 1P $ echo $? 0 $ ll test.img -rw-rw-r--. 1 rjones rjones 0 2010-04-06 11:02 test.img $ rm test.img With this change, errors are detected and reported properly: $ ./fish/guestfish alloc test.img 1P fallocate: File too large This is a fix for: https://bugzilla.redhat.com/show_bug.cgi?id=579664 --- diff --git a/daemon/fallocate.c b/daemon/fallocate.c index 7f17f8b..4947430 100644 --- a/daemon/fallocate.c +++ b/daemon/fallocate.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "daemon.h" #include "actions.h" @@ -41,10 +42,9 @@ do_fallocate (const char *path, int len) } #ifdef HAVE_POSIX_FALLOCATE - int r; - - r = posix_fallocate (fd, 0, len); - if (r == -1) { + int err = posix_fallocate (fd, 0, len); + if (err != 0) { + errno = err; reply_with_perror ("%s", path); close (fd); return -1; diff --git a/fish/alloc.c b/fish/alloc.c index 28c990f..93cd8af 100644 --- a/fish/alloc.c +++ b/fish/alloc.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "fish.h" @@ -55,7 +56,9 @@ do_alloc (const char *cmd, int argc, char *argv[]) } #ifdef HAVE_POSIX_FALLOCATE - if (posix_fallocate (fd, 0, size) == -1) { + int err = posix_fallocate (fd, 0, size); + if (err != 0) { + errno = err; perror ("fallocate"); close (fd); unlink (argv[0]);