From 53d7f0de3feeb8ad93bb8c319c3f0f314c7d31cf Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Wed, 21 Jul 2021 13:16:39 +0000 Subject: New id/typenum mapping, monitor filter, cdb in db_load, etc. Signed-off-by: Laurent Bercot --- src/libs6rcd/s6rc_db_free.c | 16 ----- src/libs6rcd/s6rc_db_load.c | 129 ------------------------------------ src/libs6rcd/s6rc_service_common.c | 16 ----- src/libs6rcd/s6rc_service_resolve.c | 31 --------- 4 files changed, 192 deletions(-) delete mode 100644 src/libs6rcd/s6rc_db_free.c delete mode 100644 src/libs6rcd/s6rc_db_load.c delete mode 100644 src/libs6rcd/s6rc_service_common.c delete mode 100644 src/libs6rcd/s6rc_service_resolve.c (limited to 'src/libs6rcd') diff --git a/src/libs6rcd/s6rc_db_free.c b/src/libs6rcd/s6rc_db_free.c deleted file mode 100644 index 07f4ccd..0000000 --- a/src/libs6rcd/s6rc_db_free.c +++ /dev/null @@ -1,16 +0,0 @@ -/* ISC license. */ - -#include - -#include - -#include "db.h" - -void s6rc_db_free (s6rc_db_t *db) -{ - int e = errno ; - alloc_free(db->argvs) ; - munmap(db->map, db->size) ; - db->map = 0 ; - errno = e ; -} diff --git a/src/libs6rcd/s6rc_db_load.c b/src/libs6rcd/s6rc_db_load.c deleted file mode 100644 index e42afc9..0000000 --- a/src/libs6rcd/s6rc_db_load.c +++ /dev/null @@ -1,129 +0,0 @@ -/* ISC license. */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "db.h" - -#include - -static int gethu32 (buffer *b, SHA256Schedule *ctx, uint32_t *n) -{ - if (buffer_get(b, (char *)n, 4) < 4) return 0 ; - sha256_update(ctx, (char *)n, 4) ; - return 1 ; -} - -int s6rc_db_load (char const *dir, s6rc_db_t *db) -{ - SHA256Schedule ctx = SHA256_INIT() ; - uint32_t ntotal, ndeps, nproducers, storagelen, nargv ; - size_t len = strlen(dir) ; - buffer b ; - int fd ; - char buf[4096] ; - char fn[len + 10] ; - memcpy(fn, dir, len) ; - memcpy(fn + len, "/db_nomap", 10) ; - fd = openc_read(fn) ; - if (fd == -1) return 0 ; - buffer_init(&b, &buffer_read, fd, buf, 4096) ; - { - uint32_t canary ; - if (!gethu32(&b, &canary)) goto err0 ; - if (canary != 0x11223344u) { errno = EILSEQ ; goto err0 ; } - } - if (!gethu32(&b, &ctx, &ntotal)) goto err0 ; - if (!gethu32(&b, &ctx, &ndeps)) goto err0 ; - if (!gethu32(&b, &ctx, &nproducers)) goto err0 ; - if (!gethu32(&b, &ctx, &storagelen)) goto err0 ; - if (!gethu32(&b, &ctx, &nargv)) goto err0 ; - if (nargv > S6RC_ARGV_MAX) goto eproto0 ; - - { - uint32_t argvs[nargv ? nargv : 1] ; - if (buffer_get(&b, (char *)argvs, nargv * 4) < nargv * 4) goto err0 ; - { - char c ; - ssize_t r = buffer_get(&b, &c, 1) ; - if (r < 0) goto err0 ; - if (r) goto eproto0 ; - } - fd_close(fd) ; - sha256_update(&ctx, (char *)argvs, nargv * 4) ; - memcpy(fn + len, "/db", 4) ; - - { - struct stat st ; - void *map ; - fd = openc_read(fn) ; - if (fd == -1) return 0 ; - if (fstat(fd, &st) == -1) goto err0 ; - if (!S_ISREG(st.st_mode)) goto eproto0 ; - if (st.st_size < 8 * S6RC_STYPE_N) goto eproto0 ; - map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0) ; - if (map == MAP_FAILED) goto err0 ; - fd_close(fd) ; - db->size = st.st_size ; - db->map = map ; - } - db->n = (uint32_t const *)db->map ; - if (ntotal != db->n[0] + db->n[1] + db->n[2] + db->n[3] + db->n[4] + db->n[5] + db->n[6] + db->n[7] + db->n[8] + db->n[9]) goto eproto1 ; - - { - ssize_t r ; - memcpy(fn + len, "/hash", 6) ; - r = openreadnclose(fn, buf+32, 33) ; - if (r == 33) goto eproto1 ; - if (r < 32) goto err1 ; - sha256_update(&ctx, db->map, db->size) ; - sha256_final(&ctx, buf) ; - if (memcmp(buf, buf+32, 32)) goto eproto1 ; - } - - db->longruns = (s6rc_longrun_t const *)(db->map + 4 * 2 * S6RC_STYPE_N) ; - db->oneshots = (s6rc_oneshot_t const *)(db->longruns + db->n[S6RC_STYPE_LONGRUN] + db->n[S6RC_STYPE_N + S6RC_STYPE_LONGRUN]) ; - db->externals = (s6rc_external_t const *)(db->oneshots + db->n[S6RC_STYPE_ONESHOT] + db->n[S6RC_STYPE_N + S6RC_STYPE_ONESHOT]) ; - db->bundles = (s6rc_bundle_t const *)(db->externals + db->n[S6RC_STYPE_EXTERNAL] + db->n[S6RC_STYPE_N + S6RC_STYPE_EXTERNAL]) ; - db->virtuals = (s6rc_bundle_t const *)(db->bundles + db->n[S6RC_STYPE_BUNDLE] + db->n[S6RC_STYPE_N + S6RC_STYPE_BUNDLE]) ; - db->deps[0] = (s6rc_id_t const *)(db->virtuals + db->n[S6RC_STYPE_VIRTUAL] + db->n[S6RC_STYPE_N + S6RC_STYPE_VIRTUAL]) ; - db->deps[1] = db->deps[0] + ndeps ; - db->producers = db->deps[1] + ndeps ; - db->deptypes[0] = (uint8_t const *)(db->producers + nproducers) ; - db->deptypes[1] = db->deptypes[0] + ndeps ; - db->storage = (char const *)(db->deptypes[1] + ndeps) ; - if (db->storage + storagelen != db->map + db->size) goto eproto1 ; - - db->argvs = (char const **)alloc(sizeof(char const *) * nargv) ; - if (!db->argvs) goto err1 ; - for (uint32_t i = 0 ; i < nargv ; i++) - db->argvs[i] = argvs[i] ? db->storage + argvs[i] : 0 ; - } - return 1 ; - - eproto1: - errno = EPROTO ; - err1: - { - int e = errno ; - munmap(db->map, db->size) ; - errno = e ; - } - db->map = 0 ; - return 0 ; - - eproto0: - errno = EPROTO ; - err0: - fd_close(fd) ; - return 0 ; -} diff --git a/src/libs6rcd/s6rc_service_common.c b/src/libs6rcd/s6rc_service_common.c deleted file mode 100644 index b91c902..0000000 --- a/src/libs6rcd/s6rc_service_common.c +++ /dev/null @@ -1,16 +0,0 @@ -/* ISC license. */ - -#include "db.h" - -s6rc_common_t const *s6rc_service_common (s6rc_db_t const *db, s6rc_id_t id) -{ - switch (stype(id)) - { - case STYPE_LONGRUN : return &db->longruns[snum(id)].common ; - case STYPE_ONESHOT : return &db->oneshots[snum(id)].common ; - case STYPE_EXTERNAL : return &db->externals[snum(id)].common ; - case STYPE_BUNDLE : return &db->bundles[snum(id)].common ; - case STYPE_VIRTUAL : return &db->virtuals[snum(id)].common ; - default : return 0 ; - } -} diff --git a/src/libs6rcd/s6rc_service_resolve.c b/src/libs6rcd/s6rc_service_resolve.c deleted file mode 100644 index fe863be..0000000 --- a/src/libs6rcd/s6rc_service_resolve.c +++ /dev/null @@ -1,31 +0,0 @@ -/* ISC license. */ - -#include -#include - -#include -#include -#include - -#include "db.h" - -int s6rc_service_resolve (cdb_t *c, char const *s, s6rc_id_t *id, char const **param) -{ - size_t len = strlen(s) ; - char const *p = 0 ; - char pack[5] ; - int r = cdb_find(c, s, len) ; - if (r < 0) return r ; - if (!r) - { - size_t at = byte_chr(s, len, '@') ; - if (at == len) return 0 ; - if (at == len - 1) return (errno = EINVAL, -1) ; - r = cdb_find(c, s, at + 1) ; - if (r <= 0) return r ; - p = s + at + 1 ; - } - uint32_unpack_big(cdb_datapos(c), id) ; - *param = p ; - return 1 ; -} -- cgit v1.3.1