Hi René,

On Fri, 5 Aug 2016, René Scharfe wrote:

>  static void add_strategies(const char *string, unsigned attr)
>  {
> -     struct strategy *list = NULL;
> -     int list_alloc = 0, list_nr = 0, i;
> -
> -     memset(&list, 0, sizeof(list));
> -     split_merge_strategies(string, &list, &list_nr, &list_alloc);
> -     if (list) {
> -             for (i = 0; i < list_nr; i++)
> -                     append_strategy(get_strategy(list[i].name));
> +     int i;
> +
> +     if (string) {
> +             struct string_list list = STRING_LIST_INIT_DUP;
> +             struct string_list_item *item;
> +             string_list_split(&list, string, ' ', -1);
> +             for_each_string_list_item(item, &list)
> +                     append_strategy(get_strategy(item->string));
> +             string_list_clear(&list, 0);
>               return;
>       }

A nice code reduction!

I wonder, however, if we could somhow turn things around by introducing
something like

        split_and_do_for_each(item_p, length, string, delimiter)
                ... <do something with item_p and length> ...

that both string_list_split() *and* add_strategies() could use? We would
then be able to avoid allocating the list and duplicating the items in the
latter case.

Ciao,
Dscho

Reply via email to