+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 afb_systemd_fds_init()
+{
+ errno = 0;
+ fds_names();
+ return -!!errno;
+}
+
+int afb_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;
+}
+