mirror of
https://github.com/torvalds/linux.git
synced 2025-04-09 14:45:27 +00:00
perf list: Allow wordwrap to wrap on commas
A raw event encoding may be a block with terms separated by commas. If wrapping such a string it would be useful to break at the commas, so add this ability to wordwrap. Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Kan Liang <kan.liang@linux.intel.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Yang Jihong <yangjihong1@huawei.com> Link: https://lore.kernel.org/r/20240308001915.4060155-4-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
39aa4ff61f
commit
aa1f4ad287
@ -22,6 +22,7 @@
|
||||
#include <subcmd/pager.h>
|
||||
#include <subcmd/parse-options.h>
|
||||
#include <linux/zalloc.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@ -76,26 +77,38 @@ static void default_print_start(void *ps)
|
||||
|
||||
static void default_print_end(void *print_state __maybe_unused) {}
|
||||
|
||||
static const char *skip_spaces_or_commas(const char *str)
|
||||
{
|
||||
while (isspace(*str) || *str == ',')
|
||||
++str;
|
||||
return str;
|
||||
}
|
||||
|
||||
static void wordwrap(FILE *fp, const char *s, int start, int max, int corr)
|
||||
{
|
||||
int column = start;
|
||||
int n;
|
||||
bool saw_newline = false;
|
||||
bool comma = false;
|
||||
|
||||
while (*s) {
|
||||
int wlen = strcspn(s, " \t\n");
|
||||
int wlen = strcspn(s, " ,\t\n");
|
||||
const char *sep = comma ? "," : " ";
|
||||
|
||||
if ((column + wlen >= max && column > start) || saw_newline) {
|
||||
fprintf(fp, "\n%*s", start, "");
|
||||
fprintf(fp, comma ? ",\n%*s" : "\n%*s", start, "");
|
||||
column = start + corr;
|
||||
}
|
||||
n = fprintf(fp, "%s%.*s", column > start ? " " : "", wlen, s);
|
||||
if (column <= start)
|
||||
sep = "";
|
||||
n = fprintf(fp, "%s%.*s", sep, wlen, s);
|
||||
if (n <= 0)
|
||||
break;
|
||||
saw_newline = s[wlen] == '\n';
|
||||
s += wlen;
|
||||
comma = s[0] == ',';
|
||||
column += n;
|
||||
s = skip_spaces(s);
|
||||
s = skip_spaces_or_commas(s);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user