Skip to content

Commit

Permalink
pretty.c: add %x00 format specifier.
Browse files Browse the repository at this point in the history
This adds a %xXX format which inserts two hexdigits after %x as a byte
value in the resulting string.  This can be used to add a NUL byte or any
other byte that can make machine parsing easier.  It is also necessary to
use fwrite to print out the data since printf will terminate if you feed
it a NUL.

Signed-off-by: Govind Salinas <blix@sophiasuchtig.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Govind Salinas authored and Junio C Hamano committed Mar 23, 2008
1 parent bc61000 commit 42c8c74
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
1 change: 1 addition & 0 deletions Documentation/pretty-formats.txt
Original file line number Diff line number Diff line change
Expand Up @@ -123,3 +123,4 @@ The placeholders are:
- '%Creset': reset color
- '%m': left, right or boundary mark
- '%n': newline
- '%x00': print a byte from a hex code
6 changes: 4 additions & 2 deletions log-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,8 +317,10 @@ void show_log(struct rev_info *opt, const char *sep)
if (opt->show_log_size)
printf("log size %i\n", (int)msgbuf.len);

if (msgbuf.len)
printf("%s%s%s", msgbuf.buf, extra, sep);
if (msgbuf.len) {
fwrite(msgbuf.buf, sizeof(char), msgbuf.len, stdout);
printf("%s%s", extra, sep);
}
strbuf_release(&msgbuf);
}

Expand Down
11 changes: 11 additions & 0 deletions pretty.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
const struct commit *commit = c->commit;
const char *msg = commit->buffer;
struct commit_list *p;
int h1, h2;

/* these are independent of the commit */
switch (placeholder[0]) {
Expand All @@ -478,6 +479,16 @@ static size_t format_commit_item(struct strbuf *sb, const char *placeholder,
case 'n': /* newline */
strbuf_addch(sb, '\n');
return 1;
case 'x':
/* %x00 == NUL, %x0a == LF, etc. */
if (0 <= (h1 = hexval_table[0xff & placeholder[1]]) &&
h1 <= 16 &&
0 <= (h2 = hexval_table[0xff & placeholder[2]]) &&
h2 <= 16) {
strbuf_addch(sb, (h1<<4)|h2);
return 3;
} else
return 0;
}

/* these depend on the commit */
Expand Down

0 comments on commit 42c8c74

Please sign in to comment.