While developing 6aaded550 ("builtin/config: work around an unsized array forward declaration", 2018-07-05), I have compiled Git with CFLAGS="-std=c99 -pedantic". This series fixes a few compiler warnings when compiling with these options. Note that all warnings were produced by -pedantic; the C99 standard option by itself didn't cause any of them. The warnings were: 1) Char arrays initialized from a parenthesized string. Suppressed by defining USE_PARENS_AROUND_GETTEXT_N to 0 globally. This was done just to keep the amount of warnings manageable; this series leaves that knob alone. The advantage of not mistakenly concatenating two translated strings is greater. 2) connect.h, refs/refs-internal.h: Forward reference to an enum. Added two #includes that define the enums. This was already (inconclusively) talked about in [0]. 3) convert.c: Invalid escape sequence "\e". Replaced with "\033". 4) sequencer.c: Empty statements at top level. Removed the extra semicolons. 5) string-list.c: Forbidden to cast from void * to a function pointer and vice versa. Encapsulated the function pointer in a context struct. This is controversial because it has a performance impact, namely one additional pointer dereference per string comparison. An alternative might be to use multiple casts via intptr_t. But I'm not sure if this is worth the trouble. 6) utf8.c: overflow of char values. Used proper char literals for the BOM constants. This series has patches for 2) to 6). Regards, Beat [0] https://public-inbox.org/git/53ab8626-f862-a732-b369-abeab69a468f@xxxxxxxxxxxxxxxxxxxx/T/ Beat Bolli (6): connect.h: avoid forward declaration of an enum refs/refs-internal.h: avoid forward declaration of an enum convert.c: replace "\e" escapes with "\033". sequencer.c: avoid empty statements at top level string-list.c: avoid conversion from void * to function pointer utf8.c: avoid char overflow connect.h | 2 ++ convert.c | 2 +- path.h | 2 +- refs/refs-internal.h | 2 ++ sequencer.c | 4 ++-- string-list.c | 18 ++++++++++++++---- utf8.c | 8 ++++---- 7 files changed, 26 insertions(+), 12 deletions(-) Interdiff from the RFC series: diff --git a/path.h b/path.h index 1ccd0373c9..fc9d3487a0 100644 --- a/path.h +++ b/path.h @@ -147,7 +147,7 @@ extern void report_linked_checkout_garbage(void); /* * You can define a static memoized git path like: * - * static GIT_PATH_FUNC(git_path_foo, "FOO"); + * static GIT_PATH_FUNC(git_path_foo, "FOO") * * or use one of the global ones below. */ diff --git a/utf8.c b/utf8.c index 833ce00617..982217eec9 100644 --- a/utf8.c +++ b/utf8.c @@ -561,15 +561,15 @@ char *reencode_string_len(const char *in, int insz, #endif static int has_bom_prefix(const char *data, size_t len, - const unsigned char *bom, size_t bom_len) + const char *bom, size_t bom_len) { return data && bom && (len >= bom_len) && !memcmp(data, bom, bom_len); } -static const unsigned char utf16_be_bom[] = {0xFE, 0xFF}; -static const unsigned char utf16_le_bom[] = {0xFF, 0xFE}; -static const unsigned char utf32_be_bom[] = {0x00, 0x00, 0xFE, 0xFF}; -static const unsigned char utf32_le_bom[] = {0xFF, 0xFE, 0x00, 0x00}; +static const char utf16_be_bom[] = {'\xFE', '\xFF'}; +static const char utf16_le_bom[] = {'\xFF', '\xFE'}; +static const char utf32_be_bom[] = {'\0', '\0', '\xFE', '\xFF'}; +static const char utf32_le_bom[] = {'\xFF', '\xFE', '\0', '\0'}; int has_prohibited_utf_bom(const char *enc, const char *data, size_t len) { -- 2.18.0.203.gfac676dfb9