aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-10-09 17:14:12 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2025-10-09 17:14:12 +0000
commitd71f18b44e4168e2d942b503110af5b5314364b5 (patch)
tree233308156382cd94baa0407dfd8f900fb98de118
parent0ea45c6552010c36e4718542db759ec6cdfce58a (diff)
downloads6-rc-d71f18b44e4168e2d942b503110af5b5314364b5.tar.gz
Move all string comparison operations into skalibs
-rw-r--r--doc/repodefs.html149
-rw-r--r--package/deps.mak13
-rw-r--r--src/include/s6-rc/s6rc-utils.h2
-rw-r--r--src/libs6rc/deps-lib/s6rc1
-rw-r--r--src/libs6rc/s6rc_repo_fillset.c4
-rw-r--r--src/libs6rc/s6rc_repo_makesetbundles.c6
-rw-r--r--src/libs6rc/s6rc_repo_subnames.c2
-rw-r--r--src/libs6rc/s6rc_strrefcmp.c10
-rw-r--r--src/repo/s6-rc-set-change.c10
9 files changed, 118 insertions, 79 deletions
diff --git a/doc/repodefs.html b/doc/repodefs.html
index ff2bd32..be3351c 100644
--- a/doc/repodefs.html
+++ b/doc/repodefs.html
@@ -51,46 +51,24 @@ simply because they manage a <em>repository</em> of services.
<h2> Definitions </h2>
-<div id="repository">
-<h3> Repository </h3>
+<div id="store">
+<h3> Store </h3>
</div>
<p>
- An s6-rc <em>repository</em> is a place in the filesystem where the
-<em>repo</em> commands perform their work and store their data. It
-is made of hierarchies of symlinks (lots and lots of symlinks), that
-ultimately point to source definition directories in the
-<a href="#store">stores</a>, as well as several compiled databases:
-the <a href="#refdb">reference database</a>, and the compiled databases
-made of the <a href="#set">sets</a> you have
-<a href="#commit">committed</a>, including the one you will eventually
-<a href="#install">install</a>.
+<em> Store: place where service definitions are stored </em>
</p>
<p>
- A <em>repository</em> is where <strong>offline</strong> work on
-services happens. It must be located on a read-write filesystem, but
-that filesystem does not need to be accessible during the early boot.
-The default repository is located in <tt>/var/lib/s6-rc/repository</tt>
-(configurable at build-time). Other repositories can be created and
-used at will, typically by non-root users who want to manage their own
-sets of services.
-</p>
-
-<div id="store">
-<h3> Store </h3>
-</div>
-
-<p>
A service <em>store</em> is a place in the filesystem where source
definition directories are written by the package manager or the
user, where you can find the real contents of the services (instead
of just symlinks), as in, source definition directories that are
processed by <a href="s6-rc-compile.html">s6-rc-compile</a>.
-A repository will typically link to several stores: one provided by
-the package manager, and one &mdash; or more &mdash; provided locally
-by the admin. No s6-rc command will ever write to a store, but most
-repo commands read from all the stores.
+A <a href="#repository">repository</a> will typically link to several
+stores: one provided by the package manager, and one &mdash; or more
+&mdash; provided locally by the admin. No s6-rc command will ever
+write to a store, but most repo commands read from all the stores.
</p>
<p>
@@ -102,21 +80,64 @@ place to host local service definition directories managed by
an administrator could be <tt>/etc/s6-rc/sources</tt>.
</p>
+
+<div id="repository">
+<h3> Repository </h3>
+</div>
+
+<p>
+<em> Repository: place in the filesystem where the repo commands work,
+write their data, maintain the dependency graph of all the services
+in the stores, etc. </em>
+</p>
+
+<p>
+ The s6-rc <em>repository</em> is the central concept of the <em>repo</em>
+commands: it's the place in the filesystem where these commands perform
+their work and store their data. It is made of hierarchies of symlinks
+(lots and lots of symlinks), that ultimately point to source definition
+directories in the <a href="#store">stores</a>, as well as several
+compiled databases: the <a href="#refdb">reference database</a>, and the
+compiled databases made of the <a href="#set">sets</a> the user has
+<a href="#commit">committed</a>, including the one the user will eventually
+<a href="#install">install</a>.
+</p>
+
+<p>
+ The <em>repository</em> is where <strong>offline</strong> work on
+services happens. It must be located on a read-write filesystem, but
+that filesystem does not need to be accessible during the early boot.
+By default, the repository is located in <tt>/var/lib/s6-rc/repository</tt>;
+it is configurable at s6-rc build time.
+</p>
+
+<p>
+ The repository is generally unique for a system. However, it is possible
+to create and use repositories in non-default locations; that is, for
+instance, what non-root users would do in order to manage their own sets
+of services.
+</p>
+
<div id="refdb">
<h3> Reference database </h3>
</div>
<p>
- When a repository is created or updated, the list of all services
+ <em>Reference database: the dependency graph between all the services
+in all the stores used by the repository. </em>
+</p>
+
+<p>
+ When the repository is created or updated, the list of all services
defined in all the <a href="#store">stores</a> used by this repository
is analyzed, and all these services are automatically compiled into a
<em>reference database</em>, stored in the repository. The reference
database is never meant to be installed or go live in any way; its
purpose is mainly to give repo commands access to the full dependency
-graph of all the services in the store. Additionally, compiling this
-reference database ensures that the whole set of services defined
-in all the used stores is consistent: if not, the initialization fails,
-so the problem is reported as early as possible.
+graph of all the services in the stores. Additionally, compiling this
+reference database ensures that the whole set of services defined by
+the unions of all the stores is consistent: if not, the initialization
+fails, so the problem is reported as early as possible.
</p>
<div id="set">
@@ -124,13 +145,19 @@ so the problem is reported as early as possible.
</div>
<p>
- Inside a repository, a <em>set</em> is the fundamental unit of operation,
-and what users will interact the most with. A set is a map associating
-each service contained in the <a href="#refdb">reference database</a>
+ <em> Set: a set of services with all the states the user wants them
+to be in at boot time: unavailable in the database, available but not
+automatically started, started at boot time. </em>
+</p>
+
+<p>
+ Inside the repository, a <em>set</em> is the fundamental unit of operation,
+and what users will interact the most with. A set contains all the
+services defined in the <a href="#refdb">reference database</a>
(so, each service listed in all the <a href="#store">stores</a> used by the
-repository) to a given state that the user wants this service in when
-booting the system. This target state is also called a
-<a href="#sub">sub</a>, because target states are implemented by
+repository) and associates, to each service, a given state that the user
+wants this service to be in when the system boots. This target state is also
+called a <a href="#sub">sub</a>, because target states are implemented by
subdirectories of the directory holding a set.
</p>
@@ -147,6 +174,10 @@ can <a href="#commit">commit</a> the set, then <a href="#install">install</a> it
</div>
<p>
+ <em> Sub: the state the user wants a service to reach at boot time. </em>
+</p>
+
+<p>
A <em>sub</em> is the target state for every service in a set. At all times,
each service is in one and only one sub. The list of subs the service can be in
is the following:
@@ -156,26 +187,30 @@ is the following:
<li> <em>masked</em>: when the set is committed, masked services <em>will not</em>
be included in the compiled set database. They will be completely absent; if
the set database is installed, <a href="s6-rc.html">s6-rc</a> will not know them.
-A service in another sub cannot depend on a masked service. </li>
- <li> <em>disabled</em>, aka <em>unmasked</em>, aka <em>active</em> (yes, the
-naming may seem inconsistent, but bear with me): these services will appear in
-the compiled set database, and be startable by <a href="s6-rc.html">s6-rc</a> if
-the database is installed. However, they will not be included in the default
-bundle, i.e. they will not be automatically started at boot time. </li>
+A service in another sub cannot depend on a masked service. Users typically mask
+services that are included in a store but are superfluous to them, services they
+just do not want to interact with. </li>
+ <li> <em>disabled</em>: these services will appear in the compiled set database,
+and will be startable by <a href="s6-rc.html">s6-rc</a> if the database is installed.
+However, they will not be included in the default bundle, i.e. they will not be
+automatically started at boot time. Other names for <em>disabled</em> are:
+<em>inactive</em>, <em>unmasked</em>, <em>latent</em>, <em>usable</em>. (Tooling
+will likely report these services as <em>latent</em> or <em>usable</em>.) </li>
<li> <em>enabled</em>: these services will appear in the compiled set database,
-<em>and</em> in the default bundle. They will be started at boot time. </li>
+<em>and</em> in the default bundle, which means they will be started at boot time.
+Other names for <em>enabled</em> are: <em>active</em>. </li>
<li> <em>essential</em>, aka <em>always</em>: these services have been marked
as essential in their source definition directories, so they will always be
enabled. They cannot be disabled or masked. They cannot depend on non-essential
services. This sub is typically used by early boot services that should always
-be run. </li>
+run. </li>
</ul>
<p>
Working on a set basically means moving services from one of these subs to
-another, mostly choosing what services you will enable or disable, and sometimes
-masking services you don't want to see at all. And once you are happy with a set,
-you can commit it.
+another, mostly choosing what services to enable or disable, and sometimes
+masking services the user does not want to see at all. Once the user is happy
+with a set, they should commit it.
</p>
<div id="commit">
@@ -211,12 +246,14 @@ the new live database.
according to distribution policy. </li>
<li> The installer also sets a default live service database up. </li>
</ul> </li>
+
<li> <strong>Whenever distribution policies change</strong>, for instance
when declaring an additional local store:
<ul>
<li> The admin updates the list of stores with
<a href="s6-rc-repo-init.html">s6-rc-repo-init -U</a>. </li>
</ul> </li>
+
<li> <strong>Whenever service files change</strong>, typically when the
package manager installs/updates/deletes packages that provide daemons,
or admins modify services in local stores:
@@ -230,6 +267,15 @@ repository in sync with the stores. </li>
database is also kept in sync with the machine state. (Failure to do so may
prevent the machine from booting next time.)
</ul> </li>
+
+ <li> <strong>Whenever the admin wants to modify the <em>current</em>, live,
+machine state, by starting, stopping or restarting services</strong>:
+ <ul>
+ <li> They use the original <a href="s6-rc.html">s6-rc change</a> command,
+which operates on the live database. No <em>repo</em> command is involved
+here. </li>
+ </ul> </li>
+
<li> <strong>Whenever the admin wants to customize their startup process</strong>:
<ul>
<li> They can create new sets (with default subs coming from policy that's
@@ -242,6 +288,7 @@ or delete sets with <a href="s6-rc-set-delete.html">s6-rc-set-delete</a>. </li>
<li> They install the set with <a href="s6-rc-set-install.html">s6-rc-set-install</a>.
This action potentially modifies the current state of the machine! </li>
</ul> </li>
+
<li> <strong>At boot time</strong>:
<ul>
<li> The system boots on the installed live database. None of the <em>repo</em>
diff --git a/package/deps.mak b/package/deps.mak
index 73bb12d..75851af 100644
--- a/package/deps.mak
+++ b/package/deps.mak
@@ -25,7 +25,7 @@ src/libs6rc/s6rc_repo_badsub.o src/libs6rc/s6rc_repo_badsub.lo: src/libs6rc/s6rc
src/libs6rc/s6rc_repo_checkset.o src/libs6rc/s6rc_repo_checkset.lo: src/libs6rc/s6rc_repo_checkset.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_cleanup.lo: src/libs6rc/s6rc_repo_cleanup.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_compile.lo: src/libs6rc/s6rc_repo_compile.c src/include/s6-rc/config.h src/include/s6-rc/repo.h
-src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_fillset.lo: src/libs6rc/s6rc_repo_fillset.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
+src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_fillset.lo: src/libs6rc/s6rc_repo_fillset.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_fix.o src/libs6rc/s6rc_repo_fix.lo: src/libs6rc/s6rc_repo_fix.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_fixset.o src/libs6rc/s6rc_repo_fixset.lo: src/libs6rc/s6rc_repo_fixset.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_flattenservices.o src/libs6rc/s6rc_repo_flattenservices.lo: src/libs6rc/s6rc_repo_flattenservices.c src/include/s6-rc/config.h src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
@@ -37,7 +37,7 @@ src/libs6rc/s6rc_repo_listdeps_internal.o src/libs6rc/s6rc_repo_listdeps_interna
src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_listsub.lo: src/libs6rc/s6rc_repo_listsub.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_lock.lo: src/libs6rc/s6rc_repo_lock.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makedefbundle.lo: src/libs6rc/s6rc_repo_makedefbundle.c src/include/s6-rc/repo.h
-src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_makesetbundles.lo: src/libs6rc/s6rc_repo_makesetbundles.c src/include/s6-rc/repo.h src/include/s6-rc/s6rc-utils.h
+src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_makesetbundles.lo: src/libs6rc/s6rc_repo_makesetbundles.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makestores.o src/libs6rc/s6rc_repo_makestores.lo: src/libs6rc/s6rc_repo_makestores.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makesvlist.o src/libs6rc/s6rc_repo_makesvlist.lo: src/libs6rc/s6rc_repo_makesvlist.c src/include/s6-rc/repo.h
src/libs6rc/s6rc_repo_makesvlist_byname.o src/libs6rc/s6rc_repo_makesvlist_byname.lo: src/libs6rc/s6rc_repo_makesvlist_byname.c src/include/s6-rc/repo.h
@@ -61,7 +61,6 @@ src/libs6rc/s6rc_servicedir_internal.o src/libs6rc/s6rc_servicedir_internal.lo:
src/libs6rc/s6rc_servicedir_manage.o src/libs6rc/s6rc_servicedir_manage.lo: src/libs6rc/s6rc_servicedir_manage.c src/include/s6-rc/s6rc-servicedir.h
src/libs6rc/s6rc_servicedir_unblock.o src/libs6rc/s6rc_servicedir_unblock.lo: src/libs6rc/s6rc_servicedir_unblock.c src/include/s6-rc/s6rc-servicedir.h
src/libs6rc/s6rc_servicedir_unsupervise.o src/libs6rc/s6rc_servicedir_unsupervise.lo: src/libs6rc/s6rc_servicedir_unsupervise.c src/include/s6-rc/s6rc-servicedir.h
-src/libs6rc/s6rc_strrefcmp.o src/libs6rc/s6rc_strrefcmp.lo: src/libs6rc/s6rc_strrefcmp.c src/include/s6-rc/s6rc-utils.h
src/libs6rc/s6rc_type_check.o src/libs6rc/s6rc_type_check.lo: src/libs6rc/s6rc_type_check.c src/include/s6-rc/s6rc-utils.h
src/repo/s6-rc-repo-init.o src/repo/s6-rc-repo-init.lo: src/repo/s6-rc-repo-init.c src/include/s6-rc/config.h src/include/s6-rc/s6rc.h
src/repo/s6-rc-repo-sync.o src/repo/s6-rc-repo-sync.lo: src/repo/s6-rc-repo-sync.c src/include/s6-rc/config.h src/include/s6-rc/s6rc.h
@@ -83,15 +82,15 @@ src/s6-rc/s6-rc-update.o src/s6-rc/s6-rc-update.lo: src/s6-rc/s6-rc-update.c src
src/s6-rc/s6-rc.o src/s6-rc/s6-rc.lo: src/s6-rc/s6-rc.c src/include/s6-rc/config.h src/include/s6-rc/s6rc.h
ifeq ($(strip $(STATIC_LIBS_ARE_PIC)),)
-libs6rc.a.xyzzy: src/libs6rc/s6rc_db_check_depcycles.o src/libs6rc/s6rc_db_check_pipelines.o src/libs6rc/s6rc_db_check_revdeps.o src/libs6rc/s6rc_db_read.o src/libs6rc/s6rc_db_read_sizes.o src/libs6rc/s6rc_db_read_uint32.o src/libs6rc/s6rc_graph_closure.o src/libs6rc/s6rc_live_state_size.o src/libs6rc/s6rc_live_state_read.o src/libs6rc/s6rc_livedir_canon.o src/libs6rc/s6rc_livedir_create.o src/libs6rc/s6rc_livedir_prefix.o src/libs6rc/s6rc_livedir_prefixsize.o src/libs6rc/s6rc_lock.o src/libs6rc/s6rc_ls.o src/libs6rc/s6rc_nlto0.o src/libs6rc/s6rc_read_uint.o src/libs6rc/s6rc_repo_badsub.o src/libs6rc/s6rc_repo_checkset.o src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_fixset.o src/libs6rc/s6rc_repo_flattenservices.o src/libs6rc/s6rc_repo_list_sets.o src/libs6rc/s6rc_repo_listalldeps.o src/libs6rc/s6rc_repo_listcontents.o src/libs6rc/s6rc_repo_listdeps.o src/libs6rc/s6rc_repo_listdeps_internal.o src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_makestores.o src/libs6rc/s6rc_repo_makesvlist.o src/libs6rc/s6rc_repo_makesvlist_byname.o src/libs6rc/s6rc_repo_moveservices.o src/libs6rc/s6rc_repo_refcompile.o src/libs6rc/s6rc_repo_setcompile.o src/libs6rc/s6rc_repo_setuptodate.o src/libs6rc/s6rc_repo_subnames.o src/libs6rc/s6rc_repo_sv_bcmpr.o src/libs6rc/s6rc_repo_sv_cmpr.o src/libs6rc/s6rc_repo_sync.o src/libs6rc/s6rc_repo_syncset.o src/libs6rc/s6rc_repo_syncset_tmp.o src/libs6rc/s6rc_repo_touch.o src/libs6rc/s6rc_repo_touchset.o src/libs6rc/s6rc_sanitize_dir.o src/libs6rc/s6rc_servicedir_internal.o src/libs6rc/s6rc_servicedir_block.o src/libs6rc/s6rc_servicedir_unblock.o src/libs6rc/s6rc_servicedir_copy_offline.o src/libs6rc/s6rc_servicedir_copy_online.o src/libs6rc/s6rc_servicedir_manage.o src/libs6rc/s6rc_servicedir_unsupervise.o src/libs6rc/s6rc_strrefcmp.o src/libs6rc/s6rc_type_check.o
+libs6rc.a.xyzzy: src/libs6rc/s6rc_db_check_depcycles.o src/libs6rc/s6rc_db_check_pipelines.o src/libs6rc/s6rc_db_check_revdeps.o src/libs6rc/s6rc_db_read.o src/libs6rc/s6rc_db_read_sizes.o src/libs6rc/s6rc_db_read_uint32.o src/libs6rc/s6rc_graph_closure.o src/libs6rc/s6rc_live_state_size.o src/libs6rc/s6rc_live_state_read.o src/libs6rc/s6rc_livedir_canon.o src/libs6rc/s6rc_livedir_create.o src/libs6rc/s6rc_livedir_prefix.o src/libs6rc/s6rc_livedir_prefixsize.o src/libs6rc/s6rc_lock.o src/libs6rc/s6rc_ls.o src/libs6rc/s6rc_nlto0.o src/libs6rc/s6rc_read_uint.o src/libs6rc/s6rc_repo_badsub.o src/libs6rc/s6rc_repo_checkset.o src/libs6rc/s6rc_repo_cleanup.o src/libs6rc/s6rc_repo_compile.o src/libs6rc/s6rc_repo_fillset.o src/libs6rc/s6rc_repo_fixset.o src/libs6rc/s6rc_repo_flattenservices.o src/libs6rc/s6rc_repo_list_sets.o src/libs6rc/s6rc_repo_listalldeps.o src/libs6rc/s6rc_repo_listcontents.o src/libs6rc/s6rc_repo_listdeps.o src/libs6rc/s6rc_repo_listdeps_internal.o src/libs6rc/s6rc_repo_listsub.o src/libs6rc/s6rc_repo_lock.o src/libs6rc/s6rc_repo_makedefbundle.o src/libs6rc/s6rc_repo_makesetbundles.o src/libs6rc/s6rc_repo_makestores.o src/libs6rc/s6rc_repo_makesvlist.o src/libs6rc/s6rc_repo_makesvlist_byname.o src/libs6rc/s6rc_repo_moveservices.o src/libs6rc/s6rc_repo_refcompile.o src/libs6rc/s6rc_repo_setcompile.o src/libs6rc/s6rc_repo_setuptodate.o src/libs6rc/s6rc_repo_subnames.o src/libs6rc/s6rc_repo_sv_bcmpr.o src/libs6rc/s6rc_repo_sv_cmpr.o src/libs6rc/s6rc_repo_sync.o src/libs6rc/s6rc_repo_syncset.o src/libs6rc/s6rc_repo_syncset_tmp.o src/libs6rc/s6rc_repo_touch.o src/libs6rc/s6rc_repo_touchset.o src/libs6rc/s6rc_sanitize_dir.o src/libs6rc/s6rc_servicedir_internal.o src/libs6rc/s6rc_servicedir_block.o src/libs6rc/s6rc_servicedir_unblock.o src/libs6rc/s6rc_servicedir_copy_offline.o src/libs6rc/s6rc_servicedir_copy_online.o src/libs6rc/s6rc_servicedir_manage.o src/libs6rc/s6rc_servicedir_unsupervise.o src/libs6rc/s6rc_type_check.o
else
-libs6rc.a.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.a.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_type_check.lo
endif
libs6rc.pc: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
libs6rc.so.xyzzy: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
-libs6rc.so.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.so.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_type_check.lo
libs6rc.dylib.xyzzy: EXTRA_LIBS := -ls6 -lskarnet ${SPAWN_LIB}
-libs6rc.dylib.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_strrefcmp.lo src/libs6rc/s6rc_type_check.lo
+libs6rc.dylib.xyzzy:src/libs6rc/s6rc_db_check_depcycles.lo src/libs6rc/s6rc_db_check_pipelines.lo src/libs6rc/s6rc_db_check_revdeps.lo src/libs6rc/s6rc_db_read.lo src/libs6rc/s6rc_db_read_sizes.lo src/libs6rc/s6rc_db_read_uint32.lo src/libs6rc/s6rc_graph_closure.lo src/libs6rc/s6rc_live_state_size.lo src/libs6rc/s6rc_live_state_read.lo src/libs6rc/s6rc_livedir_canon.lo src/libs6rc/s6rc_livedir_create.lo src/libs6rc/s6rc_livedir_prefix.lo src/libs6rc/s6rc_livedir_prefixsize.lo src/libs6rc/s6rc_lock.lo src/libs6rc/s6rc_ls.lo src/libs6rc/s6rc_nlto0.lo src/libs6rc/s6rc_read_uint.lo src/libs6rc/s6rc_repo_badsub.lo src/libs6rc/s6rc_repo_checkset.lo src/libs6rc/s6rc_repo_cleanup.lo src/libs6rc/s6rc_repo_compile.lo src/libs6rc/s6rc_repo_fillset.lo src/libs6rc/s6rc_repo_fixset.lo src/libs6rc/s6rc_repo_flattenservices.lo src/libs6rc/s6rc_repo_list_sets.lo src/libs6rc/s6rc_repo_listalldeps.lo src/libs6rc/s6rc_repo_listcontents.lo src/libs6rc/s6rc_repo_listdeps.lo src/libs6rc/s6rc_repo_listdeps_internal.lo src/libs6rc/s6rc_repo_listsub.lo src/libs6rc/s6rc_repo_lock.lo src/libs6rc/s6rc_repo_makedefbundle.lo src/libs6rc/s6rc_repo_makesetbundles.lo src/libs6rc/s6rc_repo_makestores.lo src/libs6rc/s6rc_repo_makesvlist.lo src/libs6rc/s6rc_repo_makesvlist_byname.lo src/libs6rc/s6rc_repo_moveservices.lo src/libs6rc/s6rc_repo_refcompile.lo src/libs6rc/s6rc_repo_setcompile.lo src/libs6rc/s6rc_repo_setuptodate.lo src/libs6rc/s6rc_repo_subnames.lo src/libs6rc/s6rc_repo_sv_bcmpr.lo src/libs6rc/s6rc_repo_sv_cmpr.lo src/libs6rc/s6rc_repo_sync.lo src/libs6rc/s6rc_repo_syncset.lo src/libs6rc/s6rc_repo_syncset_tmp.lo src/libs6rc/s6rc_repo_touch.lo src/libs6rc/s6rc_repo_touchset.lo src/libs6rc/s6rc_sanitize_dir.lo src/libs6rc/s6rc_servicedir_internal.lo src/libs6rc/s6rc_servicedir_block.lo src/libs6rc/s6rc_servicedir_unblock.lo src/libs6rc/s6rc_servicedir_copy_offline.lo src/libs6rc/s6rc_servicedir_copy_online.lo src/libs6rc/s6rc_servicedir_manage.lo src/libs6rc/s6rc_servicedir_unsupervise.lo src/libs6rc/s6rc_type_check.lo
s6-rc-repo-init: EXTRA_LIBS := ${SYSCLOCK_LIB}
s6-rc-repo-init: src/repo/s6-rc-repo-init.o ${LIBS6RC} -lskarnet
s6-rc-repo-sync: EXTRA_LIBS := ${SYSCLOCK_LIB}
diff --git a/src/include/s6-rc/s6rc-utils.h b/src/include/s6-rc/s6rc-utils.h
index e1533dc..7da49ee 100644
--- a/src/include/s6-rc/s6rc-utils.h
+++ b/src/include/s6-rc/s6rc-utils.h
@@ -12,8 +12,6 @@
#include <s6-rc/s6rc-db.h>
-extern int s6rc_strrefcmp (void const *, void const *) ;
-
extern void s6rc_graph_closure (s6rc_db_t const *, unsigned char *, unsigned int, int) ;
extern int s6rc_lock (char const *, int, int *, char const *, int, int *, int) ;
extern int s6rc_read_uint (char const *, unsigned int *) ;
diff --git a/src/libs6rc/deps-lib/s6rc b/src/libs6rc/deps-lib/s6rc
index 02797a8..ea3c4fd 100644
--- a/src/libs6rc/deps-lib/s6rc
+++ b/src/libs6rc/deps-lib/s6rc
@@ -54,7 +54,6 @@ s6rc_servicedir_copy_offline.o
s6rc_servicedir_copy_online.o
s6rc_servicedir_manage.o
s6rc_servicedir_unsupervise.o
-s6rc_strrefcmp.o
s6rc_type_check.o
-ls6
-lskarnet
diff --git a/src/libs6rc/s6rc_repo_fillset.c b/src/libs6rc/s6rc_repo_fillset.c
index 2332e3c..1b2e2b6 100644
--- a/src/libs6rc/s6rc_repo_fillset.c
+++ b/src/libs6rc/s6rc_repo_fillset.c
@@ -5,10 +5,10 @@
#include <stdlib.h>
#include <errno.h>
+#include <skalibs/bytestr.h>
#include <skalibs/direntry.h>
#include <skalibs/strerr.h>
-#include <s6-rc/s6rc-utils.h>
#include <s6-rc/repo.h>
int s6rc_repo_fillset (char const *repo, char const *set, char const *const *existing, uint32_t n)
@@ -45,7 +45,7 @@ int s6rc_repo_fillset (char const *repo, char const *set, char const *const *exi
char dst[repolen + 18 + setlen + len] ;
memcpy(src, "../.atomics/", 12) ;
memcpy(src + 12, d->d_name, len+1) ;
- if (n && bsearch(&d->d_name, existing, n, sizeof(char const *), &s6rc_strrefcmp)) continue ;
+ if (n && bsearch(d->d_name, existing, n, sizeof(char const *), &str_bcmp)) continue ;
memcpy(src + 12 + len, "/flag-essential", 16) ;
if (access(src, F_OK) == 0) subi = 3 ;
else
diff --git a/src/libs6rc/s6rc_repo_makesetbundles.c b/src/libs6rc/s6rc_repo_makesetbundles.c
index 12d76b8..81267b9 100644
--- a/src/libs6rc/s6rc_repo_makesetbundles.c
+++ b/src/libs6rc/s6rc_repo_makesetbundles.c
@@ -9,12 +9,12 @@
#include <skalibs/stat.h>
#include <skalibs/direntry.h>
+#include <skalibs/bytestr.h>
#include <skalibs/strerr.h>
#include <skalibs/stralloc.h>
#include <skalibs/genalloc.h>
#include <skalibs/djbunix.h>
-#include <s6-rc/s6rc-utils.h>
#include <s6-rc/repo.h>
int s6rc_repo_makesetbundles (char const *repo, char const *set, unsigned int verbosity)
@@ -49,7 +49,7 @@ int s6rc_repo_makesetbundles (char const *repo, char const *set, unsigned int ve
for (size_t i = 0 ; i < n ; i++) masked[i] = maskedstorage + genalloc_s(size_t, &ga)[i] ;
sa.len = 0 ;
genalloc_setlen(size_t, &ga, 0) ;
- qsort(masked, n, sizeof(char const *), &s6rc_strrefcmp) ;
+ qsort(masked, n, sizeof(char const *), &str_cmp) ;
if (mkdir(dst, 02755) == -1)
{
@@ -83,7 +83,7 @@ int s6rc_repo_makesetbundles (char const *repo, char const *set, unsigned int ve
for (; i < m ; i++)
{
char const *x = sa.s + genalloc_s(size_t, &ga)[i] ;
- if (bsearch(x, masked, n, sizeof(char const *), &s6rc_strrefcmp))
+ if (bsearch(x, masked, n, sizeof(char const *), &str_bcmp))
{
if (verbosity >= 3)
strerr_warni4x("skipping bundle ", d->d_name, " containing e.g. masked service ", x) ;
diff --git a/src/libs6rc/s6rc_repo_subnames.c b/src/libs6rc/s6rc_repo_subnames.c
index a60f4e8..2653f01 100644
--- a/src/libs6rc/s6rc_repo_subnames.c
+++ b/src/libs6rc/s6rc_repo_subnames.c
@@ -2,4 +2,4 @@
#include <s6-rc/repo.h>
-char const s6rc_repo_subnames[4][7] = { "masked", "active", "onboot", "always" } ;
+char const s6rc_repo_subnames[4][7] = { "masked", "usable", "active", "always" } ;
diff --git a/src/libs6rc/s6rc_strrefcmp.c b/src/libs6rc/s6rc_strrefcmp.c
deleted file mode 100644
index e4732df..0000000
--- a/src/libs6rc/s6rc_strrefcmp.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* ISC license. */
-
-#include <string.h>
-
-#include <s6-rc/s6rc-utils.h>
-
-int s6rc_strrefcmp (void const *a, void const *b)
-{
- return strcmp(*(char const *const *)a, *(char const *const *)b) ;
-}
diff --git a/src/repo/s6-rc-set-change.c b/src/repo/s6-rc-set-change.c
index c659471..188b11c 100644
--- a/src/repo/s6-rc-set-change.c
+++ b/src/repo/s6-rc-set-change.c
@@ -66,19 +66,25 @@ static uint64_t wgolb = 0 ;
static struct subname_s const accepted_subs[] =
{
- { .name = "active", .sub = 1 },
+ { .name = "activate", .sub = 2 },
+ { .name = "active", .sub = 2 },
{ .name = "always", .sub = 3 },
+ { .name = "deactivate", .sub = 1 },
{ .name = "disable", .sub = 1 },
{ .name = "disabled", .sub = 1 },
{ .name = "enable", .sub = 2 },
{ .name = "enabled", .sub = 2 },
{ .name = "essential", .sub = 3 },
+ { .name = "inactive", .sub = 1 },
+ { .name = "latent", .sub = 1 },
{ .name = "make-essential", .sub = 3 },
{ .name = "mask", .sub = 0 },
{ .name = "masked", .sub = 0 },
{ .name = "onboot", .sub = 2 },
+ { .name = "suppress", .sub = 0 },
{ .name = "unmask", .sub = 1 },
- { .name = "unmasked", .sub = 1 }
+ { .name = "unmasked", .sub = 1 },
+ { .name = "usable", .sub = 1 }
} ;
static int subname_cmp (void const *a, void const *b)