virTypedParamSetNameVPrintf(list, par, namefmt, ap);
va_end(ap);
}
+
+
+/**
+ * virTypedParamDebugstr:
+ * @param: typed parameter
+ *
+ * Format @param into a string used for debug prints in public API handlers.
+ * This must make sure to work on unknown typed parameter types.
+ *
+ * Returns the formatted string; caller must free it.
+ */
+char *
+virTypedParamDebugstr(virTypedParameterPtr param)
+{
+ g_autofree char *value = virTypedParameterToString(param);
+ int type = param->type;
+
+ if (type < 0 || type > VIR_TYPED_PARAM_LAST)
+ type = 0;
+
+ return g_strdup_printf("params[\"%s\"]=(%s)%s",
+ param->field,
+ virTypedParameterTypeToString(type),
+ NULLSTR(value));
+}
VIR_ENUM_DECL(virTypedParameter);
+char *
+virTypedParamDebugstr(virTypedParameterPtr param);
+
#define VIR_TYPED_PARAMS_DEBUG(params, nparams) \
do { \
int _i; \
if (!params) \
break; \
for (_i = 0; _i < (nparams); _i++) { \
- char *_value = virTypedParameterToString((params) + _i); \
- VIR_DEBUG("params[\"%s\"]=(%s)%s", \
- (params)[_i].field, \
- virTypedParameterTypeToString((params)[_i].type), \
- NULLSTR(_value)); \
- VIR_FREE(_value); \
+ g_autofree char *_debugstr = virTypedParamDebugstr((params) + _i); \
+ VIR_DEBUG("%s", _debugstr); \
} \
} while (0)