diff options
author | Richard Jones <rjones@redhat.com> | 2010-05-18 23:20:30 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2010-05-20 10:30:12 +0100 |
commit | 1214b321621e7750c67423ecf4d9528809e1eeac (patch) | |
tree | 4f53875a21079a80b8b78626968fca1cf8aab2ff /daemon | |
parent | 3920ad95f6b2db8fbf20aa26692877a09070cb04 (diff) | |
download | libguestfs-1214b321621e7750c67423ecf4d9528809e1eeac.tar.gz libguestfs-1214b321621e7750c67423ecf4d9528809e1eeac.tar.xz libguestfs-1214b321621e7750c67423ecf4d9528809e1eeac.zip |
New API: Implement pwrite system call (partial fix for RHBZ#592883).
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/file.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/daemon/file.c b/daemon/file.c index 7d37f569..aca1caa6 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -456,6 +456,37 @@ do_pread (const char *path, int count, int64_t offset, size_t *size_r) return buf; } +int +do_pwrite (const char *path, const char *content, size_t size, int64_t offset) +{ + int fd; + ssize_t r; + + CHROOT_IN; + fd = open (path, O_WRONLY); + CHROOT_OUT; + + if (fd == -1) { + reply_with_perror ("open: %s", path); + return -1; + } + + r = pwrite (fd, content, size, offset); + if (r == -1) { + reply_with_perror ("pwrite: %s", path); + close (fd); + return -1; + } + + if (close (fd) == -1) { + reply_with_perror ("close: %s", path); + close (fd); + return -1; + } + + return r; +} + /* This runs the 'file' command. */ char * do_file (const char *path) |