qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

util.h (1631B)


      1 /*
      2  * QAPI util functions
      3  *
      4  * Copyright Fujitsu, Inc. 2014
      5  *
      6  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
      7  * See the COPYING.LIB file in the top-level directory.
      8  *
      9  */
     10 
     11 #ifndef QAPI_UTIL_H
     12 #define QAPI_UTIL_H
     13 
     14 typedef enum {
     15     QAPI_DEPRECATED,
     16     QAPI_UNSTABLE,
     17 } QapiSpecialFeature;
     18 
     19 typedef struct QEnumLookup {
     20     const char *const *array;
     21     const unsigned char *const special_features;
     22     const int size;
     23 } QEnumLookup;
     24 
     25 const char *qapi_enum_lookup(const QEnumLookup *lookup, int val);
     26 int qapi_enum_parse(const QEnumLookup *lookup, const char *buf,
     27                     int def, Error **errp);
     28 bool qapi_bool_parse(const char *name, const char *value, bool *obj,
     29                      Error **errp);
     30 
     31 int parse_qapi_name(const char *name, bool complete);
     32 
     33 /*
     34  * For any GenericList @list, insert @element at the front.
     35  *
     36  * Note that this macro evaluates @element exactly once, so it is safe
     37  * to have side-effects with that argument.
     38  */
     39 #define QAPI_LIST_PREPEND(list, element) do { \
     40     typeof(list) _tmp = g_malloc(sizeof(*(list))); \
     41     _tmp->value = (element); \
     42     _tmp->next = (list); \
     43     (list) = _tmp; \
     44 } while (0)
     45 
     46 /*
     47  * For any pointer to a GenericList @tail (usually the 'next' member of a
     48  * list element), insert @element at the back and update the tail.
     49  *
     50  * Note that this macro evaluates @element exactly once, so it is safe
     51  * to have side-effects with that argument.
     52  */
     53 #define QAPI_LIST_APPEND(tail, element) do { \
     54     *(tail) = g_malloc0(sizeof(**(tail))); \
     55     (*(tail))->value = (element); \
     56     (tail) = &(*(tail))->next; \
     57 } while (0)
     58 
     59 #endif