New API: write for creating files with fixed content (RHBZ#501889).

The guestfs_write call can be used to create small files with
arbitrary 8 bit content, including \0 bytes.

This replaces and deprecates write-file, which cannot be modified
to use BufferIn because of an unfortunate choice in the ABI: the
size parameter to write-file, if zero, means that the daemon tries
to calculate the length of the buffer using strlen.  However this
fails if we pass a zero-length buffer using BufferIn because then
the daemon tries to do strlen on a (really) zero length buffer, not
even containing a terminating \0 character, thus segfaulting.
This commit is contained in:
Richard Jones
2010-05-18 21:51:05 +01:00
parent bda6cf75f2
commit 3920ad95f6
10 changed files with 96 additions and 65 deletions

View File

@@ -314,6 +314,34 @@ do_write_file (const char *path, const char *content, int size)
return 0;
}
int
do_write (const char *path, const char *content, size_t size)
{
int fd;
CHROOT_IN;
fd = open (path, O_WRONLY | O_TRUNC | 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)
{