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;
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
/* 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)). */
_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, ...) PRINTF_ATTRIBUTE(4, 5);
/* Check how executes hotplug script currently */
int libxl__hotplug_settings(libxl__gc *gc, xs_transaction_t t);