From 336275ee6dbff5efa2152a4f67ef354b81d15d59 Mon Sep 17 00:00:00 2001 From: Richard Jones Date: Tue, 17 Nov 2009 17:02:45 +0000 Subject: [PATCH] fuse: Fix read for empty files. Error handling for the guestfs_pread call was incorrect, which meant that empty files could produce spurious error messages. --- fuse/guestmount.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fuse/guestmount.c b/fuse/guestmount.c index baf2b66..ba0d626 100644 --- a/fuse/guestmount.c +++ b/fuse/guestmount.c @@ -620,8 +620,14 @@ fg_read (const char *path, char *buf, size_t size, off_t offset, if (size > limit) size = limit; + /* Note the correct error handling here is tricky, because in the + * case where the call returns a zero-length buffer, it might return + * NULL. However it won't adjust rsize along the error path, so we + * can set rsize to something beforehand and use that as a flag. + */ + rsize = 1; r = guestfs_pread (g, path, size, offset, &rsize); - if (r == NULL) + if (rsize == 1 && r == NULL) return error (); /* This should never happen, but at least it stops us overflowing -- 1.8.3.1