From: Brian Gernhardt Date: Sun, 08 Mar 2009 23:27:01 GMT Subject: git-grep Bus Error Message-ID: The --color display code in git-grep is giving me a bus error in show_line at line 492: > printf("%.*s%s%.*s%s", > match.rm_so, bol, > opt->color_match, > match.rm_eo - match.rm_so, bol + > match.rm_so, > GIT_COLOR_RESET); The first problem is that %.*s does not appear to do on OS X what the author thinks it does. A precision of 0 for %s is listed in "man printf" as printing the entire string. To fix that, I changed it to the following: > if( match.rm_so > 0 ) > printf( "%.*s", match.rm_so, bol ); > if( match.rm_eo > match.rm_so ) > printf("%s%.*s%s", > opt->color_match, > match.rm_eo - match.rm_so, bol + match.rm_so, > GIT_COLOR_RESET); This code does not fail, but instead gives lines like the following (showing the raw color codes): .gitignore:\033[31m\033[1m(nugit GIT_COLOR_RESET is apparently being ignored, and I don't know why. Adding a line to check the values of rm_so, rm_eo, and the difference between the two gives: > 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. Can I get some help? ~~ Brian