diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-03-15 10:17:41 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-03-17 13:01:40 +0100 |
commit | 2a8b46d16ea5d0c99831e95b47cab037f220f7af (patch) | |
tree | e4759270fb131389e04141429c96aad9667ff154 /src/utils-systemd.c | |
parent | cdd05aa3e66a876dba01f04173d817b9e5e039a0 (diff) |
utils-systemd: introduction of systemd interface
Isolate the interface to systemd.
Change-Id: I03ea654da9fab2df0e6eec980b0e5623487d1b73
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/utils-systemd.c')
-rw-r--r-- | src/utils-systemd.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/utils-systemd.c b/src/utils-systemd.c new file mode 100644 index 0000000..757a52c --- /dev/null +++ b/src/utils-systemd.c @@ -0,0 +1,77 @@ +/* + 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 <stdlib.h> +#include <stdio.h> +#include <errno.h> +#include <string.h> +#include <poll.h> +#include <assert.h> + +#include <systemd/sd-bus.h> +#include <systemd/sd-bus-protocol.h> + +#include "utils-systemd.h" + +#if !defined(SYSTEMD_UNITS_ROOT) +# define SYSTEMD_UNITS_ROOT "/usr/local/lib/systemd" +#endif + +int systemd_get_unit_path(char *path, size_t pathlen, int isuser, const char *unit, const char *uext) +{ + int rc = snprintf(path, pathlen, "%s/%s/%s.%s", + SYSTEMD_UNITS_ROOT, + isuser ? "user" : "system", + unit, + uext); + + if (rc >= 0 && (size_t)rc >= pathlen) { + errno = ENAMETOOLONG; + rc = -1; + } + return rc; +} + +int systemd_get_wants_path(char *path, size_t pathlen, int isuser, const char *wanter, const char *unit, const char *uext) +{ + int rc = snprintf(path, pathlen, "%s/%s/%s.wants/%s.%s", + SYSTEMD_UNITS_ROOT, + isuser ? "user" : "system", + wanter, + unit, + uext); + + if (rc >= 0 && (size_t)rc >= pathlen) { + errno = ENAMETOOLONG; + rc = -1; + } + return rc; +} + +int systemd_get_wants_target(char *path, size_t pathlen, const char *unit, const char *uext) +{ + int rc = snprintf(path, pathlen, "../%s.%s", unit, uext); + + if (rc >= 0 && (size_t)rc >= pathlen) { + errno = ENAMETOOLONG; + rc = -1; + } + return rc; +} + |