aboutsummaryrefslogtreecommitdiffstats
path: root/src/repo
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-10-09 00:59:02 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-10-09 00:59:02 +0000
commitc71344185cc93d9322513a1d9506cb14b1c308a2 (patch)
treef52094f03bc4e18e97e1c27786b55c1738a76f7c /src/repo
parenta6883e06261447cec639c6d260270ec0664c2153 (diff)
downloads6-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/s6rcrepo3
-rw-r--r--src/repo/s6rc_repo_read_major.c30
-rw-r--r--src/repo/s6rc_repo_setuptodate.c2
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) ;