mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
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:
27
src/create.c
27
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<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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user