diff options
author | Giacinto Cifelli <gciofono@gmail.com> | 2019-01-08 12:14:37 +0100 |
---|---|---|
committer | Giacinto Cifelli <gciofono@gmail.com> | 2019-02-26 12:55:02 +0100 |
commit | 856ad2a86bd9b3e264a090fcf4b0d05bfaa91030 (patch) | |
tree | 478ab7fafbe63489b5238452bc0a9e48c55d5f89 /src/systemd/sd-bus-vtable.h | |
parent | 3f1af087a99ee3d96cb4e6cacee6370ee76b81fd (diff) | |
download | systemd-856ad2a86bd9b3e264a090fcf4b0d05bfaa91030.tar.gz |
sd-bus: add methods and signals parameter names. Fixes: #1564
Diffstat (limited to 'src/systemd/sd-bus-vtable.h')
-rw-r--r-- | src/systemd/sd-bus-vtable.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/systemd/sd-bus-vtable.h b/src/systemd/sd-bus-vtable.h index 4350a8c705..8a73ef0503 100644 --- a/src/systemd/sd-bus-vtable.h +++ b/src/systemd/sd-bus-vtable.h @@ -48,6 +48,10 @@ enum { #define SD_BUS_VTABLE_CAPABILITY(x) ((uint64_t) (((x)+1) & 0xFFFF) << 40) +enum { + _SD_BUS_VTABLE_PARAM_NAMES = 1 << 0, +}; + struct sd_bus_vtable { /* Please do not initialize this structure directly, use the * macros below instead */ @@ -57,6 +61,7 @@ struct sd_bus_vtable { union { struct { size_t element_size; + uint64_t features; } start; struct { const char *member; @@ -64,10 +69,12 @@ struct sd_bus_vtable { const char *result; sd_bus_message_handler_t handler; size_t offset; + const char *names; } method; struct { const char *member; const char *signature; + const char *names; } signal; struct { const char *member; @@ -85,12 +92,16 @@ struct sd_bus_vtable { .flags = _flags, \ .x = { \ .start = { \ - .element_size = sizeof(sd_bus_vtable) \ + .element_size = sizeof(sd_bus_vtable), \ + .features = _SD_BUS_VTABLE_PARAM_NAMES \ }, \ }, \ } -#define SD_BUS_METHOD_WITH_OFFSET(_member, _signature, _result, _handler, _offset, _flags) \ +/* helper macro to format method and signal parameters, one at a time */ +#define SD_BUS_PARAM(x) #x "\0" + +#define SD_BUS_METHOD_WITH_NAMES_OFFSET(_member, _signature, _in_names, _result, _out_names, _handler, _offset, _flags) \ { \ .type = _SD_BUS_VTABLE_METHOD, \ .flags = _flags, \ @@ -101,13 +112,18 @@ struct sd_bus_vtable { .result = _result, \ .handler = _handler, \ .offset = _offset, \ + .names = _in_names _out_names, \ }, \ }, \ } +#define SD_BUS_METHOD_WITH_OFFSET(_member, _signature, _result, _handler, _offset, _flags) \ + SD_BUS_METHOD_WITH_NAMES_OFFSET(_member, _signature, "", _result, "", _handler, _offset, _flags) +#define SD_BUS_METHOD_WITH_NAMES(_member, _signature, _in_names, _result, _out_names, _handler, _flags) \ + SD_BUS_METHOD_WITH_NAMES_OFFSET(_member, _signature, _in_names, _result, _out_names, _handler, 0, _flags) #define SD_BUS_METHOD(_member, _signature, _result, _handler, _flags) \ - SD_BUS_METHOD_WITH_OFFSET(_member, _signature, _result, _handler, 0, _flags) + SD_BUS_METHOD_WITH_NAMES_OFFSET(_member, _signature, "", _result, "", _handler, 0, _flags) -#define SD_BUS_SIGNAL(_member, _signature, _flags) \ +#define SD_BUS_SIGNAL_WITH_NAMES(_member, _signature, _out_names, _flags) \ { \ .type = _SD_BUS_VTABLE_SIGNAL, \ .flags = _flags, \ @@ -115,9 +131,12 @@ struct sd_bus_vtable { .signal = { \ .member = _member, \ .signature = _signature, \ + .names = _out_names, \ }, \ }, \ } +#define SD_BUS_SIGNAL(_member, _signature, _flags) \ + SD_BUS_SIGNAL_WITH_NAMES(_member, _signature, "", _flags) #define SD_BUS_PROPERTY(_member, _signature, _get, _offset, _flags) \ { \ |