# HG changeset patch # User Paul Boddie # Date 1647218005 -3600 # Node ID 37d3f21edd8becbef502b41e41f74e1cb48c39ff # Parent 2a1518ac5891cb6d0c92cea662a7dc56aef0166e Reintroduced the server convenience macro with additional convenience for binding to a named capability. diff -r 2a1518ac5891 -r 37d3f21edd8b libipc/include/ipc/server.h --- a/libipc/include/ipc/server.h Sun Mar 13 01:24:40 2022 +0100 +++ b/libipc/include/ipc/server.h Mon Mar 14 01:33:25 2022 +0100 @@ -27,6 +27,13 @@ EXTERN_C_BEGIN +/* A convenience macro for invoking the server mainloop. */ + +#define ipc_server_loop_for(TYPE, POINTER, NAME) \ + _ipc_server_loop_for(TYPE##_expected_items, (TYPE *) POINTER, \ + (ipc_server_handler_type) handle_##TYPE, \ + NAME) + /* A handler function type. */ typedef void (*ipc_server_handler_type)(ipc_message_t *, void *); @@ -107,6 +114,11 @@ /* Handle incoming messages for a server. */ +long _ipc_server_loop_for(int expected_items, void *handler_obj, + ipc_server_handler_type handler, const char *name); + +/* Handle incoming messages for a server. */ + long ipc_server_loop(int expected_items, ipc_server_config_type *config); /* Handle incoming messages and IRQ notifications for a server. */ diff -r 2a1518ac5891 -r 37d3f21edd8b libipc/lib/src/server.c --- a/libipc/lib/src/server.c Sun Mar 13 01:24:40 2022 +0100 +++ b/libipc/lib/src/server.c Mon Mar 14 01:33:25 2022 +0100 @@ -151,6 +151,29 @@ +/* Support for the convenience macro starting a server for a given object. */ + +long _ipc_server_loop_for(int expected_items, void *handler_obj, + ipc_server_handler_type handler, const char *name) +{ + ipc_server_config_type config; + long err; + + if (name != NULL) + { + err = ipc_server_bind(name, (l4_umword_t) &config, &config.server); + if (err) + return err; + } + + ipc_server_init_config(&config); + config.expected_items = expected_items; + config.handler = handler; + config.handler_obj = handler_obj; + + return ipc_server_start_config(&config); +} + /* A server main loop with no endpoint deletion detection. */ long ipc_server_loop(int expected_items, ipc_server_config_type *config)