From fd2015b323d283c73346d70d2285a927650bb60a Mon Sep 17 00:00:00 2001 From: Anders Waldenborg Date: Mon, 28 Jan 2019 22:33:36 +0100 Subject: 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 Signed-off-by: Junio C Hamano --- strbuf.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'strbuf.c') diff --git a/strbuf.c b/strbuf.c index f6a6cf78b9..78eecd29f7 100644 --- a/strbuf.c +++ b/strbuf.c @@ -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) { -- cgit v1.3-5-g9baa