diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-01-07 11:11:03 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-01-07 12:20:59 +0000 |
commit | 8808bb49a20e3e569b230b1b8acdf6f74e1c6bd2 (patch) | |
tree | 0d09796c8b802dcd98f339f324961cb949fdbec0 /src | |
parent | addeaa39b172b4114bffbbfdd3dd09a029eb37b3 (diff) |
Add osmo_fsm_find_by_name() and avoid registering FSM with same name
This addresses a FIXME in the fsm.c code: osmo_fsm_register() should
fail in case a FSM with the given name already exists.
Change-Id: I5fd882939859c79581eba70c14cbafd64560b583
Diffstat (limited to 'src')
-rw-r--r-- | src/fsm.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -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); |