Re: [PATCH] Fix some sparse warnings
- From
Jonathan Nieder <jrnieder@gmail.com>
- Date
- Jul 21, 2013, 17:39 UTC
- Message-ID
- <20130721173936.GA10647@elie.Belkin>
- In-Reply-To
- <51E84F4E.3050600@ramsay1.demon.co.uk>
Hi,
Ramsay Jones wrote:
Show 5 quoted lines
> Sparse issues some "Using plain integer as NULL pointer" warnings.
> Each warning relates to the use of an '{0}' initialiser expression
> in the declaration of an 'struct object_info'. The first field of
> this structure has pointer type. Thus, in order to suppress these
> warnings, we replace the initialiser expression with '{NULL}'.I agree that this is worth solving but the fix feels like a move in the wrong direction. Before this patch, the initialization says "= {0}", which basically means "memset it to 0". Afterward, the initializer depends on the order of fields in the struct.
How about something like the following?
diff --git i/cache.h w/cache.h index f2915509..ba028b75 100644 --- i/cache.h +++ w/cache.h @@ -1124,6 +1124,7 @@ struct object_info { } packed; } u; }; +#define OBJECT_INFO_INIT { NULL, NULL, OI_CACHED, { { NULL, 0, 0 } } } extern int sha1_object_info_extended(const unsigned char *, struct object_info *); /* Dumb servers support */ diff --git i/sha1_file.c w/sha1_file.c index 6baed676..2d812b8d 100644 --- i/sha1_file.c +++ w/sha1_file.c @@ -2421,7 +2421,7 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi) int sha1_object_info(const unsigned char *sha1, unsigned long *sizep) { - struct object_info oi = {0}; + struct object_info oi = OBJECT_INFO_INIT; oi.sizep = sizep; return sha1_object_info_extended(sha1, &oi); diff --git i/streaming.c w/streaming.c index cac282f0..b4c40ad9 100644 --- i/streaming.c +++ w/streaming.c @@ -135,7 +135,7 @@ struct git_istream *open_istream(const unsigned char *sha1, struct stream_filter *filter) { struct git_istream *st; - struct object_info oi = {0}; + struct object_info oi = OBJECT_INFO_INIT; const unsigned char *real = lookup_replace_object(sha1); enum input_source src = istream_source(real, type, &oi);