X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fecoli_init.c;fp=src%2Fecoli_init.c;h=fd5c0c37704225789cccc38e3d8a01da724c3dd1;hb=18d03456d96f7a086a2ccc82ce97fcf056848d90;hp=0000000000000000000000000000000000000000;hpb=a1571d413d2acac5d4a4fbdf2e50b2d1a6da3aa6;p=protos%2Flibecoli.git diff --git a/src/ecoli_init.c b/src/ecoli_init.c new file mode 100644 index 0000000..fd5c0c3 --- /dev/null +++ b/src/ecoli_init.c @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2016, Olivier MATZ + */ + +#include +#include +#include +#include + +#include + +static struct ec_init_list init_list = TAILQ_HEAD_INITIALIZER(init_list); + +/* register an init function */ +void ec_init_register(struct ec_init *init) +{ + struct ec_init *cur; + + if (TAILQ_EMPTY(&init_list)) { + TAILQ_INSERT_HEAD(&init_list, init, next); + return; + } + + + TAILQ_FOREACH(cur, &init_list, next) { + if (init->priority > cur->priority) + continue; + + TAILQ_INSERT_BEFORE(cur, init, next); + return; + } + + TAILQ_INSERT_TAIL(&init_list, init, next); +} + +int ec_init(void) +{ + struct ec_init *init; + + TAILQ_FOREACH(init, &init_list, next) { + if (init->init() < 0) + return -1; + } + + return 0; +}