From 4b31caa9cdaef67c70bc7fb43963ba68b7bf5bb1 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Thu, 4 Jun 2015 20:48:10 +0000 Subject: Initial commit --- src/libs6rc/s6rc_db_check_revdeps.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/libs6rc/s6rc_db_check_revdeps.c (limited to 'src/libs6rc/s6rc_db_check_revdeps.c') diff --git a/src/libs6rc/s6rc_db_check_revdeps.c b/src/libs6rc/s6rc_db_check_revdeps.c new file mode 100644 index 0000000..0cb2845 --- /dev/null +++ b/src/libs6rc/s6rc_db_check_revdeps.c @@ -0,0 +1,30 @@ +/* ISC license. */ + +#include +#include +#include +#include + +int s6rc_db_check_revdeps (s6rc_db_t const *db) +{ + unsigned int n = db->nshort + db->nlong ; + unsigned int m = bitarray_div8(n) ; + unsigned char matrix[n * m] ; + register unsigned int i = n ; + register unsigned char const *p = matrix ; + byte_zero(matrix, n * m) ; + while (i--) + { + register 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--) + { + register unsigned int j = db->services[i].ndeps[0] ; + while (j--) bitarray_not(matrix + m * db->deps[db->services[i].deps[0] + j], i, 1) ; + } + i = n * m ; + while (i--) if (*p++) return 0 ; + return 1 ; +} -- cgit v1.3.1