diff options
-rw-r--r-- | include/osmocom/core/fsm.h | 1 | ||||
-rw-r--r-- | src/fsm.c | 14 |
2 files changed, 14 insertions, 1 deletions
diff --git a/include/osmocom/core/fsm.h b/include/osmocom/core/fsm.h index a2c20b78..952f82fa 100644 --- a/include/osmocom/core/fsm.h +++ b/include/osmocom/core/fsm.h @@ -140,6 +140,7 @@ void osmo_fsm_log_addr(bool log_addr); int osmo_fsm_register(struct osmo_fsm *fsm); void osmo_fsm_unregister(struct osmo_fsm *fsm); +struct osmo_fsm *osmo_fsm_find_by_name(const char *name); struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void *priv, int log_level, const char *id); struct osmo_fsm_inst *osmo_fsm_inst_alloc_child(struct osmo_fsm *fsm, @@ -20,6 +20,7 @@ #include <errno.h> #include <stdbool.h> +#include <string.h> #include <osmocom/core/fsm.h> #include <osmocom/core/talloc.h> @@ -102,6 +103,16 @@ void osmo_fsm_log_addr(bool log_addr) fsm_log_addr = log_addr; } +struct osmo_fsm *osmo_fsm_find_by_name(const char *name) +{ + struct osmo_fsm *fsm; + llist_for_each_entry(fsm, &g_fsms, list) { + if (!strcmp(name, fsm->name)) + return fsm; + } + return NULL; +} + /*! \brief register a FSM with the core * * A FSM descriptor needs to be registered with the core before any @@ -112,7 +123,8 @@ void osmo_fsm_log_addr(bool log_addr) */ int osmo_fsm_register(struct osmo_fsm *fsm) { - /* FIXME:check for duplicate name? */ + if (osmo_fsm_find_by_name(fsm->name)) + return -EEXIST; llist_add_tail(&fsm->list, &g_fsms); INIT_LLIST_HEAD(&fsm->instances); |