From c56d61883c6f093ac905c49f76a99be5e8e09332 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Tue, 17 Oct 2017 19:39:47 +0200 Subject: [PATCH] btrfs-progs: help: print multiple syntax schemas on separate lines The help string for some commands could be split to more lines for clarity, eg. as is now in the receive command. The 'btrfs help' listing should indent all the lines properly, similar the command specific help with "usage:'. The syntax of the first help string line is to separate all command usage schemas by "\n". Signed-off-by: David Sterba --- help.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/help.c b/help.c index 99097db8..311a4320 100644 --- a/help.c +++ b/help.c @@ -128,12 +128,32 @@ static int do_usage_one_command(const char * const *usagestr, unsigned int flags, FILE *outf) { int pad = 4; + const char *prefix = "usage: "; + const char *pad_listing = " "; if (!usagestr || !*usagestr) return -1; - fprintf(outf, "%s%s", (flags & USAGE_LISTING) ? " " : "usage: ", - *usagestr++); + if (flags & USAGE_LISTING) + prefix = pad_listing; + + fputs(prefix, outf); + if (strchr(*usagestr, '\n') == NULL) { + fputs(*usagestr, outf); + } else { + const char *c = *usagestr; + const char *nprefix = " "; + + if (flags & USAGE_LISTING) + nprefix = pad_listing; + + for (c = *usagestr; *c; c++) { + fputc(*c, outf); + if (*c == '\n') + fputs(nprefix, outf); + } + } + usagestr++; /* a short one-line description (mandatory) */ if ((flags & USAGE_SHORT) == 0)