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/[email protected]/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