This adds implementation of wrapper mainloop functions to interact with ell main APIs, enabling support for the applications that link with ell library and use mainloop functionality. --- Makefile.am | 13 +++- src/shared/mainloop-ell.c | 129 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 src/shared/mainloop-ell.c diff --git a/Makefile.am b/Makefile.am index 9d25a815b..d175d3572 100644 --- a/Makefile.am +++ b/Makefile.am @@ -162,6 +162,10 @@ CLEANFILES += $(ell_built_sources) noinst_LTLIBRARIES += src/libshared-glib.la src/libshared-mainloop.la +if LIBSHARED_ELL +noinst_LTLIBRARIES += src/libshared-ell.la +endif + shared_sources = src/shared/io.h src/shared/timeout.h \ src/shared/queue.h src/shared/queue.c \ src/shared/util.h src/shared/util.c \ @@ -206,10 +210,13 @@ src_libshared_mainloop_la_SOURCES = $(shared_sources) \ src/shared/mainloop-notify.c if LIBSHARED_ELL -noinst_LTLIBRARIES += src/libshared-ell.la - src_libshared_ell_la_SOURCES = $(shared_sources) \ - src/shared/io-ell.c + src/shared/io-ell.c \ + src/shared/timeout-mainloop.c \ + src/shared/mainloop.h \ + src/shared/mainloop-ell.c \ + src/shared/mainloop-notify.h \ + src/shared/mainloop-notify.c endif attrib_sources = attrib/att.h attrib/att-database.h attrib/att.c \ diff --git a/src/shared/mainloop-ell.c b/src/shared/mainloop-ell.c new file mode 100644 index 000000000..027c8a0ef --- /dev/null +++ b/src/shared/mainloop-ell.c @@ -0,1 +1,125 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2019 Intel Corporation + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#define _GNU_SOURCE +#include <errno.h> +#include <unistd.h> +#include <stdlib.h> + +#include <ell/ell.h> + +#include "mainloop.h" + +static bool is_initialized; +static int exit_status; +static mainloop_signal_func sig_func; + +static void l_sig_func(uint32_t signo, void *user_data) +{ + if (sig_func) + sig_func(signo, user_data); +} + +void mainloop_init(void) +{ + is_initialized = l_main_init(); +} + +void mainloop_quit(void) +{ + l_main_quit(); +} + +void mainloop_exit_success(void) +{ + exit_status = EXIT_SUCCESS; + l_main_quit(); +} + +void mainloop_exit_failure(void) +{ + exit_status = EXIT_FAILURE; + l_main_quit(); +} + +int mainloop_run(void) +{ + if (!is_initialized) + return -EINVAL; + + l_main_run(); + + is_initialized = false; + sig_func = NULL; + + return exit_status; +} + +int mainloop_run_with_signal(mainloop_signal_func func, void *user_data) +{ + if (!is_initialized || !func) + return -EINVAL; + + /* Workaround for sign discrepancy in ell and bluez */ + sig_func = func; + + return l_main_run_with_signal(l_sig_func, user_data); +} + +int mainloop_add_fd(int fd, uint32_t events, mainloop_event_func callback, + void *user_data, mainloop_destroy_func destroy) +{ + return -ENOSYS; +} + +int mainloop_modify_fd(int fd, uint32_t events) +{ + return -ENOSYS; +} + +int mainloop_remove_fd(int fd) +{ + return -ENOSYS; +} + +int mainloop_add_timeout(unsigned int msec, mainloop_timeout_func callback, + void *user_data, mainloop_destroy_func destroy) +{ + return -ENOSYS; +} + +int mainloop_modify_timeout(int fd, unsigned int msec) +{ + return -ENOSYS; +} + +int mainloop_remove_timeout(int id) +{ + return -ENOSYS; +} + +int mainloop_set_signal(sigset_t *mask, mainloop_signal_func callback, + void *user_data, mainloop_destroy_func destroy) +{ + return -ENOSYS; +} -- 2.21.0