lib: Turn qemu_escape_param into a shared function.

This function appeared twice (identically).  Turn it into a single
shared function.

This also adds some documentation for the two files affected.
This commit is contained in:
Richard W.M. Jones
2016-05-05 22:35:45 +01:00
parent f3c278474d
commit 3965c9f56e
3 changed files with 22 additions and 27 deletions

View File

@@ -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<qemu-img(1)> program.
*/
#include <config.h>
#include <stdio.h>
@@ -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;
}

View File

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

View File

@@ -16,6 +16,12 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* Implementation of the C<direct> backend.
*
* For more details see L<guestfs(3)/BACKENDS>.
*/
#include <config.h>
#include <stdio.h>
@@ -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;