diff options
| author | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2025-03-16 19:19:59 +0100 |
|---|---|---|
| committer | Anna (navi) Figueiredo Gomes <navi@vlhl.dev> | 2025-03-16 19:19:59 +0100 |
| commit | 1a7a68780d6dc1649d08f189bbd21691ebfd7d5b (patch) | |
| tree | 7104b63445fd594ef9d1637c76192b2348f9cd77 /src/shared/misc.c | |
| parent | 72b1e8cd0c08dee3efb0954298453ee7c56f2037 (diff) | |
openrc-run: Iterate all scriptdirs in reverse order to load configs.origin/scriptdir_load
Less error prone and more flexible, and allows for better support of
multiple script dirs.
Diffstat (limited to 'src/shared/misc.c')
| -rw-r--r-- | src/shared/misc.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/shared/misc.c b/src/shared/misc.c index e6d477d8..b7e01264 100644 --- a/src/shared/misc.c +++ b/src/shared/misc.c @@ -154,6 +154,22 @@ env_filter(void) rc_stringlist_free(profile); } +static void +export_script_path(void) +{ + const char * const *scriptdirs = rc_scriptdirs(); + size_t count, size, written = 0; + char *path; + + /* build script path in reverse order so configs override each other */ + for (count = 0; scriptdirs[count]; count++) + size += strlen(scriptdirs[count]) + sizeof(':'); + path = xmalloc(size); + for (count--; count; count--) + written += snprintf(path + written, size - written, "%s:", scriptdirs[count]); + setenv("RC_SCRIPTDIRS", path, true); +} + void env_config(void) { @@ -214,6 +230,8 @@ env_config(void) free(e); free(tmpdir); + export_script_path(); + if ((fp = fopen(RC_KRUNLEVEL, "r"))) { if (xgetline(&buffer, &size, fp) != -1) setenv("RC_DEFAULTLEVEL", buffer, 1); |
