[Libguestfs] [PATCH] fuse: Implement write syscall (RHBZ#592883).

Richard W.M. Jones rjones at redhat.com
Tue May 18 22:51:19 UTC 2010


Using this patch I'm able to edit files on a FUSE mounted (guestmount)
filesystem.

Rich.

-- 
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 6868052aec60424dac048cfc68a79b42014c3c38 Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at redhat.com>
Date: Tue, 18 May 2010 23:49:43 +0100
Subject: [PATCH] fuse: Implement write syscall (RHBZ#592883).

---
 fuse/guestmount.c |   12 +++++++++++-
 fuse/test-fuse.sh |   11 +++++++++++
 2 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/fuse/guestmount.c b/fuse/guestmount.c
index 27a4cef..e1cb2d8 100644
--- a/fuse/guestmount.c
+++ b/fuse/guestmount.c
@@ -653,7 +653,17 @@ fg_write (const char *path, const char *buf, size_t size,
 
   dir_cache_invalidate (path);
 
-  return -ENOSYS;               /* XXX */
+  /* See fg_read. */
+  const size_t limit = 2 * 1024 * 1024;
+  if (size > limit)
+    size = limit;
+
+  int r;
+  r = guestfs_pwrite (g, path, buf, size, offset);
+  if (r == -1)
+    return error ();
+
+  return r;
 }
 
 static int
diff --git a/fuse/test-fuse.sh b/fuse/test-fuse.sh
index e31ea9d..d464f11 100755
--- a/fuse/test-fuse.sh
+++ b/fuse/test-fuse.sh
@@ -207,6 +207,17 @@ for ts in 12345 1234567 987654321; do
     [ "$(stat -c %Y timestamp)" -eq $ts ]
 done
 
+stage Checking writes
+cp hello.txt copy.txt
+echo >> copy.txt
+echo world >> copy.txt
+echo bigger >> copy.txt
+echo biggest >> copy.txt
+[ "$(cat copy.txt)" = "hello
+world
+bigger
+biggest" ]
+
 # These ones are not yet tested by the current script:
 #stage XXX statfs/statvfs
 #stage XXX xattr operations
-- 
1.6.6.1



More information about the Libguestfs mailing list