From 691c69e626e4ceb85567a5288348bd04378fd410 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Mon, 30 Aug 2021 19:11:44 +0000 Subject: s6-svlink, s6-svunlink, .h changes Renamed from s6-svdir-(un)link. Doc added. Full functionality added. Still need to be tested. Unrelated: .h names simplified. Signed-off-by: Laurent Bercot --- src/include/s6/fdholder.h | 88 +++++++++++++++++++++++++++++++++++++++++++ src/include/s6/lock.h | 75 ++++++++++++++++++++++++++++++++++++ src/include/s6/s6-fdholder.h | 88 ------------------------------------------- src/include/s6/s6-supervise.h | 80 --------------------------------------- src/include/s6/s6.h | 4 +- src/include/s6/s6lock.h | 73 ----------------------------------- src/include/s6/supervise.h | 78 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 243 insertions(+), 243 deletions(-) create mode 100644 src/include/s6/fdholder.h create mode 100644 src/include/s6/lock.h delete mode 100644 src/include/s6/s6-fdholder.h delete mode 100644 src/include/s6/s6-supervise.h delete mode 100644 src/include/s6/s6lock.h create mode 100644 src/include/s6/supervise.h (limited to 'src/include') diff --git a/src/include/s6/fdholder.h b/src/include/s6/fdholder.h new file mode 100644 index 0000000..62b9ab7 --- /dev/null +++ b/src/include/s6/fdholder.h @@ -0,0 +1,88 @@ +/* ISC license. */ + +#ifndef S6_FDHOLDER_H +#define S6_FDHOLDER_H + +#include +#include +#include +#include +#include + +#define S6_FDHOLDER_ID_SIZE 255 +#define S6_FDHOLDER_MAX 256 + +typedef struct s6_fdholder_s s6_fdholder_t, *s6_fdholder_t_ref ; +struct s6_fdholder_s +{ + unixconnection connection ; +} ; +#define S6_FDHOLDER_ZERO { .connection = UNIXCONNECTION_ZERO } ; + + + /* Starting and ending */ + +#define s6_fdholder_init(a, fd) unixconnection_init(&(a)->connection, fd, fd) +#define s6_fdholder_free(a) unixconnection_free(&(a)->connection) + +extern int s6_fdholder_start (s6_fdholder_t *, char const *, tain const *, tain *) ; +#define s6_fdholder_start_g(a, path, deadline) s6_fdholder_start(a, path, (deadline), &STAMP) +extern void s6_fdholder_end (s6_fdholder_t *) ; + + + /* Individual fds */ + +extern int s6_fdholder_store_async (s6_fdholder_t *, int, char const *, tain const *) ; +extern int s6_fdholder_store (s6_fdholder_t *, int, char const *, tain const *, tain const *, tain *) ; +#define s6_fdholder_store_g(a, fd, id, limit, deadline) s6_fdholder_store(a, fd, id, limit, (deadline), &STAMP) + +extern int s6_fdholder_delete_async (s6_fdholder_t *, char const *) ; +extern int s6_fdholder_delete (s6_fdholder_t *, char const *, tain const *, tain *) ; +#define s6_fdholder_delete_g(a, id, deadline) s6_fdholder_delete(a, id, (deadline), &STAMP) + +typedef struct s6_fdholder_retrieve_result_s s6_fdholder_retrieve_result_t, *s6_fdholder_retrieve_result_t_ref ; +struct s6_fdholder_retrieve_result_s +{ + int fd ; + unsigned char err ; +} ; + +extern int s6_fdholder_retrieve_maybe_delete_async (s6_fdholder_t *, char const *, int) ; +extern unixmessage_handler_func s6_fdholder_retrieve_cb ; +extern int s6_fdholder_retrieve_maybe_delete (s6_fdholder_t *, char const *, int, tain const *, tain *) ; +#define s6_fdholder_retrieve_maybe_delete_g(a, id, h, deadline) s6_fdholder_retrieve_maybe_delete(a, id, h, (deadline), &STAMP) +#define s6_fdholder_retrieve(a, id, deadline, stamp) s6_fdholder_retrieve_maybe_delete(a, id, 0, deadline, stamp) +#define s6_fdholder_retrieve_g(a, id, deadline) s6_fdholder_retrieve(a, id, (deadline), &STAMP) +#define s6_fdholder_retrieve_delete(a, id, deadline, stamp) s6_fdholder_retrieve_maybe_delete(a, id, 1, deadline, stamp) +#define s6_fdholder_retrieve_delete_g(a, id, deadline) s6_fdholder_retrieve_delete(a, id, (deadline), &STAMP) + +typedef struct s6_fdholder_list_result_s s6_fdholder_list_result_t, *s6_fdholder_list_result_t_ref ; +struct s6_fdholder_list_result_s +{ + stralloc *sa ; + unsigned int n ; + unsigned char err ; +} ; + +extern int s6_fdholder_list_async (s6_fdholder_t *) ; +extern unixmessage_handler_func s6_fdholder_list_cb ; +extern int s6_fdholder_list (s6_fdholder_t *, stralloc *, tain const *, tain *) ; +#define s6_fdholder_list_g(a, sa, deadline) s6_fdholder_list(a, sa, (deadline), &STAMP) + + + /* Dumps */ + +typedef struct s6_fdholder_fd_s s6_fdholder_fd_t, *s6_fdholder_fd_t_ref ; +struct s6_fdholder_fd_s +{ + char id[S6_FDHOLDER_ID_SIZE + 1] ; + int fd ; + tain limit ; +} ; + +extern int s6_fdholder_getdump (s6_fdholder_t *, genalloc *, tain const *, tain *) ; +#define s6_fdholder_getdump_g(a, g, deadline) s6_fdholder_getdump(a, g, (deadline), &STAMP) +extern int s6_fdholder_setdump (s6_fdholder_t *, s6_fdholder_fd_t const *, unsigned int, tain const *, tain *) ; +#define s6_fdholder_setdump_g(a, list, n, deadline) s6_fdholder_setdump(a, list, n, (deadline), &STAMP) + +#endif diff --git a/src/include/s6/lock.h b/src/include/s6/lock.h new file mode 100644 index 0000000..e87e001 --- /dev/null +++ b/src/include/s6/lock.h @@ -0,0 +1,75 @@ +/* ISC license. */ + +#ifndef S6_LOCK_H +#define S6_LOCK_H + +#include + +#include +#include +#include +#include + +#include + + + /* Constants */ + +#define S6LOCKD_PROG S6_EXTBINPREFIX "s6lockd" +#define S6LOCKD_HELPER_PROG S6_LIBEXECPREFIX "s6lockd-helper" + +#define S6LOCK_BANNER1 "s6lock v1.0 (b)\n" +#define S6LOCK_BANNER1_LEN (sizeof S6LOCK_BANNER1 - 1) +#define S6LOCK_BANNER2 "s6lock v1.0 (a)\n" +#define S6LOCK_BANNER2_LEN (sizeof S6LOCK_BANNER2 - 1) + + + /* The client handle */ + +typedef struct s6lock_s s6lock_t, *s6lock_t_ref ; +struct s6lock_s +{ + textclient connection ; + genalloc list ; /* array of uint16_t */ + gensetdyn data ; /* set of char */ +} ; +#define S6LOCK_ZERO { .connection = TEXTCLIENT_ZERO, .list = GENALLOC_ZERO, .data = GENSETDYN_INIT(int, 2, 0, 1) } +extern s6lock_t const s6lock_zero ; + + + /* Starting and ending a session */ + +extern int s6lock_start (s6lock_t *, char const *, tain const *, tain *) ; +#define s6lock_start_g(a, ipcpath, deadline) s6lock_start(a, ipcpath, (deadline), &STAMP) +extern int s6lock_startf (s6lock_t *, char const *, tain const *, tain *) ; +#define s6lock_startf_g(a, lockdir, deadline) s6lock_startf(a, lockdir, (deadline), &STAMP) +extern void s6lock_end (s6lock_t *) ; + + + /* Asynchronous primitives */ + +#define s6lock_fd(a) textclient_fd(&(a)->connection) +extern int s6lock_update (s6lock_t *) ; +extern int s6lock_check (s6lock_t *, uint16_t) ; + + + /* Synchronous functions */ + +#define S6LOCK_OPTIONS_SH 0x0000U +#define S6LOCK_OPTIONS_EX 0x0001U + +extern int s6lock_acquire (s6lock_t *, uint16_t *, char const *, uint32_t, tain const *, tain const *, tain *) ; +#define s6lock_acquire_g(a, id, path, options, limit, deadline) s6lock_acquire(a, id, path, options, limit, (deadline), &STAMP) +#define s6lock_acquire_sh(a, id, path, limit, deadline, stamp) s6lock_aquire(a, id, path, S6LOCK_OPTIONS_SH, limit, deadline, stamp) +#define s6lock_acquire_ex(a, id, path, limit, deadline, stamp) s6lock_aquire(a, id, path, S6LOCK_OPTIONS_EX, limit, deadline, stamp) +#define s6lock_acquire_sh_g(a, id, path, limit, deadline) s6lock_acquire_sh(a, id, path, limit, (deadline), &STAMP) +#define s6lock_acquire_ex_g(a, id, path, limit, deadline) s6lock_acquire_ex(a, id, path, limit, (deadline), &STAMP) +extern int s6lock_release (s6lock_t *, uint16_t, tain const *, tain *) ; +#define s6lock_release_g(a, id, deadline) s6lock_release(a, id, (deadline), &STAMP) + +extern int s6lock_wait_and (s6lock_t *, uint16_t const *, unsigned int, tain const *, tain *) ; +#define s6lock_wait_and_g(a, list, len, deadline) s6lock_wait_and(a, list, len, (deadline), &STAMP) +extern int s6lock_wait_or (s6lock_t *, uint16_t const *, unsigned int, tain const *, tain *) ; +#define s6lock_wait_or_g(a, list, len, deadline) s6lock_wait_or(a, list, len, (deadline), &STAMP) + +#endif diff --git a/src/include/s6/s6-fdholder.h b/src/include/s6/s6-fdholder.h deleted file mode 100644 index 62b9ab7..0000000 --- a/src/include/s6/s6-fdholder.h +++ /dev/null @@ -1,88 +0,0 @@ -/* ISC license. */ - -#ifndef S6_FDHOLDER_H -#define S6_FDHOLDER_H - -#include -#include -#include -#include -#include - -#define S6_FDHOLDER_ID_SIZE 255 -#define S6_FDHOLDER_MAX 256 - -typedef struct s6_fdholder_s s6_fdholder_t, *s6_fdholder_t_ref ; -struct s6_fdholder_s -{ - unixconnection connection ; -} ; -#define S6_FDHOLDER_ZERO { .connection = UNIXCONNECTION_ZERO } ; - - - /* Starting and ending */ - -#define s6_fdholder_init(a, fd) unixconnection_init(&(a)->connection, fd, fd) -#define s6_fdholder_free(a) unixconnection_free(&(a)->connection) - -extern int s6_fdholder_start (s6_fdholder_t *, char const *, tain const *, tain *) ; -#define s6_fdholder_start_g(a, path, deadline) s6_fdholder_start(a, path, (deadline), &STAMP) -extern void s6_fdholder_end (s6_fdholder_t *) ; - - - /* Individual fds */ - -extern int s6_fdholder_store_async (s6_fdholder_t *, int, char const *, tain const *) ; -extern int s6_fdholder_store (s6_fdholder_t *, int, char const *, tain const *, tain const *, tain *) ; -#define s6_fdholder_store_g(a, fd, id, limit, deadline) s6_fdholder_store(a, fd, id, limit, (deadline), &STAMP) - -extern int s6_fdholder_delete_async (s6_fdholder_t *, char const *) ; -extern int s6_fdholder_delete (s6_fdholder_t *, char const *, tain const *, tain *) ; -#define s6_fdholder_delete_g(a, id, deadline) s6_fdholder_delete(a, id, (deadline), &STAMP) - -typedef struct s6_fdholder_retrieve_result_s s6_fdholder_retrieve_result_t, *s6_fdholder_retrieve_result_t_ref ; -struct s6_fdholder_retrieve_result_s -{ - int fd ; - unsigned char err ; -} ; - -extern int s6_fdholder_retrieve_maybe_delete_async (s6_fdholder_t *, char const *, int) ; -extern unixmessage_handler_func s6_fdholder_retrieve_cb ; -extern int s6_fdholder_retrieve_maybe_delete (s6_fdholder_t *, char const *, int, tain const *, tain *) ; -#define s6_fdholder_retrieve_maybe_delete_g(a, id, h, deadline) s6_fdholder_retrieve_maybe_delete(a, id, h, (deadline), &STAMP) -#define s6_fdholder_retrieve(a, id, deadline, stamp) s6_fdholder_retrieve_maybe_delete(a, id, 0, deadline, stamp) -#define s6_fdholder_retrieve_g(a, id, deadline) s6_fdholder_retrieve(a, id, (deadline), &STAMP) -#define s6_fdholder_retrieve_delete(a, id, deadline, stamp) s6_fdholder_retrieve_maybe_delete(a, id, 1, deadline, stamp) -#define s6_fdholder_retrieve_delete_g(a, id, deadline) s6_fdholder_retrieve_delete(a, id, (deadline), &STAMP) - -typedef struct s6_fdholder_list_result_s s6_fdholder_list_result_t, *s6_fdholder_list_result_t_ref ; -struct s6_fdholder_list_result_s -{ - stralloc *sa ; - unsigned int n ; - unsigned char err ; -} ; - -extern int s6_fdholder_list_async (s6_fdholder_t *) ; -extern unixmessage_handler_func s6_fdholder_list_cb ; -extern int s6_fdholder_list (s6_fdholder_t *, stralloc *, tain const *, tain *) ; -#define s6_fdholder_list_g(a, sa, deadline) s6_fdholder_list(a, sa, (deadline), &STAMP) - - - /* Dumps */ - -typedef struct s6_fdholder_fd_s s6_fdholder_fd_t, *s6_fdholder_fd_t_ref ; -struct s6_fdholder_fd_s -{ - char id[S6_FDHOLDER_ID_SIZE + 1] ; - int fd ; - tain limit ; -} ; - -extern int s6_fdholder_getdump (s6_fdholder_t *, genalloc *, tain const *, tain *) ; -#define s6_fdholder_getdump_g(a, g, deadline) s6_fdholder_getdump(a, g, (deadline), &STAMP) -extern int s6_fdholder_setdump (s6_fdholder_t *, s6_fdholder_fd_t const *, unsigned int, tain const *, tain *) ; -#define s6_fdholder_setdump_g(a, list, n, deadline) s6_fdholder_setdump(a, list, n, (deadline), &STAMP) - -#endif diff --git a/src/include/s6/s6-supervise.h b/src/include/s6/s6-supervise.h deleted file mode 100644 index c0dc1b6..0000000 --- a/src/include/s6/s6-supervise.h +++ /dev/null @@ -1,80 +0,0 @@ -/* ISC license. */ - -#ifndef S6_SUPERVISE_H -#define S6_SUPERVISE_H - -#include -#include - -#include - -#define S6_SUPERVISE_CTLDIR "supervise" -#define S6_SUPERVISE_EVENTDIR "event" -#define S6_SVSCAN_CTLDIR ".s6-svscan" -#define S6_SVSTATUS_FILENAME S6_SUPERVISE_CTLDIR "/status" -#define S6_SVSTATUS_SIZE 35 -#define S6_DTALLY_FILENAME S6_SUPERVISE_CTLDIR "/death_tally" -#define S6_MAX_DEATH_TALLY 4096 - -extern int s6_svc_ok (char const *) ; -extern int s6_svc_write (char const *, char const *, size_t) ; -extern int s6_svc_writectl (char const *, char const *, char const *, size_t) ; -extern int s6_svc_main (int, char const *const *, char const *, char const *, char const *) ; - -typedef struct s6_svstatus_s s6_svstatus_t, *s6_svstatus_t_ref ; -struct s6_svstatus_s -{ - tain stamp ; - tain readystamp ; - pid_t pid ; - int wstat ; - unsigned int flagpaused : 1 ; - unsigned int flagfinishing : 1 ; - unsigned int flagwant : 1 ; /* unused */ - unsigned int flagwantup : 1 ; - unsigned int flagready : 1 ; - unsigned int flagthrottled : 1 ; -} ; - -#define S6_SVSTATUS_ZERO \ -{ \ - .stamp = TAIN_ZERO, \ - .readystamp = TAIN_ZERO, \ - .pid = 0, \ - .wstat = 0, \ - .flagpaused = 0, \ - .flagfinishing = 0, \ - .flagwant = 1, \ - .flagwantup = 1, \ - .flagready = 1, \ - .flagthrottled = 0 \ -} - -extern void s6_svstatus_pack (char *, s6_svstatus_t const *) ; -extern void s6_svstatus_unpack (char const *, s6_svstatus_t *) ; -extern int s6_svstatus_read (char const *, s6_svstatus_t *) ; -extern int s6_svstatus_write (char const *, s6_svstatus_t const *) ; - -extern int s6_supervise_link (char const *, char const *const *, size_t, char const *, uint32_t, tain const *, tain *) ; -#define s6_supervise_link_g(scdir, servicedirs, n, prefix, options, deadline) s6_supervise_link(scdir, servicedirs, n, prefix, options, (deadline), &STAMP) -extern int s6_supervise_link_names (char const *, char const *const *, char const *const *, size_t, uint32_t, tain const *, tain *) ; -#define s6_supervise_link_names_g(scdir, servicedirs, names, n, options, deadline) s6_supervise_link_names(scdir, servicedirs, names, n, options, (deadline), &STAMP) -extern void s6_supervise_unlink (char const *, char const *, uint32_t) ; - -typedef struct s6_dtally_s s6_dtally_t, *s6_dtally_ref ; -struct s6_dtally_s -{ - tain stamp ; - unsigned char exitcode ; - unsigned char sig ; -} ; -#define S6_DTALLY_ZERO { .stamp = TAIN_ZERO, .exitcode = 0, .sig = 0 } - -#define S6_DTALLY_PACK (TAIN_PACK + 2) - -extern void s6_dtally_pack (char *, s6_dtally_t const *) ; -extern void s6_dtally_unpack (char const *, s6_dtally_t *) ; -extern ssize_t s6_dtally_read (char const *, s6_dtally_t *, size_t) ; -extern int s6_dtally_write (char const *, s6_dtally_t const *, size_t) ; - -#endif diff --git a/src/include/s6/s6.h b/src/include/s6/s6.h index aabcc13..5b32a86 100644 --- a/src/include/s6/s6.h +++ b/src/include/s6/s6.h @@ -4,10 +4,10 @@ #define S6_H #include -#include +#include #include #include #include -#include +#include #endif diff --git a/src/include/s6/s6lock.h b/src/include/s6/s6lock.h deleted file mode 100644 index b1848c7..0000000 --- a/src/include/s6/s6lock.h +++ /dev/null @@ -1,73 +0,0 @@ -/* ISC license. */ - -#ifndef S6LOCK_H -#define S6LOCK_H - -#include -#include -#include -#include -#include -#include - - - /* Constants */ - -#define S6LOCKD_PROG S6_EXTBINPREFIX "s6lockd" -#define S6LOCKD_HELPER_PROG S6_LIBEXECPREFIX "s6lockd-helper" - -#define S6LOCK_BANNER1 "s6lock v1.0 (b)\n" -#define S6LOCK_BANNER1_LEN (sizeof S6LOCK_BANNER1 - 1) -#define S6LOCK_BANNER2 "s6lock v1.0 (a)\n" -#define S6LOCK_BANNER2_LEN (sizeof S6LOCK_BANNER2 - 1) - - - /* The client handle */ - -typedef struct s6lock_s s6lock_t, *s6lock_t_ref ; -struct s6lock_s -{ - textclient connection ; - genalloc list ; /* array of uint16_t */ - gensetdyn data ; /* set of char */ -} ; -#define S6LOCK_ZERO { .connection = TEXTCLIENT_ZERO, .list = GENALLOC_ZERO, .data = GENSETDYN_INIT(int, 2, 0, 1) } -extern s6lock_t const s6lock_zero ; - - - /* Starting and ending a session */ - -extern int s6lock_start (s6lock_t *, char const *, tain const *, tain *) ; -#define s6lock_start_g(a, ipcpath, deadline) s6lock_start(a, ipcpath, (deadline), &STAMP) -extern int s6lock_startf (s6lock_t *, char const *, tain const *, tain *) ; -#define s6lock_startf_g(a, lockdir, deadline) s6lock_startf(a, lockdir, (deadline), &STAMP) -extern void s6lock_end (s6lock_t *) ; - - - /* Asynchronous primitives */ - -#define s6lock_fd(a) textclient_fd(&(a)->connection) -extern int s6lock_update (s6lock_t *) ; -extern int s6lock_check (s6lock_t *, uint16_t) ; - - - /* Synchronous functions */ - -#define S6LOCK_OPTIONS_SH 0x0000U -#define S6LOCK_OPTIONS_EX 0x0001U - -extern int s6lock_acquire (s6lock_t *, uint16_t *, char const *, uint32_t, tain const *, tain const *, tain *) ; -#define s6lock_acquire_g(a, id, path, options, limit, deadline) s6lock_acquire(a, id, path, options, limit, (deadline), &STAMP) -#define s6lock_acquire_sh(a, id, path, limit, deadline, stamp) s6lock_aquire(a, id, path, S6LOCK_OPTIONS_SH, limit, deadline, stamp) -#define s6lock_acquire_ex(a, id, path, limit, deadline, stamp) s6lock_aquire(a, id, path, S6LOCK_OPTIONS_EX, limit, deadline, stamp) -#define s6lock_acquire_sh_g(a, id, path, limit, deadline) s6lock_acquire_sh(a, id, path, limit, (deadline), &STAMP) -#define s6lock_acquire_ex_g(a, id, path, limit, deadline) s6lock_acquire_ex(a, id, path, limit, (deadline), &STAMP) -extern int s6lock_release (s6lock_t *, uint16_t, tain const *, tain *) ; -#define s6lock_release_g(a, id, deadline) s6lock_release(a, id, (deadline), &STAMP) - -extern int s6lock_wait_and (s6lock_t *, uint16_t const *, unsigned int, tain const *, tain *) ; -#define s6lock_wait_and_g(a, list, len, deadline) s6lock_wait_and(a, list, len, (deadline), &STAMP) -extern int s6lock_wait_or (s6lock_t *, uint16_t const *, unsigned int, tain const *, tain *) ; -#define s6lock_wait_or_g(a, list, len, deadline) s6lock_wait_or(a, list, len, (deadline), &STAMP) - -#endif diff --git a/src/include/s6/supervise.h b/src/include/s6/supervise.h new file mode 100644 index 0000000..914bff3 --- /dev/null +++ b/src/include/s6/supervise.h @@ -0,0 +1,78 @@ +/* ISC license. */ + +#ifndef S6_SUPERVISE_H +#define S6_SUPERVISE_H + +#include +#include + +#include + +#define S6_SUPERVISE_CTLDIR "supervise" +#define S6_SUPERVISE_EVENTDIR "event" +#define S6_SVSCAN_CTLDIR ".s6-svscan" +#define S6_SVSTATUS_FILENAME S6_SUPERVISE_CTLDIR "/status" +#define S6_SVSTATUS_SIZE 35 +#define S6_DTALLY_FILENAME S6_SUPERVISE_CTLDIR "/death_tally" +#define S6_MAX_DEATH_TALLY 4096 + +extern int s6_svc_ok (char const *) ; +extern int s6_svc_write (char const *, char const *, size_t) ; +extern int s6_svc_writectl (char const *, char const *, char const *, size_t) ; +extern int s6_svc_main (int, char const *const *, char const *, char const *, char const *) ; + +typedef struct s6_svstatus_s s6_svstatus_t, *s6_svstatus_t_ref ; +struct s6_svstatus_s +{ + tain stamp ; + tain readystamp ; + pid_t pid ; + int wstat ; + unsigned int flagpaused : 1 ; + unsigned int flagfinishing : 1 ; + unsigned int flagwantup : 1 ; + unsigned int flagready : 1 ; +} ; + +#define S6_SVSTATUS_ZERO \ +{ \ + .stamp = TAIN_ZERO, \ + .readystamp = TAIN_ZERO, \ + .pid = 0, \ + .wstat = 0, \ + .flagpaused = 0, \ + .flagfinishing = 0, \ + .flagwantup = 1, \ + .flagready = 1, \ +} + +extern void s6_svstatus_pack (char *, s6_svstatus_t const *) ; +extern void s6_svstatus_unpack (char const *, s6_svstatus_t *) ; +extern int s6_svstatus_read (char const *, s6_svstatus_t *) ; +extern int s6_svstatus_write (char const *, s6_svstatus_t const *) ; + +extern int s6_supervise_link (char const *, char const *const *, size_t, char const *, uint32_t, tain const *, tain *) ; +#define s6_supervise_link_g(scdir, servicedirs, n, prefix, options, deadline) s6_supervise_link(scdir, servicedirs, n, prefix, options, (deadline), &STAMP) +extern int s6_supervise_link_names (char const *, char const *const *, char const *const *, size_t, uint32_t, tain const *, tain *) ; +#define s6_supervise_link_names_g(scdir, servicedirs, names, n, options, deadline) s6_supervise_link_names(scdir, servicedirs, names, n, options, (deadline), &STAMP) +extern void s6_supervise_unlink (char const *, char const *, uint32_t) ; +extern int s6_supervise_unlink_names (char const *, char const *const *, size_t, uint32_t, tain const *, tain *) ; +#define s6_supervise_unlink_names_g(scdir, names, n, options, deadline) s6_supervise_unlink_names(scdir, names, n, options, (deadline), &STAMP) + +typedef struct s6_dtally_s s6_dtally_t, *s6_dtally_ref ; +struct s6_dtally_s +{ + tain stamp ; + unsigned char exitcode ; + unsigned char sig ; +} ; +#define S6_DTALLY_ZERO { .stamp = TAIN_ZERO, .exitcode = 0, .sig = 0 } + +#define S6_DTALLY_PACK (TAIN_PACK + 2) + +extern void s6_dtally_pack (char *, s6_dtally_t const *) ; +extern void s6_dtally_unpack (char const *, s6_dtally_t *) ; +extern ssize_t s6_dtally_read (char const *, s6_dtally_t *, size_t) ; +extern int s6_dtally_write (char const *, s6_dtally_t const *, size_t) ; + +#endif -- cgit v1.3.1