1.1 --- a/libipc/include/ipc/server.h Sun Mar 13 01:24:40 2022 +0100
1.2 +++ b/libipc/include/ipc/server.h Mon Mar 14 01:33:25 2022 +0100
1.3 @@ -27,6 +27,13 @@
1.4
1.5 EXTERN_C_BEGIN
1.6
1.7 +/* A convenience macro for invoking the server mainloop. */
1.8 +
1.9 +#define ipc_server_loop_for(TYPE, POINTER, NAME) \
1.10 + _ipc_server_loop_for(TYPE##_expected_items, (TYPE *) POINTER, \
1.11 + (ipc_server_handler_type) handle_##TYPE, \
1.12 + NAME)
1.13 +
1.14 /* A handler function type. */
1.15
1.16 typedef void (*ipc_server_handler_type)(ipc_message_t *, void *);
1.17 @@ -107,6 +114,11 @@
1.18
1.19 /* Handle incoming messages for a server. */
1.20
1.21 +long _ipc_server_loop_for(int expected_items, void *handler_obj,
1.22 + ipc_server_handler_type handler, const char *name);
1.23 +
1.24 +/* Handle incoming messages for a server. */
1.25 +
1.26 long ipc_server_loop(int expected_items, ipc_server_config_type *config);
1.27
1.28 /* Handle incoming messages and IRQ notifications for a server. */
2.1 --- a/libipc/lib/src/server.c Sun Mar 13 01:24:40 2022 +0100
2.2 +++ b/libipc/lib/src/server.c Mon Mar 14 01:33:25 2022 +0100
2.3 @@ -151,6 +151,29 @@
2.4
2.5
2.6
2.7 +/* Support for the convenience macro starting a server for a given object. */
2.8 +
2.9 +long _ipc_server_loop_for(int expected_items, void *handler_obj,
2.10 + ipc_server_handler_type handler, const char *name)
2.11 +{
2.12 + ipc_server_config_type config;
2.13 + long err;
2.14 +
2.15 + if (name != NULL)
2.16 + {
2.17 + err = ipc_server_bind(name, (l4_umword_t) &config, &config.server);
2.18 + if (err)
2.19 + return err;
2.20 + }
2.21 +
2.22 + ipc_server_init_config(&config);
2.23 + config.expected_items = expected_items;
2.24 + config.handler = handler;
2.25 + config.handler_obj = handler_obj;
2.26 +
2.27 + return ipc_server_start_config(&config);
2.28 +}
2.29 +
2.30 /* A server main loop with no endpoint deletion detection. */
2.31
2.32 long ipc_server_loop(int expected_items, ipc_server_config_type *config)