[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 1/5] libxl: introduce libxl__device_model_xs_path
Factor out libxl__vsprintf. Use it to implement libxl__device_model_xs_patch helper to return xenstore path for device model to avoid handcoded paths. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- Changes in v3: 1. Factor out libxl__vsprintf. --- tools/libxl/libxl_internal.c | 40 ++++++++++++++++++++++++++++++++++------ tools/libxl/libxl_internal.h | 4 ++++ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/tools/libxl/libxl_internal.c b/tools/libxl/libxl_internal.c index ddc68ab..c2c67bd 100644 --- a/tools/libxl/libxl_internal.c +++ b/tools/libxl/libxl_internal.c @@ -127,21 +127,33 @@ void *libxl__realloc(libxl__gc *gc, void *ptr, size_t new_size) return new_ptr; } -char *libxl__sprintf(libxl__gc *gc, const char *fmt, ...) +char *libxl__vsprintf(libxl__gc *gc, const char *fmt, va_list ap) { char *s; - va_list ap; + va_list aq; int ret; - va_start(ap, fmt); - ret = vsnprintf(NULL, 0, fmt, ap); - va_end(ap); + va_copy(aq, ap); + ret = vsnprintf(NULL, 0, fmt, aq); + va_end(aq); assert(ret >= 0); s = libxl__zalloc(gc, ret + 1); + va_copy(aq, ap); + ret = vsnprintf(s, ret + 1, fmt, aq); + va_end(aq); + + return s; +} + +char *libxl__sprintf(libxl__gc *gc, const char *fmt, ...) +{ + char *s; + va_list ap; + va_start(ap, fmt); - ret = vsnprintf(s, ret + 1, fmt, ap); + s = libxl__vsprintf(gc, fmt, ap); va_end(ap); return s; @@ -555,6 +567,22 @@ void libxl__update_domain_configuration(libxl__gc *gc, dst->b_info.video_memkb = src->b_info.video_memkb; } +char *libxl__device_model_xs_path(libxl__gc *gc, uint32_t dm_domid, + uint32_t domid, const char *format, ...) +{ + char *s, *fmt; + va_list ap; + + fmt = GCSPRINTF("/local/domain/%u/device-model/%u%s", dm_domid, + domid, format); + + va_start(ap, format); + s = libxl__vsprintf(gc, fmt, ap); + va_end(ap); + + return s; +} + /* * Local variables: * mode: C diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 934465a..2f952d4 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -521,6 +521,7 @@ _hidden void *libxl__realloc(libxl__gc *gc_opt, void *ptr, size_t new_size) NN1; /* print @fmt into an allocated string large enoughto contain the result. * (similar to gc'd asprintf(3)). */ _hidden char *libxl__sprintf(libxl__gc *gc_opt, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3) NN1; +_hidden char *libxl__vsprintf(libxl__gc *gc, const char *format, va_list ap); /* duplicate the string @c (similar to a gc'd strdup(3)). */ _hidden char *libxl__strdup(libxl__gc *gc_opt, const char *c) NN1; /* duplicate at most @n bytes of string @c (similar to a gc'd strndup(3)). */ @@ -1794,6 +1795,9 @@ _hidden libxl__json_object *libxl__json_parse(libxl__gc *gc_opt, const char *s); _hidden int libxl__device_model_version_running(libxl__gc *gc, uint32_t domid); /* Return the system-wide default device model */ _hidden libxl_device_model_version libxl__default_device_model(libxl__gc *gc); +_hidden char *libxl__device_model_xs_path(libxl__gc *gc, uint32_t dm_domid, + uint32_t domid, + const char *format, ...); /* Check how executes hotplug script currently */ int libxl__hotplug_settings(libxl__gc *gc, xs_transaction_t t); -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |