diff --git a/src/create.c b/src/create.c index 355e8149e..e1c1aa0c5 100644 --- a/src/create.c +++ b/src/create.c @@ -16,6 +16,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/** + * APIs for creating empty disks. + * + * Mostly this consists of wrappers around the L program. + */ + #include #include @@ -42,7 +48,6 @@ static int disk_create_raw (guestfs_h *g, const char *filename, int64_t size, const struct guestfs_disk_create_argv *optargs); static int disk_create_qcow2 (guestfs_h *g, const char *filename, int64_t size, const char *backingfile, const struct guestfs_disk_create_argv *optargs); -static char *qemu_escape_param (guestfs_h *g, const char *param); int guestfs_impl_disk_create (guestfs_h *g, const char *filename, @@ -313,7 +318,7 @@ disk_create_qcow2 (guestfs_h *g, const char *orig_filename, int64_t size, /* -o parameter. */ if (backingfile) { - CLEANUP_FREE char *p = qemu_escape_param (g, backingfile); + CLEANUP_FREE char *p = guestfs_int_qemu_escape_param (g, backingfile); guestfs_int_add_sprintf (g, &optionsv, "backing_file=%s", p); } if (backingformat) @@ -345,21 +350,3 @@ disk_create_qcow2 (guestfs_h *g, const char *orig_filename, int64_t size, return 0; } - -/* XXX Duplicated in launch-direct.c. */ -static char * -qemu_escape_param (guestfs_h *g, const char *param) -{ - size_t i, len = strlen (param); - char *p, *ret; - - ret = p = safe_malloc (g, len*2 + 1); /* max length of escaped name*/ - for (i = 0; i < len; ++i) { - *p++ = param[i]; - if (param[i] == ',') - *p++ = ','; - } - *p = '\0'; - - return ret; -} diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h index 7b3927b32..fab917214 100644 --- a/src/guestfs-internal.h +++ b/src/guestfs-internal.h @@ -903,6 +903,7 @@ extern void guestfs_int_cleanup_cmd_close (struct command **); /* launch-direct.c */ extern char *guestfs_int_drive_source_qemu_param (guestfs_h *g, const struct drive_source *src); extern bool guestfs_int_discard_possible (guestfs_h *g, struct drive *drv, unsigned long qemu_version); +extern char *guestfs_int_qemu_escape_param (guestfs_h *g, const char *param); /* launch-*.c constructors */ void guestfs_int_init_direct_backend (void) __attribute__((constructor)); diff --git a/src/launch-direct.c b/src/launch-direct.c index 8521e5ad9..64f0de60e 100644 --- a/src/launch-direct.c +++ b/src/launch-direct.c @@ -16,6 +16,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/** + * Implementation of the C backend. + * + * For more details see L. + */ + #include #include @@ -69,7 +75,6 @@ static void print_qemu_command_line (guestfs_h *g, char **argv); static int qemu_supports (guestfs_h *g, struct backend_direct_data *, const char *option); static int qemu_supports_device (guestfs_h *g, struct backend_direct_data *, const char *device_name); static int qemu_supports_virtio_scsi (guestfs_h *g, struct backend_direct_data *); -static char *qemu_escape_param (guestfs_h *g, const char *param); static char * create_cow_overlay_direct (guestfs_h *g, void *datav, struct drive *drv) @@ -501,7 +506,7 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) /* Make the file= parameter. */ file = guestfs_int_drive_source_qemu_param (g, &drv->src); - escaped_file = qemu_escape_param (g, file); + escaped_file = guestfs_int_qemu_escape_param (g, file); /* Make the first part of the -drive parameter, everything up to * the if=... at the end. @@ -521,7 +526,7 @@ launch_direct (guestfs_h *g, void *datav, const char *arg) } else { /* Writable qcow2 overlay on top of read-only drive. */ - escaped_file = qemu_escape_param (g, drv->overlay); + escaped_file = guestfs_int_qemu_escape_param (g, drv->overlay); param = safe_asprintf (g, "file=%s,cache=unsafe,format=qcow2%s%s,id=hd%zu", escaped_file, @@ -1137,11 +1142,13 @@ qemu_supports_virtio_scsi (guestfs_h *g, struct backend_direct_data *data) return data->virtio_scsi == 1; } -/* Escape a qemu parameter. Every ',' becomes ',,'. The caller must - * free the returned string. +/** + * Escape a qemu parameter. + * + * Every C<,> becomes C<,,>. The caller must free the returned string. */ -static char * -qemu_escape_param (guestfs_h *g, const char *param) +char * +guestfs_int_qemu_escape_param (guestfs_h *g, const char *param) { size_t i, len = strlen (param); char *p, *ret;