afb-systemd: Integrate sd-fds features
authorJosé Bollo <jose.bollo@iot.bzh>
Wed, 21 Feb 2018 15:07:56 +0000 (16:07 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Wed, 21 Feb 2018 15:07:56 +0000 (16:07 +0100)
Change-Id: I59d194ba675912a42922f0905933b1cea796c78a
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
src/CMakeLists.txt
src/afb-api-ws.c
src/afb-systemd.c
src/afb-systemd.h
src/main.c
src/sd-fds.c [deleted file]
src/sd-fds.h [deleted file]

index 436eaf0..4ef8785 100644 (file)
@@ -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
index 26d0193..7fbe5be 100644 (file)
@@ -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))
index 4faa9fc..575d9f1 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <systemd/sd-event.h>
 #include <systemd/sd-bus.h>
+#include <systemd/sd-daemon.h>
 
 #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;
+}
+
index 10f0fba..ae8d61b 100644 (file)
@@ -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);
+
 
index ff35b54..e3f4251 100644 (file)
@@ -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 (file)
index d904954..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- Copyright 2017 IoT.bzh
-
- author: José Bollo <jose.bollo@iot.bzh>
-
- 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 <assert.h>
-#include <string.h>
-#include <errno.h>
-
-#include <systemd/sd-daemon.h>
-
-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 (file)
index f2386a8..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- Copyright 2017 IoT.bzh
-
- author: José Bollo <jose.bollo@iot.bzh>
-
- 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);
-