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