Re: git-grep Bus Error
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 9, 2009, 01:11 UTC
- Message-ID
- <7vtz63ijoz.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <20090308234141.GJ12880@zoy.org>
Sam Hocevar <sam@zoy.org> writes:
Show 16 quoted lines
> On Sun, Mar 08, 2009, Brian Gernhardt wrote: > >> > printf( "%d %d %d", >> > match.rm_so, match.rm_eo, >> > match.rm_eo - match.rm_so ); >> >> .gitignore:0 0 3\033[31m\033[1m(nugit >> .mailmap:23 0 26(null)\033[31m\033[1m(nugit-shortlog to fix a few >> botched name translations-shortlog to fix a few botched name >> translations >> >> And now I'm baffled. Apparently my computer thinks 0 - 0 == 3 and 0 - >> 23 == 26. > > rm_so and rm_eo are ints on Linux but off_t's on Darwin, hence > probably int64_t's here. You should cast the arguments.
That is a very good point. In fact, "git grep -n -e 'printf.*%\.\*s'" reveals that many existing call sites to this form casts the precision argument explicitly to "int".
Brian, would this patch help?
grep.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/grep.c b/grep.c index cace1c8..dcdbd5e 100644 --- a/grep.c +++ b/grep.c @@ -490,9 +490,9 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol, *eol = '\0'; while (next_match(opt, bol, eol, ctx, &match, eflags)) { printf("%.*s%s%.*s%s", - match.rm_so, bol, + (int) match.rm_so, bol, opt->color_match, - match.rm_eo - match.rm_so, bol + match.rm_so, + (int)(match.rm_eo - match.rm_so), bol + match.rm_so, GIT_COLOR_RESET); bol += match.rm_eo; rest -= match.rm_eo;