1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-13 14:36:08 +02:00

string-list.c: avoid conversion from void * to function pointer

ISO C forbids the conversion of void pointers to function pointers.
Introduce a context struct that encapsulates the function pointer.

Signed-off-by: Beat Bolli <dev+git@drbeat.li>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Beat Bolli 2018-07-09 21:25:36 +02:00 committed by Junio C Hamano
parent 9ad36356dd
commit b6d3f5a960

View File

@ -224,18 +224,28 @@ struct string_list_item *string_list_append(struct string_list *list,
list->strdup_strings ? xstrdup(string) : (char *)string); list->strdup_strings ? xstrdup(string) : (char *)string);
} }
/*
* Encapsulate the compare function pointer because ISO C99 forbids
* casting from void * to a function pointer and vice versa.
*/
struct string_list_sort_ctx
{
compare_strings_fn cmp;
};
static int cmp_items(const void *a, const void *b, void *ctx) static int cmp_items(const void *a, const void *b, void *ctx)
{ {
compare_strings_fn cmp = ctx; struct string_list_sort_ctx *sort_ctx = ctx;
const struct string_list_item *one = a; const struct string_list_item *one = a;
const struct string_list_item *two = b; const struct string_list_item *two = b;
return cmp(one->string, two->string); return sort_ctx->cmp(one->string, two->string);
} }
void string_list_sort(struct string_list *list) void string_list_sort(struct string_list *list)
{ {
QSORT_S(list->items, list->nr, cmp_items, struct string_list_sort_ctx sort_ctx = {list->cmp ? list->cmp : strcmp};
list->cmp ? list->cmp : strcmp);
QSORT_S(list->items, list->nr, cmp_items, &sort_ctx);
} }
struct string_list_item *unsorted_string_list_lookup(struct string_list *list, struct string_list_item *unsorted_string_list_lookup(struct string_list *list,