From 198973727696ba5f7d37ec72d338fb18d4c94f86 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 30 Sep 2024 18:50:12 +0200 Subject: [PATCH] sd-varlink-idl: add some room for flags everywhere Given this is supposed to be a public API now, let's add some concept for extensions of these open-coded structures: let's make sure we have flags fields on all structures (which we can use for extensions later). Right now we only have this for varlink "fields" structures, this adds the same for "symbols" and the "interface" as a whole. There are no actual flags defined in either for now, this is just future-safety preparation. (But a later commit will add two flags to symbols) --- src/systemd/sd-varlink-idl.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/systemd/sd-varlink-idl.h b/src/systemd/sd-varlink-idl.h index d1c3764c7bb..d2fd458cac7 100644 --- a/src/systemd/sd-varlink-idl.h +++ b/src/systemd/sd-varlink-idl.h @@ -34,6 +34,12 @@ _SD_BEGIN_DECLARATIONS; * format on-the-fly. Can also parse the textual format back to C structures. Validates the interface * definitions for internal consistency and validates JSON objects against the interface definitions. */ +__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_interface_flags_t) { + _SD_VARLINK_INTERFACE_FLAGS_MAX = (1 << 0) - 1, + _SD_VARLINK_INTERFACE_FLAGS_INVALID = -EINVAL, + _SD_ENUM_FORCE_S64(SD_VARLINK_INTERFACE_FLAGS) +} sd_varlink_interface_flags_t; + __extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_type_t) { SD_VARLINK_ENUM_TYPE, SD_VARLINK_STRUCT_TYPE, @@ -46,6 +52,12 @@ __extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_type_t) { _SD_ENUM_FORCE_S64(SD_VARLINK_SYMBOL) } sd_varlink_symbol_type_t; +__extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_symbol_flags_t) { + _SD_VARLINK_SYMBOL_FLAGS_MAX = (1 << 0) - 1, + _SD_VARLINK_SYMBOL_FLAGS_INVALID = -EINVAL, + _SD_ENUM_FORCE_S64(SD_VARLINK_SYMBOL_FLAGS) +} sd_varlink_symbol_flags_t; + __extension__ typedef enum _SD_ENUM_TYPE_S64(sd_varlink_field_type_t) { _SD_VARLINK_FIELD_TYPE_END_MARKER = 0, /* zero type means: this is the last entry in the fields[] array of VarlinkSymbol */ SD_VARLINK_STRUCT, @@ -99,6 +111,7 @@ struct sd_varlink_field { struct sd_varlink_symbol { const char *name; /* most symbols have a name, but sometimes they are created on-the-fly for fields, in which case they are anonymous */ sd_varlink_symbol_type_t symbol_type; + sd_varlink_symbol_flags_t symbol_flags; #if __STDC_VERSION__ >= 199901L sd_varlink_field fields[]; #else @@ -109,6 +122,7 @@ struct sd_varlink_symbol { /* An interface definition has a name and consist of symbols */ struct sd_varlink_interface { const char *name; + sd_varlink_interface_flags_t interface_flags; #if __STDC_VERSION__ >= 199901L const sd_varlink_symbol *symbols[]; #else -- 2.47.3