Re: [PATCH] staging: most: replace multiple if..else with table lookup

From: Joe Perches
Date: Thu Dec 24 2015 - 11:06:34 EST


On Thu, 2015-12-24 at 10:49 +0000, Gujulan Elango, Hari Prasath (H.) wrote:
> From: Hari Prasath Gujulan Elango <hgujulan@xxxxxxxxxxx>
>
> Replace multiple if..else if..statements with simple table lookup in two
> functions.
>
> Signed-off-by: Hari Prasath Gujulan Elango <hgujulan@xxxxxxxxxxx>
> ---
>  drivers/staging/most/mostcore/core.c | 39 ++++++++++++++++++++----------------
>  1 file changed, 22 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/staging/most/mostcore/core.c b/drivers/staging/most/mostcore/core.c
> index ed1ed25..7b4636b 100644
> --- a/drivers/staging/most/mostcore/core.c
> +++ b/drivers/staging/most/mostcore/core.c
> @@ -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,14 @@ 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;

Missing braces and break;

> + }
> +
> + if (i == ARRAY_SIZE(ch_data_type)) {
>   pr_info("WARN: invalid attribute settings\n");
>   return -EINVAL;
>   }

This seems like a lot of code for a simple test.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/