From 54b9925b931afbc762e03cced13e23d2b90427c2 Mon Sep 17 00:00:00 2001 From: Luke Granger-Brown Date: Wed, 3 Jun 2020 02:24:00 +0100 Subject: [PATCH] fix(3p/cgit): Fix compilation under Clang Clang treats function-like macros "correctly", in that, per the C11 spec: "Each subsequent instance of the function-like macro name followed by a ( [...] is replaced by the replacement list [...]". Additionally, fprintf is also permitted to be defined as a function-like macro rather than as a true function: "Any function declared in a header may be additionally implemented as a function-like macro defined in the header [...]". The specification then suggests surrounding the name of the function in parens to avoid this, which is the technique we use here to avoid the function-like macro being invoked. The other fix here is to use uintptr_t for some arithmetic, since Git is expecting an int as the value here and not a pointer. --- third_party/cgit/filter.c | 2 +- third_party/cgit/parsing.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/cgit/filter.c b/third_party/cgit/filter.c index 70f5b7499..181d9a892 100644 --- a/third_party/cgit/filter.c +++ b/third_party/cgit/filter.c @@ -385,7 +385,7 @@ int cgit_close_filter(struct cgit_filter *filter) void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix) { - filter->fprintf(filter, f, prefix); + (filter->fprintf)(filter, f, prefix); } diff --git a/third_party/cgit/parsing.c b/third_party/cgit/parsing.c index 7b3980e6b..b4b5f904d 100644 --- a/third_party/cgit/parsing.c +++ b/third_party/cgit/parsing.c @@ -72,7 +72,7 @@ static void parse_user(const char *t, char **name, char **email, unsigned long * struct ident_split ident; unsigned email_len; - if (!split_ident_line(&ident, t, strchrnul(t, '\n') - t)) { + if (!split_ident_line(&ident, t, (uintptr_t)strchrnul(t, '\n') - (uintptr_t)t)) { *name = substr(ident.name_begin, ident.name_end); email_len = ident.mail_end - ident.mail_begin;