diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2011-07-14 18:18:07 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2011-07-14 18:18:07 +0100 |
commit | bb6a1b4cdc3fc441bb10ff4b9670895c199c6206 (patch) | |
tree | e897032bb95bb03ded67778afa8f5a5933f81c81 | |
parent | 617e7f6bafa7de2303c08e1715004aae3141c389 (diff) | |
download | libguestfs-bb6a1b4cdc3fc441bb10ff4b9670895c199c6206.tar.gz libguestfs-bb6a1b4cdc3fc441bb10ff4b9670895c199c6206.tar.xz libguestfs-bb6a1b4cdc3fc441bb10ff4b9670895c199c6206.zip |
New API: write-append
Append content to the end of a file.
-rw-r--r-- | daemon/file.c | 30 | ||||
-rw-r--r-- | generator/generator_actions.ml | 18 | ||||
-rw-r--r-- | src/MAX_PROC_NR | 2 |
3 files changed, 47 insertions, 3 deletions
diff --git a/daemon/file.c b/daemon/file.c index e3a3c30f..691f9173 100644 --- a/daemon/file.c +++ b/daemon/file.c @@ -1,5 +1,5 @@ /* libguestfs - the guestfsd daemon - * Copyright (C) 2009 Red Hat Inc. + * Copyright (C) 2009-2011 Red Hat Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -349,6 +349,34 @@ do_write (const char *path, const char *content, size_t size) return 0; } +int +do_write_append (const char *path, const char *content, size_t size) +{ + int fd; + + CHROOT_IN; + fd = open (path, O_WRONLY | O_APPEND | O_CREAT | O_NOCTTY, 0666); + CHROOT_OUT; + + if (fd == -1) { + reply_with_perror ("open: %s", path); + return -1; + } + + if (xwrite (fd, content, size) == -1) { + reply_with_perror ("write"); + close (fd); + return -1; + } + + if (close (fd) == -1) { + reply_with_perror ("close: %s", path); + return -1; + } + + return 0; +} + char * do_read_file (const char *path, size_t *size_r) { diff --git a/generator/generator_actions.ml b/generator/generator_actions.ml index ebde9c9d..1ccacdb8 100644 --- a/generator/generator_actions.ml +++ b/generator/generator_actions.ml @@ -5414,7 +5414,9 @@ to ensure the length of the file is exactly C<len> bytes."); "create a new file", "\ This call creates a file called C<path>. The content of the -file is the string C<content> (which can contain any 8 bit data)."); +file is the string C<content> (which can contain any 8 bit data). + +See also C<guestfs_write_append>."); ("pwrite", (RInt "nbytes", [Pathname "path"; BufferIn "content"; Int64 "offset"], []), 247, [ProtocolLimitWarning], [InitScratchFS, Always, TestOutput ( @@ -6066,6 +6068,20 @@ is resized to the maximum size. See also L<btrfs(8)>."); + ("write_append", (RErr, [Pathname "path"; BufferIn "content"], []), 290, [ProtocolLimitWarning], + [InitScratchFS, Always, TestOutput ( + [["write"; "/write_append"; "line1\n"]; + ["write_append"; "/write_append"; "line2\n"]; + ["write_append"; "/write_append"; "line3a"]; + ["write_append"; "/write_append"; "line3b\n"]; + ["cat"; "/write_append"]], "line1\nline2\nline3aline3b\n")], + "append content to end of file", + "\ +This call appends C<content> to the end of file C<path>. If +C<path> does not exist, then a new file is created. + +See also C<guestfs_write>."); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index 336dd5e3..8408670a 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -289 +290 |