All of lore.kernel.org
 help / color / mirror / Atom feed
From: Beat Bolli <dev+git@drbeat.li>
To: git@vger.kernel.org
Cc: gitster@pobox.com, Beat Bolli <dev+git@drbeat.li>
Subject: [PATCH 5/6] string-list.c: avoid conversion from void * to function pointer
Date: Mon,  9 Jul 2018 21:25:36 +0200	[thread overview]
Message-ID: <20180709192537.18564-6-dev+git@drbeat.li> (raw)
In-Reply-To: <20180708144342.11922-1-dev+git@drbeat.li>

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>
---
 string-list.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/string-list.c b/string-list.c
index a0cf0cfe88..771c455098 100644
--- a/string-list.c
+++ b/string-list.c
@@ -224,18 +224,28 @@ struct string_list_item *string_list_append(struct string_list *list,
 			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)
 {
-	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 *two = b;
-	return cmp(one->string, two->string);
+	return sort_ctx->cmp(one->string, two->string);
 }
 
 void string_list_sort(struct string_list *list)
 {
-	QSORT_S(list->items, list->nr, cmp_items,
-		list->cmp ? list->cmp : strcmp);
+	struct string_list_sort_ctx sort_ctx = {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,
-- 
2.18.0.203.gfac676dfb9


  parent reply	other threads:[~2018-07-09 19:26 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-08 14:43 [RFC PATCH 0/6] Compile cleanly in pedantic mode Beat Bolli
2018-07-08 14:43 ` [RFC PATCH 1/6] connect.h: avoid forward declaration of an enum Beat Bolli
2018-07-08 14:43 ` [RFC PATCH 2/6] refs/refs-internal.h: " Beat Bolli
2018-07-09 18:46   ` Jeff King
2018-07-09 19:30     ` Beat Bolli
2018-07-10  2:15       ` Jeff King
2018-07-08 14:43 ` [RFC PATCH 3/6] convert.c: replace "\e" escapes with "\033" Beat Bolli
2018-07-08 14:43 ` [RFC PATCH 4/6] sequencer.c: avoid empty statements at top level Beat Bolli
2018-07-08 20:54   ` Eric Sunshine
2018-07-08 21:17     ` Philip Oakley
2018-07-09  9:37       ` ig
2018-07-09 21:34   ` Junio C Hamano
2018-07-09 21:37     ` Beat Bolli
2018-07-08 14:43 ` [RFC PATCH 5/6] string-list.c: avoid conversion from void * to function pointer Beat Bolli
2018-07-08 14:43 ` [RFC PATCH 6/6] utf8.c: avoid char overflow Beat Bolli
2018-07-09 13:14   ` Johannes Schindelin
2018-07-09 14:48     ` Beat Bolli
2018-07-09 15:45       ` Beat Bolli
2018-07-09 16:33       ` Junio C Hamano
2018-07-09 17:56         ` Beat Bolli
2018-07-09 18:18         ` Junio C Hamano
2018-07-09 20:04       ` Johannes Schindelin
2018-07-09 13:40 ` [RFC PATCH 0/6] Compile cleanly in pedantic mode Johannes Schindelin
2018-07-09 16:25 ` Junio C Hamano
2018-07-09 19:25 ` [PATCH " Beat Bolli
2018-07-09 20:25   ` Beat Bolli
2018-07-09 21:45   ` Junio C Hamano
2018-07-09 21:47     ` Beat Bolli
2018-07-10  7:34     ` Beat Bolli
2018-07-11 15:42       ` Junio C Hamano
2018-07-12 13:25         ` Johannes Schindelin
2018-07-12 15:40           ` Junio C Hamano
2018-07-09 19:25 ` [PATCH 1/6] connect.h: avoid forward declaration of an enum Beat Bolli
2018-07-09 19:25 ` [PATCH 2/6] refs/refs-internal.h: " Beat Bolli
2018-07-09 19:25 ` [PATCH 3/6] convert.c: replace "\e" escapes with "\033" Beat Bolli
2018-07-09 19:25 ` [PATCH 4/6] sequencer.c: avoid empty statements at top level Beat Bolli
2018-07-09 21:37   ` Junio C Hamano
2018-07-09 19:25 ` Beat Bolli [this message]
2018-07-09 19:25 ` [PATCH 6/6] utf8.c: avoid char overflow Beat Bolli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180709192537.18564-6-dev+git@drbeat.li \
    --to=dev+git@drbeat.li \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.