aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2026-10-05 11:00:27 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2026-10-05 11:00:27 +0000
commit9f4ba23454acf1d3925ffb7ea2123c9b19c2bf24 (patch)
tree21299b2faf4e441ca3d5f39cf0520bce587e3ba7 /src
parent3245c92eaa3528a4176e05ab9beaa9718afc8868 (diff)
downloads6-rc-9f4ba23454acf1d3925ffb7ea2123c9b19c2bf24.tar.gz
s6-rc-compile: accept direct dependencies on s6rc- services
Diffstat (limited to 'src')
-rw-r--r--src/s6-rc/s6-rc-compile.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/src/s6-rc/s6-rc-compile.c b/src/s6-rc/s6-rc-compile.c
index 0d4e208..83e751c 100644
--- a/src/s6-rc/s6-rc-compile.c
+++ b/src/s6-rc/s6-rc-compile.c
@@ -276,7 +276,7 @@ static inline int uint_uniq (unsigned int const *list, unsigned int n, unsigned
return 1 ;
}
-static int add_namelist (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+static int add_namelist_maycheck (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n, int docheck)
{
buffer b ;
size_t start = satmp.len ;
@@ -308,7 +308,8 @@ static int add_namelist (before_t *be, int dfd, char const *srcdir, char const *
if (satmp.s[i] && satmp.s[i] != '#')
{
unsigned int pos, kpos ;
- add_name(be, name, satmp.s + i, SVTYPE_UNDEFINED, &pos, &kpos) ;
+ if (docheck) check_identifier(name, satmp.s + i) ;
+ add_name_nocheck(be, name, satmp.s + i, SVTYPE_UNDEFINED, &pos, &kpos) ;
if (uint_uniq(genalloc_s(unsigned int, &be->indices) + *listindex, genalloc_len(unsigned int, &be->indices) - *listindex, pos))
{
if (!genalloc_append(unsigned int, &be->indices, &pos))
@@ -325,7 +326,17 @@ static int add_namelist (before_t *be, int dfd, char const *srcdir, char const *
return 1 ;
}
-static int add_namelistd (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+static inline int add_namelist (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+{
+ return add_namelist_maycheck(be, dfd, srcdir, name, list, listindex, n, 1) ;
+}
+
+static inline int add_namelist_nocheck (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+{
+ return add_namelist_maycheck(be, dfd, srcdir, name, list, listindex, n, 0) ;
+}
+
+static int add_namelistd_maycheck (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n, int docheck)
{
DIR *dir = opendir_at(dfd, list) ;
if (!dir)
@@ -342,7 +353,8 @@ static int add_namelistd (before_t *be, int dfd, char const *srcdir, char const
d = readdir(dir) ;
if (!d) break ;
if (d->d_name[0] == '.') continue ;
- add_name(be, name, d->d_name, SVTYPE_UNDEFINED, &pos, &kpos) ;
+ if (docheck) check_identifier(name, d->d_name) ;
+ add_name_nocheck(be, name, d->d_name, SVTYPE_UNDEFINED, &pos, &kpos) ;
if (!genalloc_append(unsigned int, &be->indices, &pos)) dienomem() ;
}
dir_close(dir) ;
@@ -351,6 +363,17 @@ static int add_namelistd (before_t *be, int dfd, char const *srcdir, char const
return 1 ;
}
+static int add_namelistd (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+{
+ return add_namelistd_maycheck(be, dfd, srcdir, name, list, listindex, n, 1) ;
+}
+
+static int add_namelistd_nocheck (before_t *be, int dfd, char const *srcdir, char const *name, char const *list, unsigned int *listindex, unsigned int *n)
+{
+ return add_namelistd_maycheck(be, dfd, srcdir, name, list, listindex, n, 0) ;
+}
+
+
static void read_script (before_t *be, int dfd, char const *srcdir, char const *name, char const *script, unsigned int *argvindex, unsigned int *argc, int mandatory)
{
int r = 0 ;
@@ -425,8 +448,8 @@ static void add_common (before_t *be, int dfd, char const *srcdir, char const *n
{
unsigned int dummy ;
add_name(be, srcdir, name, svtype, &dummy, &common->kname) ;
- if (!add_namelistd(be, dfd, srcdir, name, "dependencies.d", &common->depindex, &common->ndeps)
- && !add_namelist(be, dfd, srcdir, name, "dependencies", &common->depindex, &common->ndeps))
+ if (!add_namelistd_nocheck(be, dfd, srcdir, name, "dependencies.d", &common->depindex, &common->ndeps)
+ && !add_namelist_nocheck(be, dfd, srcdir, name, "dependencies", &common->depindex, &common->ndeps))
{
common->depindex = genalloc_len(unsigned int, &be->indices) ;
common->ndeps = 0 ;