From bb6a1b4cdc3fc441bb10ff4b9670895c199c6206 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 14 Jul 2011 18:18:07 +0100 Subject: [PATCH] New API: write-append Append content to the end of a file. --- daemon/file.c | 30 +++++++++++++++++++++++++++++- generator/generator_actions.ml | 18 +++++++++++++++++- src/MAX_PROC_NR | 2 +- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/daemon/file.c b/daemon/file.c index e3a3c30..691f917 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 ebde9c9..1ccacdb 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 bytes."); "create a new file", "\ This call creates a file called C. The content of the -file is the string C (which can contain any 8 bit data)."); +file is the string C (which can contain any 8 bit data). + +See also C."); ("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."); + ("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 to the end of file C. If +C does not exist, then a new file is created. + +See also C."); + ] let all_functions = non_daemon_functions @ daemon_functions diff --git a/src/MAX_PROC_NR b/src/MAX_PROC_NR index 336dd5e..8408670 100644 --- a/src/MAX_PROC_NR +++ b/src/MAX_PROC_NR @@ -1 +1 @@ -289 +290 -- 1.8.3.1