Skip to content

Commit

Permalink
strbuf: separate callback for strbuf_expand:ing literals
Browse files Browse the repository at this point in the history
Expanding '%n' and '%xNN' is generic functionality, so extract that from
the pretty.c formatter into a callback that can be reused.

No functional change intended

Signed-off-by: Anders Waldenborg <anders@0x63.nu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
wanders authored and gitster committed Jan 29, 2019
1 parent d9b936d commit fd2015b
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 11 deletions.
16 changes: 5 additions & 11 deletions pretty.c
Expand Up @@ -1137,9 +1137,13 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
const char *msg = c->message;
struct commit_list *p;
const char *arg;
int ch;
size_t res;

/* these are independent of the commit */
res = strbuf_expand_literal_cb(sb, placeholder, NULL);
if (res)
return res;

switch (placeholder[0]) {
case 'C':
if (starts_with(placeholder + 1, "(auto)")) {
Expand All @@ -1158,16 +1162,6 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
*/
return ret;
}
case 'n': /* newline */
strbuf_addch(sb, '\n');
return 1;
case 'x':
/* %x00 == NUL, %x0a == LF, etc. */
ch = hex2chr(placeholder + 1);
if (ch < 0)
return 0;
strbuf_addch(sb, ch);
return 3;
case 'w':
if (placeholder[1] == '(') {
unsigned long width = 0, indent1 = 0, indent2 = 0;
Expand Down
21 changes: 21 additions & 0 deletions strbuf.c
Expand Up @@ -380,6 +380,27 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
}
}

size_t strbuf_expand_literal_cb(struct strbuf *sb,
const char *placeholder,
void *context)
{
int ch;

switch (placeholder[0]) {
case 'n': /* newline */
strbuf_addch(sb, '\n');
return 1;
case 'x':
/* %x00 == NUL, %x0a == LF, etc. */
ch = hex2chr(placeholder + 1);
if (ch < 0)
return 0;
strbuf_addch(sb, ch);
return 3;
}
return 0;
}

size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder,
void *context)
{
Expand Down
8 changes: 8 additions & 0 deletions strbuf.h
Expand Up @@ -320,6 +320,14 @@ void strbuf_expand(struct strbuf *sb,
expand_fn_t fn,
void *context);

/**
* Used as callback for `strbuf_expand` to only expand literals
* (i.e. %n and %xNN). The context argument is ignored.
*/
size_t strbuf_expand_literal_cb(struct strbuf *sb,
const char *placeholder,
void *context);

/**
* Used as callback for `strbuf_expand()`, expects an array of
* struct strbuf_expand_dict_entry as context, i.e. pairs of
Expand Down

0 comments on commit fd2015b

Please sign in to comment.