mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

The "special_features" field / parameter holds the subset of schema features that are for internal code use. Specifically 'DEPRECATED' and 'UNSTABLE'. This special casing of internal features is going to be removed, so prepare for that by renaming to 'features'. Using a fixed size type is also best practice for bit fields. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20250205123550.2754387-3-berrange@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
72 lines
2.2 KiB
C
72 lines
2.2 KiB
C
/*
|
|
* QAPI util functions
|
|
*
|
|
* Copyright Fujitsu, Inc. 2014
|
|
*
|
|
* This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
|
|
* See the COPYING.LIB file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#ifndef QAPI_UTIL_H
|
|
#define QAPI_UTIL_H
|
|
|
|
typedef enum {
|
|
QAPI_DEPRECATED,
|
|
QAPI_UNSTABLE,
|
|
} QapiSpecialFeature;
|
|
|
|
typedef struct QEnumLookup {
|
|
const char *const *array;
|
|
const uint64_t *const features;
|
|
const int size;
|
|
} QEnumLookup;
|
|
|
|
const char *qapi_enum_lookup(const QEnumLookup *lookup, int val);
|
|
int qapi_enum_parse(const QEnumLookup *lookup, const char *buf,
|
|
int def, Error **errp);
|
|
bool qapi_bool_parse(const char *name, const char *value, bool *obj,
|
|
Error **errp);
|
|
|
|
int parse_qapi_name(const char *name, bool complete);
|
|
|
|
/*
|
|
* For any GenericList @list, insert @element at the front.
|
|
*
|
|
* Note that this macro evaluates @element exactly once, so it is safe
|
|
* to have side-effects with that argument.
|
|
*/
|
|
#define QAPI_LIST_PREPEND(list, element) do { \
|
|
typeof(list) _tmp = g_malloc(sizeof(*(list))); \
|
|
_tmp->value = (element); \
|
|
_tmp->next = (list); \
|
|
(list) = _tmp; \
|
|
} while (0)
|
|
|
|
/*
|
|
* For any pointer to a GenericList @tail (usually the 'next' member of a
|
|
* list element), insert @element at the back and update the tail.
|
|
*
|
|
* Note that this macro evaluates @element exactly once, so it is safe
|
|
* to have side-effects with that argument.
|
|
*/
|
|
#define QAPI_LIST_APPEND(tail, element) do { \
|
|
*(tail) = g_malloc0(sizeof(**(tail))); \
|
|
(*(tail))->value = (element); \
|
|
(tail) = &(*(tail))->next; \
|
|
} while (0)
|
|
|
|
/*
|
|
* For any GenericList @list, return its length.
|
|
*/
|
|
#define QAPI_LIST_LENGTH(list) \
|
|
({ \
|
|
size_t _len = 0; \
|
|
typeof_strip_qual(list) _tail; \
|
|
for (_tail = list; _tail != NULL; _tail = _tail->next) { \
|
|
_len++; \
|
|
} \
|
|
_len; \
|
|
})
|
|
|
|
#endif
|