mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
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:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user