diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-22 22:05:56 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-10-22 22:05:56 +0000 |
| commit | e0bcc0ef3466b7b5fc776d2e78d7e7ec027810c0 (patch) | |
| tree | d9686a3c25525760ef9ce5ed5594ec382b3fb6e7 /src/libs6rc/s6rc_repo_getserviceflags.c | |
| parent | 3b9836248ed7f5164140d63e96ece21973fc43f7 (diff) | |
| download | s6-rc-e0bcc0ef3466b7b5fc776d2e78d7e7ec027810c0.tar.gz | |
Separate libs6rcrepo
Diffstat (limited to 'src/libs6rc/s6rc_repo_getserviceflags.c')
| -rw-r--r-- | src/libs6rc/s6rc_repo_getserviceflags.c | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/src/libs6rc/s6rc_repo_getserviceflags.c b/src/libs6rc/s6rc_repo_getserviceflags.c deleted file mode 100644 index 0ad68e7..0000000 --- a/src/libs6rc/s6rc_repo_getserviceflags.c +++ /dev/null @@ -1,70 +0,0 @@ -/* ISC license. */ - -#include <sys/wait.h> -#include <string.h> -#include <unistd.h> -#include <errno.h> - -#include <skalibs/posixplz.h> -#include <skalibs/uint32.h> -#include <skalibs/types.h> -#include <skalibs/strerr.h> -#include <skalibs/cspawn.h> -#include <skalibs/djbunix.h> - -#include <s6-rc/config.h> -#include <s6-rc/repo.h> - -#include <skalibs/posixishard.h> - -int s6rc_repo_getserviceflags (char const *repo, char const *name, uint32_t *flags) -{ - size_t repolen = strlen(repo) ; - ssize_t r ; - pid_t pid ; - int fd ; - int wstat ; - char flagstr[10] ; - char refdb[repolen + 15] ; - char const *argv[8] = { S6RC_BINPREFIX "s6-rc-db", "-c", refdb, "-b", "--", "flags", name, 0 } ; - - memcpy(refdb, repo, repolen) ; - memcpy(refdb + repolen, "/compiled/.ref", 15) ; - pid = child_spawn1_pipe(argv[0], argv, (char const *const *)environ, &fd, 1) ; - if (!pid) { strerr_warnfu2sys("spawn ", argv[0]) ; return -1 ; } - r = readnclose(fd, flagstr, 10) ; - if (r != 9) - { - if (r == 10) goto err ; - else if (r >= 0) errno = EPIPE ; - strerr_warnfu2sys("read output from ", argv[0]) ; - return -1 ; - } - if (wait_pid(pid, &wstat) == -1) - { - strerr_warnfu2sys("wait for ", argv[0]) ; - return -1 ; - } - if (WIFSIGNALED(wstat)) - { - char fmt[UINT_FMT] ; - fmt[uint_fmt(fmt, WTERMSIG(wstat))] = 0 ; - strerr_warnf3x(argv[0], " crashed with signal ", fmt) ; - return -1 ; - } - if (WEXITSTATUS(wstat)) - { - char fmt[UINT_FMT] ; - fmt[uint_fmt(fmt, WEXITSTATUS(wstat))] = 0 ; - strerr_warnf3x(argv[0], " exited with code ", fmt) ; - return (WEXITSTATUS(wstat) < 99) - 1 ; - } - flagstr[8] = 0 ; - if (!uint320_xscan(flagstr, flags)) goto err ; - return 1 ; - - err: - strerr_warnf2x("invalid output from ", S6RC_BINPREFIX "s6-rc-db") ; - errno = EPROTO ; - return -1 ; -} |
