summaryrefslogtreecommitdiffstats
path: root/fuse
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-05-18 23:49:43 +0100
committerRichard Jones <rjones@redhat.com>2010-05-20 10:30:12 +0100
commit9735484c3579e4e4705cd99dd2f6617186b069cc (patch)
treeab4a1424f794910c932f3501e3ed3a97499285f5 /fuse
parent1214b321621e7750c67423ecf4d9528809e1eeac (diff)
downloadlibguestfs-9735484c3579e4e4705cd99dd2f6617186b069cc.tar.gz
libguestfs-9735484c3579e4e4705cd99dd2f6617186b069cc.tar.xz
libguestfs-9735484c3579e4e4705cd99dd2f6617186b069cc.zip
fuse: Implement write syscall (RHBZ#592883).
Diffstat (limited to 'fuse')
-rw-r--r--fuse/guestmount.c12
-rwxr-xr-xfuse/test-fuse.sh11
2 files changed, 22 insertions, 1 deletions
diff --git a/fuse/guestmount.c b/fuse/guestmount.c
index 27a4cef2..e1cb2d89 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 e31ea9d7..d464f11e 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