Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- Documentation/technical/api-string-list.txt | 9 ++++++++- string-list.c | 9 +++++++++ string-list.h | 7 +++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Documentation/technical/api-string-list.txt b/Documentation/technical/api-string-list.txt index 94d7a2b..7386bca 100644 --- a/Documentation/technical/api-string-list.txt +++ b/Documentation/technical/api-string-list.txt @@ -38,7 +38,8 @@ member (you need this if you add things later) and you should set the `unsorted_string_list_delete_item`. . Can remove items not matching a criterion from a sorted or unsorted - list using `filter_string_list`. + list using `filter_string_list`, or remove empty strings using + `string_list_remove_empty_items`. . Finally it should free the list using `string_list_clear`. @@ -75,6 +76,12 @@ Functions to be deleted. Preserve the order of the items that are retained. +`string_list_remove_empty_items`:: + + Remove any empty strings from the list. If free_util is true, + call free() on the util members of any items that have to be + deleted. Preserve the order of the items that are retained. + `string_list_longest_prefix`:: Return the longest string within a string_list that is a diff --git a/string-list.c b/string-list.c index c54b816..397e6cf 100644 --- a/string-list.c +++ b/string-list.c @@ -136,6 +136,15 @@ void filter_string_list(struct string_list *list, int free_util, list->nr = dst; } +static int item_is_not_empty(struct string_list_item *item, void *unused) +{ + return *item->string != '\0'; +} + +void string_list_remove_empty_items(struct string_list *list, int free_util) { + filter_string_list(list, free_util, item_is_not_empty, NULL); +} + char *string_list_longest_prefix(const struct string_list *prefixes, const char *string) { diff --git a/string-list.h b/string-list.h index 5efd07b..c50b0d0 100644 --- a/string-list.h +++ b/string-list.h @@ -39,6 +39,13 @@ void filter_string_list(struct string_list *list, int free_util, string_list_each_func_t want, void *cb_data); /* + * Remove any empty strings from the list. If free_util is true, call + * free() on the util members of any items that have to be deleted. + * Preserve the order of the items that are retained. + */ +void string_list_remove_empty_items(struct string_list *list, int free_util); + +/* * Return the longest string in prefixes that is a prefix (in the * sense of prefixcmp()) of string, or NULL if no such prefix exists. * This function does not require the string_list to be sorted (it -- 1.8.0 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html