aboutsummaryrefslogtreecommitdiffstats
path: root/src/s6/process_status.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/s6/process_status.c')
-rw-r--r--src/s6/process_status.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/src/s6/process_status.c b/src/s6/process_status.c
deleted file mode 100644
index a13938d..0000000
--- a/src/s6/process_status.c
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ISC license. */
-
-#include <string.h>
-#include <sys/wait.h>
-#include <errno.h>
-
-#include <skalibs/posixplz.h>
-#include <skalibs/uint64.h>
-#include <skalibs/env.h>
-#include <skalibs/buffer.h>
-#include <skalibs/strerr.h>
-#include <skalibs/gol.h>
-#include <skalibs/cspawn.h>
-#include <skalibs/djbunix.h>
-
-#include <s6/config.h>
-
-#include "s6-internal.h"
-
-#define USAGE "s6 process status [ -l|--with-logs ] services..."
-#define dieusage() strerr_dieusage(100, USAGE)
-
-static int spawn_and_wait (char const *const *argv)
-{
- int wstat ;
- pid_t r ;
- pid_t pid = cspawn(argv[0], argv, (char const *const *)environ, 0, 0, 0) ;
- if (!pid)
- {
- if (g->verbosity) strerr_warnwu2sys("spawn ", argv[0]) ;
- return 1 ;
- }
- r = wait_pid(pid, &wstat) ;
- if (r != pid)
- {
- if (g->verbosity) strerr_warnwu2sys("wait for ", argv[0]) ;
- return 1 ;
- }
- return !!WIFSIGNALED(wstat) || !!WEXITSTATUS(wstat) ;
-}
-
-static int do_status (char const *dir, int withlog)
-{
- int e ;
- char const *argv[4] = { S6_EXTBINPREFIX "s6-svstat", "--", dir, 0 } ;
- size_t dirlen = strlen(dir) ;
- buffer_puts(buffer_1, dir) ;
- buffer_putsflush(buffer_1, ": ") ;
- e = spawn_and_wait(argv) ;
- if (withlog && (dirlen < 5 || strcmp(dir + dirlen - 4, "/log")))
- {
- struct stat st ;
- char log[dirlen + 5] ;
- memcpy(log, dir, dirlen) ;
- memcpy(log + dirlen, "/log", 5) ;
- if (stat(log, &st) < 0)
- {
- if (errno != ENOENT)
- {
- if (g->verbosity) strerr_warnwu2sys("stat", log) ;
- e = 1 ;
- }
- }
- else if (S_ISDIR(st.st_mode))
- {
- argv[2] = log ;
- buffer_puts(buffer_1, log) ;
- buffer_putsflush(buffer_1, ": ") ;
- e |= spawn_and_wait(argv) ;
- }
- }
- return e ;
-}
-
-
-enum golb_e
-{
- GOLB_WITHLOGS,
- GOLB_N
-} ;
-
-static gol_bool const rgolb[1] =
-{
- { .so = 'l', .lo = "with-logs", .clear = 0, .set = 1 << GOLB_WITHLOGS }
-} ;
-
-
-int process_status (char const *const *argv)
-{
- size_t scandirlen = strlen(g->dirs.scan) ;
- uint64_t wgolb = 0 ;
- int e = 0 ;
- PROG = "s6 process status" ;
-
- argv += gol_argv(argv, rgolb, 1, 0, 0, &wgolb, 0) ;
- if (!argv) dieusage() ;
- process_check_services(argv, env_len(argv)) ;
- for (; *argv ; argv++)
- {
- size_t len = strlen(*argv) ;
- char path[scandirlen + len + 2] ;
- memcpy(path, g->dirs.scan, scandirlen) ;
- path[scandirlen] = '/' ;
- memcpy(path + scandirlen + 1, *argv, len+1) ;
- if (do_status(path, !!(wgolb & 1 << GOLB_WITHLOGS))) e = 1 ;
- }
- return e ;
-}