diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2026-10-09 00:59:02 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2026-10-09 00:59:02 +0000 |
| commit | c71344185cc93d9322513a1d9506cb14b1c308a2 (patch) | |
| tree | f52094f03bc4e18e97e1c27786b55c1738a76f7c /src/repo | |
| parent | a6883e06261447cec639c6d260270ec0664c2153 (diff) | |
| download | s6-rc-c71344185cc93d9322513a1d9506cb14b1c308a2.tar.gz | |
But this day is not today, so screw it. We gotta keep em separated
Diffstat (limited to 'src/repo')
| -rw-r--r-- | src/repo/deps-lib/s6rcrepo | 3 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_read_major.c | 30 | ||||
| -rw-r--r-- | src/repo/s6rc_repo_setuptodate.c | 2 |
3 files changed, 32 insertions, 3 deletions
diff --git a/src/repo/deps-lib/s6rcrepo b/src/repo/deps-lib/s6rcrepo index 1f1cfa1..aee5f34 100644 --- a/src/repo/deps-lib/s6rcrepo +++ b/src/repo/deps-lib/s6rcrepo @@ -21,6 +21,7 @@ s6rc_repo_makestores.o s6rc_repo_makesvlist.o s6rc_repo_makesvlist_byname.o s6rc_repo_moveservices.o +s6rc_repo_read_major.o s6rc_repo_removeinternals.o s6rc_repo_rxnames.o s6rc_repo_sanitize_setname.o @@ -37,7 +38,5 @@ s6rc_repo_syncset_tmp.o s6rc_repo_touch.o s6rc_repo_touchset.o s6rc_repo_type_check.o --ls6rc --ls6 -lskarnet ${SPAWN_LIB} diff --git a/src/repo/s6rc_repo_read_major.c b/src/repo/s6rc_repo_read_major.c new file mode 100644 index 0000000..08d646b --- /dev/null +++ b/src/repo/s6rc_repo_read_major.c @@ -0,0 +1,30 @@ +/* ISC license. */ + +#include <string.h> +#include <stdint.h> +#include <errno.h> + +#include <skalibs/uint32.h> +#include <skalibs/djbunix.h> + +#include <s6-rc/repo.h> + +#include <skalibs/posixishard.h> + +uint32_t s6rc_repo_read_major (char const *compiled) +{ + size_t clen = strlen(compiled) ; + ssize_t r ; + uint32_t res ; + char tmp[UINT32_FMT] ; + char fn[clen + 7] ; + memcpy(fn, compiled, clen) ; + memcpy(fn + clen, "/major", 7) ; + r = openreadnclose(fn, tmp, UINT32_FMT) ; + if (r == -1) return errno == ENOENT ? 7 : 0 ; /* up to 0.7.0.0 doesn't have db/major */ + if (!r) return 0 ; + if (tmp[r] != '\n') return (errno = EPROTO, 0) ; + tmp[r] = 0 ; + if (uint320_scan(tmp, &res) != r) return (errno = EPROTO, 0) ; + return res ; +} diff --git a/src/repo/s6rc_repo_setuptodate.c b/src/repo/s6rc_repo_setuptodate.c index b6bd35d..f01143f 100644 --- a/src/repo/s6rc_repo_setuptodate.c +++ b/src/repo/s6rc_repo_setuptodate.c @@ -41,7 +41,7 @@ int s6rc_repo_setuptodate (char const *repo, char const *set) return -1 ; } { - uint32_t version = s6rc_read_major(dstfn) ; + uint32_t version = s6rc_repo_read_major(dstfn) ; if (!version) { strerr_warnfusys("read major version from ", dstfn) ; |
