summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-07-14 18:18:07 +0100
committerRichard W.M. Jones <rjones@redhat.com>2011-07-14 18:18:07 +0100
commitbb6a1b4cdc3fc441bb10ff4b9670895c199c6206 (patch)
treee897032bb95bb03ded67778afa8f5a5933f81c81
parent617e7f6bafa7de2303c08e1715004aae3141c389 (diff)
downloadlibguestfs-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.c30
-rw-r--r--generator/generator_actions.ml18
-rw-r--r--src/MAX_PROC_NR2
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