strbuf_expand() is used to interpolate placeholders that start with a percent sign (%) in strings. It invokes a callback function to handle those placeholders, expands "%%" to "%" itself and copies unrecognized placeholders verbatim. Context info for the callback needs to be passed in via a void pointer, e.g. to a custom struct. There is a better, simpler way: Use a loop to iterate over placeholders and access variables directly, without the need to take a detour through a context struct. This series converts the callers of strbuf_expand() to use the new helper strbuf_expand_step(), removing the overhead that comes with using a callback. pretty: factor out expand_separator() strbuf: factor out strbuf_expand_step() replace strbuf_expand_dict_cb() with strbuf_expand_step() replace strbuf_expand() with strbuf_expand_step() strbuf: simplify strbuf_expand_literal_cb() builtin/branch.c | 13 +----- builtin/cat-file.c | 35 +++++++-------- builtin/ls-files.c | 109 +++++++++++++++++++-------------------------- builtin/ls-tree.c | 107 +++++++++++++++++--------------------------- convert.c | 22 +++++---- daemon.c | 61 ++++++++----------------- ll-merge.c | 32 +++++++------ pretty.c | 99 ++++++++++++++++++++++------------------ strbuf.c | 58 +++++------------------- strbuf.h | 57 ++++-------------------- 10 files changed, 228 insertions(+), 365 deletions(-) -- 2.41.0