Richard W.M. Jones
2010-Apr-06 10:24 UTC
[Libguestfs] [PATCH] Check error returns from posix_fallocate (RHBZ#579664).
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming blog: http://rwmj.wordpress.com Fedora now supports 80 OCaml packages (the OPEN alternative to F#) http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora -------------- next part -------------->From 557f413e0bd1ad7bd0180ca28a5bfec854f23790 Mon Sep 17 00:00:00 2001From: Richard Jones <rjones at redhat.com> Date: Tue, 6 Apr 2010 11:03:03 +0100 Subject: [PATCH] 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 --- daemon/fallocate.c | 8 ++++---- fish/alloc.c | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) 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 <string.h> #include <unistd.h> #include <fcntl.h> +#include <errno.h> #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 <unistd.h> #include <fcntl.h> #include <inttypes.h> +#include <errno.h> #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]); -- 1.6.6.1
Jim Meyering
2010-Apr-06 11:08 UTC
[Libguestfs] [PATCH] Check error returns from posix_fallocate (RHBZ#579664).
Richard W.M. Jones wrote:> Subject: [PATCH] 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 > --- > daemon/fallocate.c | 8 ++++---- > fish/alloc.c | 5 ++++- > 2 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/daemon/fallocate.c b/daemon/fallocate.c...> + int err = posix_fallocate (fd, 0, len); > + if (err != 0) { > + errno = err;Confirmed that those are the two sole uses (at least in my out-of-date repo -- git pull fails, today), and that the fix makes the usage agree with what POSIX and the posix_fallocate man page say the function does. What a shame to have *standardized* such a surprising interface. ACK.
Maybe Matching Threads
- [PATCH] Improve errors from tar-in/tgz-in commands (RHBZ#591155 RHBZ#591250).
- [PATCH] daemon: write-file: Check range of size parameter (RHBZ#597135).
- [PATCH] file: Fix file command on /dev/VG/LV paths (RHBZ#582484).
- [PATCH] fuse: Implement write syscall (RHBZ#592883).
- [PATCH] Make tmp directory world readable (RHBZ#610880).