summaryrefslogtreecommitdiff
path: root/src/libs6/s6_svstatus_unpack.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6/s6_svstatus_unpack.c')
-rw-r--r--src/libs6/s6_svstatus_unpack.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/libs6/s6_svstatus_unpack.c b/src/libs6/s6_svstatus_unpack.c
new file mode 100644
index 0000000..cce6989
--- /dev/null
+++ b/src/libs6/s6_svstatus_unpack.c
@@ -0,0 +1,29 @@
+/* ISC license. */
+
+#include <skalibs/uint32.h>
+#include <skalibs/tai.h>
+#include <s6/s6-supervise.h>
+
+void s6_svstatus_unpack (char const *pack, s6_svstatus_t_ref sv)
+{
+ uint32 pid ;
+ tain_unpack(pack, &sv->stamp) ;
+ uint32_unpack(pack + 12, &pid) ;
+ sv->pid = (int)pid ;
+ sv->flagpaused = pack[16] & 1 ;
+ sv->flagfinishing = (pack[16] >> 1) & 1 ;
+ switch (pack[17])
+ {
+ case 'u' :
+ sv->flagwant = 1 ;
+ sv->flagwantup = 1 ;
+ break ;
+ case 'd' :
+ sv->flagwant = 1 ;
+ sv->flagwantup = 0 ;
+ break ;
+ default :
+ sv->flagwant = 0 ;
+ sv->flagwantup = 0 ;
+ }
+}