Variant.va
Description:
This function is intended to be used by libraries based on Variant that want to provide Variant-like functionality to their users.
The API is more general than Variant to allow a wider range of possible uses.
format_string
must still point to a valid format string, but it only needs to be nul-terminated if endptr
is
null. If endptr
is non-null then it is updated to point to the
first character past the end of the format string.
app
is a pointer to a va_list. The arguments, according to format_string
, are collected from this va_list and the list is left pointing to the argument
following the last.
Note that the arguments in app
must be of the correct width for their types specified in format_string
when collected
into the va_list. See the GVariant varargs documentation.
These two generalisations allow mixing of multiple calls to Variant.va and get_va within a single actual varargs call by the user.
The return value will be floating if it was a newly created GVariant instance (for example, if the format string was "(ii)"). In the case that the format_string was '*', '?', 'r', or a format starting with '@' then the collected Variant pointer will be returned unmodified, without adding any additional references.
In order to behave correctly in all cases it is necessary for the calling function to g_variant_ref_sink
the return result before
returning control to the user that originally provided the pointer. At this point, the caller will have their own full reference to the result.
This can also be done by adding the result to a container, or by passing it to another
Variant call.
Parameters:
app |
a pointer to a va_list |
endptr |
location to store the end pointer, or null |
format_string |
a string that is prefixed with a format string |
Returns:
a new, usually floating, Variant |