Compile cleanly in pedantic mode
Get series with b4
b4 am [email protected]Versions newest first
- v1 Latest0 of 6 patches 7 repliesIn review
Patches in v1 No applies recorded yet
None of the 6 patches the cover letter announces are in this archive.
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [PATCH 0/6] Compile cleanly in pedantic mode
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:
path.h +1 -1
@@ -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. */
utf8.c +5 -5
@@ -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) {
Signature · 1 line
2.18.0.203.gfac676dfb9