aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_service_recheck_instance.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2021-07-21 13:16:39 +0000
committerLaurent Bercot <ska@appnovation.com>2021-07-21 13:16:39 +0000
commit53d7f0de3feeb8ad93bb8c319c3f0f314c7d31cf (patch)
treeba85733fc50c6f1ee56261cbd33328e4c78af435 /src/libs6rc/s6rc_service_recheck_instance.c
parent89a440efc603e6d6c7fa85b01a5a904baff5cd26 (diff)
downloads6-rc-53d7f0de3feeb8ad93bb8c319c3f0f314c7d31cf.tar.gz
New id/typenum mapping, monitor filter, cdb in db_load, etc.
Signed-off-by: Laurent Bercot <ska@appnovation.com>
Diffstat (limited to 'src/libs6rc/s6rc_service_recheck_instance.c')
-rw-r--r--src/libs6rc/s6rc_service_recheck_instance.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/libs6rc/s6rc_service_recheck_instance.c b/src/libs6rc/s6rc_service_recheck_instance.c
new file mode 100644
index 0000000..b91ea2e
--- /dev/null
+++ b/src/libs6rc/s6rc_service_recheck_instance.c
@@ -0,0 +1,31 @@
+/* ISC license. */
+
+#include <string.h>
+
+#include <skalibs/uint32.h>
+#include <skalibs/cdb.h>
+
+#include <s6-rc/db.h>
+
+int s6rc_service_recheck_instance (s6rc_db_t const *db, cdb_t *c, uint32_t *id, char const **param)
+{
+ uint8_t type ;
+ uint32_t num ;
+ s6rc_service_typenum(db->n, *id) ;
+ if (type < S6RC_STYPE_N) return 0 ;
+ else
+ {
+ s6rc_common_t *common = s6rc_service_common(db->n, type, num) ;
+ size_t namelen = strlen(db->storage + common->name) ;
+ size_t paramlen = strlen(*param) ;
+ int r ;
+ char tmp[namelen + paramlen] ;
+ memcpy(tmp, db->storage + common->name, namelen) ;
+ memcpy(tmp + namelen, *param, paramlen) ;
+ r = cdb_find(c, tmp, namelen + paramlen) ;
+ if (r <= 0) return r ;
+ }
+ uint32_unpack_big(cdb_datapos(c), id) ;
+ *param = 0 ;
+ return 1 ;
+}