diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2020-11-30 13:08:04 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2020-11-30 13:08:04 +0000 |
| commit | ba3bcbb86ea0177349bcd021559347248d6ab10a (patch) | |
| tree | 23d8be4d59a1639ebea301fb2caf39b8b1ed0e27 /src/serverlib/s6rc_db_check_revdeps.c | |
| parent | 79cb9644f99f056641f4c145da6e7ca63b333b80 (diff) | |
| download | s6-rc-ba3bcbb86ea0177349bcd021559347248d6ab10a.tar.gz | |
Stash temporary changes. Does not build; is not intended to.
Diffstat (limited to 'src/serverlib/s6rc_db_check_revdeps.c')
| -rw-r--r-- | src/serverlib/s6rc_db_check_revdeps.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/serverlib/s6rc_db_check_revdeps.c b/src/serverlib/s6rc_db_check_revdeps.c new file mode 100644 index 0000000..0097d06 --- /dev/null +++ b/src/serverlib/s6rc_db_check_revdeps.c @@ -0,0 +1,29 @@ +/* ISC license. */ + +#include <string.h> +#include <skalibs/bitarray.h> +#include <s6-rc/s6rc-db.h> + +int s6rc_db_check_revdeps (s6rc_db_t const *db) +{ + size_t n = db->nshort + db->nlong ; + size_t m = bitarray_div8(n) ; + unsigned char matrix[n * m] ; + unsigned int i = n ; + unsigned char const *p = matrix ; + memset(matrix, 0, n * m) ; + while (i--) + { + unsigned int j = db->services[i].ndeps[1] ; + while (j--) bitarray_not(matrix + m * i, db->deps[db->ndeps + db->services[i].deps[1] + j], 1) ; + } + i = n ; + while (i--) + { + unsigned int j = db->services[i].ndeps[0] ; + while (j--) bitarray_not(matrix + m * db->deps[db->services[i].deps[0] + j], i, 1) ; + } + n *= m ; + while (n--) if (*p++) return 1 ; + return 0 ; +} |
