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