From: Junio C Hamano Date: Sat, 03 Mar 2007 21:53:47 GMT Subject: Re: [PATCH 1/6] Fix some "printf format" warnings. Message-ID: <7v4pp29eok.fsf@assigned-by-dhcp.cox.net> In-Reply-To: <45E9BE46.1020801@ramsay1.demon.co.uk> Ramsay Jones writes: > Signed-off-by: Ramsay Jones > --- > > It's interesting to note that all of the warnings are caused by mismatching > parameter expression involving a call to ntohl(). > [OK, it wasn't that interesting ;-)] > diff --git a/builtin-ls-files.c b/builtin-ls-files.c > index ac89eb2..5c990a5 100644 > --- a/builtin-ls-files.c > +++ b/builtin-ls-files.c > @@ -193,7 +193,7 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce) > putchar(line_terminator); > } > else { > - printf("%s%06o %s %d\t", > + printf("%s%06lo %s %d\t", > tag, > ntohl(ce->ce_mode), > abbrev ? find_unique_abbrev(ce->sha1,abbrev) I think the issue is ntohl() returns uint32_t, and this did not surface as an issue so far only because that type happens to be defined as 'unsigned int' on many systems. Changing %o to %lo is shifting the breakage to other systems, isn't it? I think we should do this instead: printf("%s%06o %s %d\t", tag, (unsigned) ntohl(ce->ce_mode), ...