staging: most: replace multiple if..else with table lookup
Subsystems (2)
PATCH v2 1/1 staging: most: replace multiple if..else with table lookup
From: Hari Prasath Gujulan Elango <[email protected]>
Replace multiple if..else if..statements with simple table lookup in two functions.
Signed-off-by Hari Prasath Gujulan Elango <[email protected]>
--- drivers/staging/most/mostcore/core.c | 41 +++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 17 deletions(-)
drivers/staging/most/mostcore/core.c +24 -17
@@ -82,6 +82,14 @@ struct most_inst_obj {struct list_head list; }; +static const struct { +int most_ch_data_type; +char *name; +} ch_data_type[] = { {MOST_CH_CONTROL ,"control\n" }, + {MOST_CH_ASYNC ,"async\n" }, + {MOST_CH_SYNC ,"sync\n" }, + {MOST_CH_ISOC_AVP ,"isoc_avp\n" } }; +#define to_inst_obj (d) container_of(d, struct most_inst_obj, kobj)/**
@@ -414,14 +422,12 @@ static ssize_t show_set_datatype(struct most_c_obj *c,struct most_c_attr *attr, char *buf) { -if (c->cfg.data_type &MOST_CH_CONTROL ) -return snprintf (buf,PAGE_SIZE ,"control\n" ); -else if (c->cfg.data_type &MOST_CH_ASYNC ) -return snprintf (buf,PAGE_SIZE ,"async\n" ); -else if (c->cfg.data_type &MOST_CH_SYNC ) -return snprintf (buf,PAGE_SIZE ,"sync\n" ); -else if (c->cfg.data_type &MOST_CH_ISOC_AVP ) -return snprintf (buf,PAGE_SIZE ,"isoc_avp\n" ); + int i; + +for (i =0 ; i <ARRAY_SIZE (ch_data_type); i++) { +if (c->cfg.data_type & ch_data_type[i].most_ch_data_type) +return snprintf (buf,PAGE_SIZE , ch_data_type[i].name); + }return snprintf (buf,PAGE_SIZE ,"unconfigured\n" ); }
@@ -430,15 +436,16 @@ static ssize_t store_set_datatype(struct most_c_obj *c,const char *buf, size_t count) { - if (!strcmp(buf, "control\n")) { - c->cfg.data_type = MOST_CH_CONTROL; - } else if (!strcmp(buf, "async\n")) { - c->cfg.data_type =MOST_CH_ASYNC ; - }else if (!strcmp (buf,"sync\n" )) { - c->cfg.data_type =MOST_CH_SYNC ; - }else if (!strcmp (buf,"isoc_avp\n" )) { - c->cfg.data_type =MOST_CH_ISOC_AVP ; - }else { + int i; + +for (i =0 ; i <ARRAY_SIZE (ch_data_type); i++) { +if (!strcmp (buf, ch_data_type[i].name)) { + c->cfg.data_type = ch_data_type[i].most_ch_data_type; +break ; + } + } + +if (i ==ARRAY_SIZE (ch_data_type)) {pr_info ("WARN: invalid attribute settings\n" );return -EINVAL ; }
Signature · 1 line
1.9.1