diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2025-09-15 23:15:06 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2025-09-15 23:15:06 +0000 |
| commit | d6d77527fa55d59e47b8e8fa301ab004894bc467 (patch) | |
| tree | 505eb5ffd60fb9136fdddfa14e92a8f6f81375e2 /src/libs6rc | |
| parent | 094f6e3d0284f0ee97615e4433a100208668698a (diff) | |
| download | s6-rc-d6d77527fa55d59e47b8e8fa301ab004894bc467.tar.gz | |
Add s6-rc-set-changestate. FINALLY.
Diffstat (limited to 'src/libs6rc')
| -rw-r--r-- | src/libs6rc/deps-lib/s6rc | 3 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_badsub.c | 22 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_makesvlist.c | 12 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_moveservices.c | 25 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_sv_bcmpr.c | 13 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_sv_cmp.c | 11 | ||||
| -rw-r--r-- | src/libs6rc/s6rc_repo_sv_cmpr.c | 11 |
7 files changed, 52 insertions, 45 deletions
diff --git a/src/libs6rc/deps-lib/s6rc b/src/libs6rc/deps-lib/s6rc index 79ccc20..a155e34 100644 --- a/src/libs6rc/deps-lib/s6rc +++ b/src/libs6rc/deps-lib/s6rc @@ -31,7 +31,8 @@ s6rc_repo_moveservices.o s6rc_repo_refcompile.o s6rc_repo_setcompile.o s6rc_repo_subnames.o -s6rc_repo_sv_cmp.o +s6rc_repo_sv_bcmpr.o +s6rc_repo_sv_cmpr.o s6rc_repo_sync.o s6rc_sanitize_dir.o s6rc_servicedir_internal.o diff --git a/src/libs6rc/s6rc_repo_badsub.c b/src/libs6rc/s6rc_repo_badsub.c index cba02b8..1848870 100644 --- a/src/libs6rc/s6rc_repo_badsub.c +++ b/src/libs6rc/s6rc_repo_badsub.c @@ -13,22 +13,12 @@ #include <s6-rc/repo.h> -static int s6rc_repo_sv_bcmpr (void const *a, void const *b, void *aux) -{ - char const *key = a ; - s6rc_repo_sv const *elem = b ; - stralloc *sa = aux ; - return strcmp(key, sa->s + elem->pos) ; -} - static int strqcmp (void const *a, void const *b) { - char const *const *aa = a ; - char const *const *bb = b ; - return strcmp(*aa, *bb) ; + return strcmp(*(char const *const *)a, *(char const *const *)b) ; } -int s6rc_repo_badsub (char const *repo, char const *set, char const **services, size_t n, uint8_t newsub, s6rc_repo_sv const *svlist, size_t nlist, stralloc *sa, genalloc *badga) +int s6rc_repo_badsub (char const *repo, char const *set, char const **services, uint32_t n, uint8_t newsub, s6rc_repo_sv const *svlist, uint32_t ntot, stralloc *sa, genalloc *badga) { int sawasnull = !!sa->s ; size_t sabase = sa->len ; @@ -43,12 +33,12 @@ int s6rc_repo_badsub (char const *repo, char const *set, char const **services, fulln = genalloc_len(size_t, &fulldeps) ; ind = genalloc_s(size_t, &fulldeps) ; - for (size_t i = 0 ; i < fulln ; i++) + for (uint32_t i = 0 ; i < fulln ; i++) { s6rc_repo_sv *p ; char const *cur = sa->s + ind[i] ; if (bsearch(&cur, services, n, sizeof(char const *), &strqcmp)) continue ; - p = bsearchr(cur, svlist, nlist, sizeof(s6rc_repo_sv), &s6rc_repo_sv_bcmpr, sa) ; + p = bsearchr(cur, svlist, ntot, sizeof(s6rc_repo_sv), &s6rc_repo_sv_bcmpr, sa->s) ; if (!p) { strerr_warnfu6x("find service ", cur, " in set ", set, " of repository ", repo) ; @@ -56,8 +46,8 @@ int s6rc_repo_badsub (char const *repo, char const *set, char const **services, } if (newsub >= 2 ? p->sub < newsub : p->sub > newsub) { - uint32_t n = p - svlist ; - if (!genalloc_append(uint32_t, badga, &n)) + uint32_t k = p - svlist ; + if (!genalloc_append(uint32_t, badga, &k)) { strerr_warnfu1sys("make bad sub list") ; goto err ; diff --git a/src/libs6rc/s6rc_repo_makesvlist.c b/src/libs6rc/s6rc_repo_makesvlist.c index 9cf0faa..3567bf7 100644 --- a/src/libs6rc/s6rc_repo_makesvlist.c +++ b/src/libs6rc/s6rc_repo_makesvlist.c @@ -12,8 +12,6 @@ #include <s6-rc/repo.h> -#define dienomem() strerr_diefu1sys(111, "stralloc_catb") - static inline int s6rc_repo_addsub (char const *sub, uint8_t i, stralloc *sa, genalloc *ga) { DIR *dir = opendir(sub) ; @@ -27,12 +25,16 @@ static inline int s6rc_repo_addsub (char const *sub, uint8_t i, stralloc *sa, ge if (!d) break ; if (d->d_name[0] == '.') continue ; - if (!stralloc_cats(sa, d->d_name) || !stralloc_0(sa)) dienomem() ; - if (!genalloc_append(s6rc_repo_sv, ga, &sv)) dienomem() ; + if (!stralloc_cats(sa, d->d_name) || !stralloc_0(sa) + || !genalloc_append(s6rc_repo_sv, ga, &sv)) goto nomem ; } dir_close(dir) ; if (errno) { strerr_warnfu2sys("readdir ", sub) ; return 0 ; } return 1 ; + + nomem: + strerr_warnfu1sys("stralloc_catb") ; + return 0 ; } int s6rc_repo_makesvlist (char const *repo, char const *set, stralloc *sa, genalloc *ga) @@ -54,7 +56,7 @@ int s6rc_repo_makesvlist (char const *repo, char const *set, stralloc *sa, genal memcpy(subfn + repolen + setlen + 10, s6rc_repo_subnames[i], 7) ; if (!s6rc_repo_addsub(subfn, i, sa, ga)) goto err ; } - qsortr(genalloc_s(s6rc_repo_sv, ga), genalloc_len(s6rc_repo_sv, ga), sizeof(s6rc_repo_sv), &s6rc_repo_sv_cmp, sa) ; + qsortr(genalloc_s(s6rc_repo_sv, ga), genalloc_len(s6rc_repo_sv, ga), sizeof(s6rc_repo_sv), &s6rc_repo_sv_cmpr, sa->s) ; return 1 ; err: diff --git a/src/libs6rc/s6rc_repo_moveservices.c b/src/libs6rc/s6rc_repo_moveservices.c index fb4bf9f..3cc3b92 100644 --- a/src/libs6rc/s6rc_repo_moveservices.c +++ b/src/libs6rc/s6rc_repo_moveservices.c @@ -9,14 +9,14 @@ #include <s6-rc/repo.h> -int s6rc_repo_moveservices (char const *repo, char const *set, char const *const *services, size_t n, uint8_t oldsub, uint8_t newsub, unsigned int verbosity) +int s6rc_repo_moveservices (char const *repo, char const *set, s6rc_repo_sv const *services, uint32_t n, uint8_t newsub, char const *storage, unsigned int verbosity) { size_t repolen = strlen(repo) ; size_t setlen = strlen(set) ; size_t maxserviceslen = 0 ; - for (size_t i = 0 ; i < n ; i++) + for (uint32_t i = 0 ; i < n ; i++) { - size_t len = strlen(services[i]) ; + size_t len = strlen(storage + services[i].pos) ; if (len > maxserviceslen) maxserviceslen = len ; } char oldfn[repolen + setlen + maxserviceslen + 18] ; @@ -25,20 +25,21 @@ int s6rc_repo_moveservices (char const *repo, char const *set, char const *const memcpy(oldfn + repolen, "/sources/", 9) ; memcpy(oldfn + repolen + 9, set, setlen) ; oldfn[repolen + 9 + setlen] = '/' ; - memcpy(oldfn + repolen + 10 + setlen, s6rc_repo_subnames[oldsub], 6) ; oldfn[repolen + 16 + setlen] = '/' ; - memcpy(newfn, oldfn, repolen + 17 + setlen) ; + memcpy(newfn, oldfn, repolen + 10 + setlen) ; memcpy(newfn + repolen + 10 + setlen, s6rc_repo_subnames[newsub], 6) ; + newfn[repolen + 16 + setlen] = '/' ; - for (size_t i = 0 ; i < n ; i++) + for (uint32_t i = 0 ; i < n ; i++) { - size_t len = strlen(services[i]) ; - memcpy(oldfn + repolen + setlen + 17, services[i], len + 1) ; - memcpy(newfn + repolen + setlen + 17, services[i], len + 1) ; + size_t len = strlen(storage + services[i].pos) ; + memcpy(oldfn + repolen + 10, s6rc_repo_subnames[services[i].sub], 6) ; + memcpy(oldfn + repolen + setlen + 17, storage + services[i].pos, len + 1) ; + memcpy(newfn + repolen + setlen + 17, storage + services[i].pos, len + 1) ; if (access(newfn, F_OK) == 0) { if (verbosity >= 2) - strerr_warni8x("service ", services[i], " already existed in subset ", s6rc_repo_subnames[newsub], " of set ", set, " in repository ", repo) ; + strerr_warni8x("service ", storage + services[i].pos, " already existed in subset ", s6rc_repo_subnames[newsub], " of set ", set, " in repository ", repo) ; } else if (errno != ENOENT) { @@ -50,9 +51,9 @@ int s6rc_repo_moveservices (char const *repo, char const *set, char const *const strerr_warnfu4sys("rename ", oldfn, " to ", newfn) ; return 0 ; } - if (verbosity >= 3) + if (verbosity >= 4) { - strerr_warnt10x("repository ", repo, ", set ", set, ", from subset ", s6rc_repo_subnames[oldsub], " to subset ", s6rc_repo_subnames[newsub], ": successfully moved service ", services[i]) ; + strerr_warnt10x("repository ", repo, ", set ", set, ", from subset ", s6rc_repo_subnames[services[i].sub], " to subset ", s6rc_repo_subnames[newsub], ": successfully moved service ", storage + services[i].pos) ; } } return 1 ; diff --git a/src/libs6rc/s6rc_repo_sv_bcmpr.c b/src/libs6rc/s6rc_repo_sv_bcmpr.c new file mode 100644 index 0000000..bcc4d80 --- /dev/null +++ b/src/libs6rc/s6rc_repo_sv_bcmpr.c @@ -0,0 +1,13 @@ +/* ISC license. */ + +#include <string.h> + +#include <s6-rc/repo.h> + +int s6rc_repo_sv_bcmpr (void const *a, void const *b, void *aux) +{ + char const *key = a ; + s6rc_repo_sv const *elem = b ; + char const *s = aux ; + return strcmp(key, s + elem->pos) ; +} diff --git a/src/libs6rc/s6rc_repo_sv_cmp.c b/src/libs6rc/s6rc_repo_sv_cmp.c deleted file mode 100644 index 472e472..0000000 --- a/src/libs6rc/s6rc_repo_sv_cmp.c +++ /dev/null @@ -1,11 +0,0 @@ -/* ISC license. */ - -#include <s6-rc/repo.h> - -int s6rc_repo_sv_cmp (void const *a, void const *b, void *aux) -{ - s6rc_repo_sv const *aa = a ; - s6rc_repo_sv const *bb = b ; - stralloc *sa = aux ; - return strcmp(sa->s + aa->pos, sa->s + bb->pos) ; -} diff --git a/src/libs6rc/s6rc_repo_sv_cmpr.c b/src/libs6rc/s6rc_repo_sv_cmpr.c new file mode 100644 index 0000000..80b07c9 --- /dev/null +++ b/src/libs6rc/s6rc_repo_sv_cmpr.c @@ -0,0 +1,11 @@ +/* ISC license. */ + +#include <s6-rc/repo.h> + +int s6rc_repo_sv_cmpr (void const *a, void const *b, void *aux) +{ + s6rc_repo_sv const *aa = a ; + s6rc_repo_sv const *bb = b ; + char const *s = aux ; + return strcmp(s + aa->pos, s + bb->pos) ; +} |
