aboutsummaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/s6-rc/repo.h2
-rw-r--r--src/include/s6-rc/s6rc-utils.h16
2 files changed, 16 insertions, 2 deletions
diff --git a/src/include/s6-rc/repo.h b/src/include/s6-rc/repo.h
index 0607977..6ecec15 100644
--- a/src/include/s6-rc/repo.h
+++ b/src/include/s6-rc/repo.h
@@ -25,6 +25,8 @@ extern int s6rc_repo_ls (char const *, stralloc *, genalloc *) ;
extern char const s6rc_repo_rxnames[4][7] ;
+extern uint32_t s6rc_repo_read_major (char const *) ; /* the major a db was compiled with */
+
extern int s6rc_repo_makestores (char const *, char const *const *, uint16_t, char *) ;
extern int s6rc_repo_fillset (char const *, char const *, char const *const *, uint32_t) ;
diff --git a/src/include/s6-rc/s6rc-utils.h b/src/include/s6-rc/s6rc-utils.h
index e453ade..1058dd1 100644
--- a/src/include/s6-rc/s6rc-utils.h
+++ b/src/include/s6-rc/s6rc-utils.h
@@ -6,6 +6,7 @@
#include <sys/types.h>
#include <stdint.h>
+#include <skalibs/uint16.h>
#include <skalibs/stralloc.h>
#include <s6-rc/s6rc-db.h>
@@ -24,7 +25,18 @@ extern int s6rc_livedir_canon (char const **) ;
extern int s6rc_live_state_size (char const *, uint32_t *, uint32_t *) ;
extern int s6rc_live_state_read (char const *, unsigned char *, uint32_t) ;
-extern uint32_t s6rc_get_major (char const *) ; /* always pass S6RC_VERSION */
-extern uint32_t s6rc_read_major (char const *) ; /* the major a db was compiled with */
+static inline uint32_t s6rc_get_major (char const *s)
+{
+ size_t len = 0, l ;
+ uint32_t acc = 0 ;
+ uint16_t u ;
+ l = uint16_scan(s + len, &u) ;
+ if (!l || s[len + l++] != '.') return 0 ;
+ len += l ; acc = acc << 16 | u ;
+ l = uint16_scan(s + len, &u) ;
+ if (!l || s[len + l++] != '.') return 0 ;
+ len += l ; acc = acc << 16 | u ;
+ return acc ;
+}
#endif