New API: write-append

Append content to the end of a file.
This commit is contained in:
Richard W.M. Jones
2011-07-14 18:18:07 +01:00
parent 617e7f6baf
commit bb6a1b4cdc
3 changed files with 47 additions and 3 deletions

View File

@@ -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)
{

View File

@@ -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

View File

@@ -1 +1 @@
289
290