aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rcd
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6rcd')
-rw-r--r--src/libs6rcd/s6rc_db_free.c16
-rw-r--r--src/libs6rcd/s6rc_db_load.c129
-rw-r--r--src/libs6rcd/s6rc_service_common.c16
-rw-r--r--src/libs6rcd/s6rc_service_resolve.c31
4 files changed, 0 insertions, 192 deletions
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 <errno.h>
-
-#include <skalibs/alloc.h>
-
-#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 <stdint.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-
-#include <skalibs/uint32.h>
-#include <skalibs/alloc.h>
-#include <skalibs/buffer.h>
-#include <skalibs/djbunix.h>
-#include <skalibs/sha256.h>
-
-#include "db.h"
-
-#include <skalibs/posixishard.h>
-
-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 <string.h>
-#include <errno.h>
-
-#include <skalibs/uint32.h>
-#include <skalibs/bytestr.h>
-#include <skalibs/cdb.h>
-
-#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 ;
-}