diff options
author | Richard Jones <rjones@redhat.com> | 2010-05-18 23:49:43 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2010-05-20 10:30:12 +0100 |
commit | 9735484c3579e4e4705cd99dd2f6617186b069cc (patch) | |
tree | ab4a1424f794910c932f3501e3ed3a97499285f5 /fuse | |
parent | 1214b321621e7750c67423ecf4d9528809e1eeac (diff) | |
download | libguestfs-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.c | 12 | ||||
-rwxr-xr-x | fuse/test-fuse.sh | 11 |
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 |