util: typedparam: Introduce virTypedParamListAddUnsigned

The new helper adds a unsigned value, stored as _UINT if it fits into
the type and stored as _ULLONG otherwise.

This is useful for the statistics code which is quite tolerant to
changes in type in cases when we'll need more range for the value.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2023-04-18 13:30:02 +02:00
parent f9f40a6d4b
commit e280e83bff
3 changed files with 43 additions and 0 deletions

View File

@ -3555,6 +3555,7 @@ virTypedParamListAddLLong;
virTypedParamListAddString;
virTypedParamListAddUInt;
virTypedParamListAddULLong;
virTypedParamListAddUnsigned;
virTypedParamListConcat;
virTypedParamListFetch;
virTypedParamListFree;

View File

@ -920,6 +920,42 @@ virTypedParamListAddULLong(virTypedParamList *list,
}
/**
* virTypedParamListAddUnsigned:
* @list: typed parameter list
* @value: value to add (see below on details)
* @namefmt: formatting string for constructing the name of the added value
* @...: additional parameters to format the name
*
* Adds a new typed parameter to @list. The name of the parameter is formatted
* from @fmt.
*
* @value is added as VIR_TYPED_PARAM_UINT, unless it doesn't fit into the data
* type in which case it's added as VIR_TYPED_PARAM_ULLONG.
*/
void
virTypedParamListAddUnsigned(virTypedParamList *list,
unsigned long long value,
const char *namefmt,
...)
{
virTypedParameterPtr par = virTypedParamListExtend(list);
va_list ap;
if (value > UINT_MAX) {
virTypedParameterAssignValue(par, VIR_TYPED_PARAM_ULLONG, value);
} else {
unsigned int ival = value;
virTypedParameterAssignValue(par, VIR_TYPED_PARAM_UINT, ival);
}
va_start(ap, namefmt);
virTypedParamSetNameVPrintf(list, par, namefmt, ap);
va_end(ap);
}
void
virTypedParamListAddString(virTypedParamList *list,
const char *value,

View File

@ -187,6 +187,12 @@ virTypedParamListAddULLong(virTypedParamList *list,
...)
G_GNUC_PRINTF(3, 4);
void
virTypedParamListAddUnsigned(virTypedParamList *list,
unsigned long long value,
const char *namefmt,
...)
G_GNUC_PRINTF(3, 4);
void
virTypedParamListAddString(virTypedParamList *list,
const char *value,
const char *namefmt,