summaryrefslogtreecommitdiffstats
path: root/src/fsm.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-01-07 11:11:03 +0100
committerHarald Welte <laforge@gnumonks.org>2017-01-07 12:20:59 +0000
commit8808bb49a20e3e569b230b1b8acdf6f74e1c6bd2 (patch)
tree0d09796c8b802dcd98f339f324961cb949fdbec0 /src/fsm.c
parentaddeaa39b172b4114bffbbfdd3dd09a029eb37b3 (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/fsm.c')
-rw-r--r--src/fsm.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/fsm.c b/src/fsm.c
index 19705b9f..666dbe37 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -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);