From b1eba5880803f8981d80ff452a2121407360e3d4 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Tue, 23 Aug 2016 15:57:01 +0200 Subject: irmd: Fix wrong lookup ap_table had no function to look for entries by apn. --- src/irmd/apn_table.c | 17 +++++++++++++++++ src/irmd/apn_table.h | 3 +++ src/irmd/main.c | 3 ++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/irmd/apn_table.c b/src/irmd/apn_table.c index 31c45a78..a7cf0fd3 100644 --- a/src/irmd/apn_table.c +++ b/src/irmd/apn_table.c @@ -162,3 +162,20 @@ struct apn_entry * apn_table_get(struct list_head * apn_table, char * ap) return NULL; } + +struct apn_entry * apn_table_get_by_apn(struct list_head * apn_table, + char * apn) +{ + struct list_head * p; + + if (apn_table == NULL || apn == NULL) + return NULL; + + list_for_each(p, apn_table) { + struct apn_entry * e = list_entry(p, struct apn_entry, next); + if (!strcmp(e->apn, apn)) + return e; + } + + return NULL; +} diff --git a/src/irmd/apn_table.h b/src/irmd/apn_table.h index 88a2548a..fd0fb1de 100644 --- a/src/irmd/apn_table.h +++ b/src/irmd/apn_table.h @@ -59,4 +59,7 @@ void apn_table_del(struct list_head * apn_table, struct apn_entry * apn_table_get(struct list_head * apn_table, char * ap); +struct apn_entry * apn_table_get_by_apn(struct list_head * apn_table, + char * apn); + #endif /* OUROBOROS_IRMD_APN_TABLE_H */ diff --git a/src/irmd/main.c b/src/irmd/main.c index 5366b535..8ac645df 100644 --- a/src/irmd/main.c +++ b/src/irmd/main.c @@ -1364,7 +1364,8 @@ static struct irm_flow * flow_req_arr(pid_t api, pthread_mutex_lock(&re->state_lock); re->state = REG_NAME_AUTO_EXEC; - a = apn_table_get(&irmd->apn_table, reg_entry_get_apn(re)); + a = apn_table_get_by_apn(&irmd->apn_table, + reg_entry_get_apn(re)); pthread_mutex_unlock(&re->state_lock); if (a == NULL || (c_api->pid = auto_execute(a->argv)) < 0) { pthread_mutex_lock(&re->state_lock); -- cgit v1.2.3