From f51aae032a452ffdbbe69aa53b11e350bd2ed072 Mon Sep 17 00:00:00 2001 From: Ian Campbell Date: Wed, 13 Oct 2010 11:54:04 +0100 Subject: [PATCH] libxl: remove xs_writev function It isn't actually being used to write a vector at the only callsite and can easily be implemented using xs_write. Furthermore the old implementation used to leak both the key and value strings. Signed-off-by: Ian Campbell Signed-off-by: Stefano Stabellini committer: Stefano Stabellini --- tools/libxl/libxl.c | 24 ++++++++++++++---------- tools/libxl/libxl_internal.h | 2 -- tools/libxl/libxl_xshelp.c | 20 -------------------- 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 540cf1d5ed..ba274892ef 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -1409,22 +1409,26 @@ static char ** libxl_build_device_model_args(libxl__gc *gc, static void dm_xenstore_record_pid(void *for_spawn, pid_t innerchild) { libxl_device_model_starting *starting = for_spawn; - char *kvs[3]; - int rc; struct xs_handle *xsh; + char *path = NULL, *pid = NULL; + int len; + + if (asprintf(&path, "%s/%s", starting->dom_path, "image/device-model-pid") < 0) + goto out; + + len = asprintf(&pid, "%d", innerchild); + if (len < 0) + goto out; - xsh = xs_daemon_open(); /* we mustn't use the parent's handle in the child */ + xsh = xs_daemon_open(); - kvs[0] = "image/device-model-pid"; - if (asprintf(&kvs[1], "%d", innerchild) < 0) - return; - kvs[2] = NULL; + xs_write(xsh, XBT_NULL, path, pid, len); - rc = xs_writev(xsh, XBT_NULL, starting->dom_path, kvs); - if (rc) - return; xs_daemon_close(xsh); +out: + free(path); + free(pid); } static int libxl_vfb_and_vkb_from_device_model_info(libxl_ctx *ctx, diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 180fdcd1ea..6baa6be4bb 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -109,8 +109,6 @@ typedef struct { #define PRINTF_ATTRIBUTE(x, y) __attribute__((format(printf, x, y))) -_hidden int xs_writev(struct xs_handle *xsh, xs_transaction_t t, char *dir, char *kvs[]); - typedef struct { /* mini-GC */ int alloc_maxsize; diff --git a/tools/libxl/libxl_xshelp.c b/tools/libxl/libxl_xshelp.c index 4840ededc8..3dc9239bcb 100644 --- a/tools/libxl/libxl_xshelp.c +++ b/tools/libxl/libxl_xshelp.c @@ -24,26 +24,6 @@ #include "libxl.h" #include "libxl_internal.h" -int xs_writev(struct xs_handle *xsh, xs_transaction_t t, char *dir, char *kvs[]) -{ - char *path; - int i; - - if (!kvs) - return 0; - - for (i = 0; kvs[i] != NULL; i += 2) { - if (asprintf(&path, "%s/%s", dir, kvs[i]) < 0) - return -1; - if (path && kvs[i + 1]) { - int length = strlen(kvs[i + 1]); - xs_write(xsh, t, path, kvs[i + 1], length); - } - free(path); - } - return 0; -} - char **libxl__xs_kvs_of_flexarray(libxl__gc *gc, flexarray_t *array, int length) { char **kvs; -- 2.30.2