diff options
author | Anders Waldenborg <anders@0x63.nu> | 2019-01-29 00:33:36 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-01-29 21:03:32 +0300 |
commit | fd2015b323d283c73346d70d2285a927650bb60a (patch) | |
tree | 5b9c6bfd56a19a636c6a356b3cfddb3e3dd273b4 /strbuf.c | |
parent | d9b936db5226ed4b87d42a2c91324adc50c768b6 (diff) |
strbuf: separate callback for strbuf_expand:ing literals
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>
Diffstat (limited to 'strbuf.c')
-rw-r--r-- | strbuf.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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) { |