From f15ea770dd9b13a20331853a026091316984f9ca Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Wed, 21 Feb 2018 16:07:56 +0100 Subject: [PATCH] afb-systemd: Integrate sd-fds features MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I59d194ba675912a42922f0905933b1cea796c78a Signed-off-by: José Bollo --- src/CMakeLists.txt | 1 - src/afb-api-ws.c | 3 +-- src/afb-systemd.c | 39 ++++++++++++++++++++++++++++++ src/afb-systemd.h | 3 +++ src/main.c | 3 --- src/sd-fds.c | 70 ------------------------------------------------------ src/sd-fds.h | 24 ------------------- 7 files changed, 43 insertions(+), 100 deletions(-) delete mode 100644 src/sd-fds.c delete mode 100644 src/sd-fds.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 436eaf02..4ef87853 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,7 +64,6 @@ ADD_LIBRARY(afb-lib STATIC jobs.c locale-root.c process-name.c - sd-fds.c sig-monitor.c subpath.c verbose.c diff --git a/src/afb-api-ws.c b/src/afb-api-ws.c index 26d01932..7fbe5be1 100644 --- a/src/afb-api-ws.c +++ b/src/afb-api-ws.c @@ -36,7 +36,6 @@ #include "afb-systemd.h" #include "afb-stub-ws.h" #include "verbose.h" -#include "sd-fds.h" struct api_ws { @@ -177,7 +176,7 @@ static int api_ws_socket(const char *path, int server) /* check for systemd socket */ if (0 == strncmp(path, "sd:", 3)) - fd = sd_fds_for(path + 3); + fd = systemd_fds_for(path + 3); else { /* check for unix socket */ if (0 == strncmp(path, "unix:", 5)) diff --git a/src/afb-systemd.c b/src/afb-systemd.c index 4faa9fc7..575d9f1b 100644 --- a/src/afb-systemd.c +++ b/src/afb-systemd.c @@ -22,6 +22,7 @@ #include #include +#include #include "afb-systemd.h" #include "jobs.h" @@ -62,3 +63,41 @@ struct sd_bus *afb_systemd_get_system_bus() return sdbusopen((void*)&result, (void*)sd_bus_open_system); } +static char **fds_names() +{ + static char *null; + static char **names; + + int rc; + + if (!names) { + rc = sd_listen_fds_with_names(1, &names); + if (rc <= 0) { + errno = -rc; + names = &null; + } + } + return names; +} + +int systemd_fds_init() +{ + errno = 0; + fds_names(); + return -!!errno; +} + +int systemd_fds_for(const char *name) +{ + int idx; + char **names; + + names = fds_names(); + for (idx = 0 ; names[idx] != NULL ; idx++) + if (!strcmp(name, names[idx])) + return idx + SD_LISTEN_FDS_START; + + errno = ENOENT; + return -1; +} + diff --git a/src/afb-systemd.h b/src/afb-systemd.h index 10f0fbac..ae8d61b0 100644 --- a/src/afb-systemd.h +++ b/src/afb-systemd.h @@ -24,4 +24,7 @@ extern struct sd_event *afb_systemd_get_event_loop(); extern struct sd_bus *afb_systemd_get_user_bus(); extern struct sd_bus *afb_systemd_get_system_bus(); +extern int systemd_fds_init(); +extern int systemd_fds_for(const char *name); + diff --git a/src/main.c b/src/main.c index ff35b54b..e3f4251c 100644 --- a/src/main.c +++ b/src/main.c @@ -51,7 +51,6 @@ #include "afb-common.h" #include "afb-monitor.h" #include "afb-hook.h" -#include "sd-fds.h" #include "afb-debug.h" #include "process-name.h" #include "afb-supervision.h" @@ -654,8 +653,6 @@ int main(int argc, char *argv[]) // let's run this program with a low priority nice(20); - sd_fds_init(); - // ------------- Build session handler & init config ------- main_config = afb_config_parse_arguments(argc, argv); if (main_config->name) { diff --git a/src/sd-fds.c b/src/sd-fds.c deleted file mode 100644 index d904954c..00000000 --- a/src/sd-fds.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright 2017 IoT.bzh - - author: José Bollo - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#define _GNU_SOURCE - -#include -#include -#include - -#include - -static int init_done; -static char *null; -static char **names; - -int sd_fds_init() -{ - int rc; - - if (init_done) - rc = 0; - else { - init_done = 1; - rc = sd_listen_fds_with_names(1, &names); - if (rc <= 0) { - errno = -rc; - rc = -!!rc; - names = &null; - } - } - return rc; -} - -int sd_fds_count() -{ - int count; - - assert(init_done); - for (count = 0 ; names[count] != NULL ; count++); - return count; -} - -int sd_fds_for(const char *name) -{ - int idx; - - assert(init_done); - for (idx = 0 ; names[idx] != NULL ; idx++) - if (!strcmp(name, names[idx])) - return idx + SD_LISTEN_FDS_START; - - errno = ENOENT; - return -1; -} - diff --git a/src/sd-fds.h b/src/sd-fds.h deleted file mode 100644 index f2386a85..00000000 --- a/src/sd-fds.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright 2017 IoT.bzh - - author: José Bollo - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#pragma once - -extern int sd_fds_init(); -extern int sd_fds_count(); -extern int sd_fds_for(const char *name); - -- 2.16.6