]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-varlink-idl: add some room for flags everywhere
authorLennart Poettering <lennart@poettering.net>
Mon, 30 Sep 2024 16:50:12 +0000 (18:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 2 Oct 2024 07:22:52 +0000 (09:22 +0200)
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

index d1c3764c7bb2078f70b2c6a006adf9917010904b..d2fd458cac7df6606c764aa09e64ae40390bb335 100644 (file)
@@ -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