diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-10-14 15:43:33 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-10-15 04:42:35 -0400 |
commit | 91ff2bc191827f0d3f5ad0a433ff7df7d2dd9aee (patch) | |
tree | b1ce2b9f026fc579e6ebf1a9724725f925750f5a | |
parent | 924a79af2cdee26a034b9bdce8c9c76995b5c901 (diff) |
perf tools: Fix backslash processing on trace print formats
The handling of backslashes was broken. It would stop parsing
when encountering one. Also, '\n', '\t', '\r' and '\\' were not
converted.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
LKML-Reference: <20091014194357.521974680@goodmis.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | tools/perf/util/trace-event-parse.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/tools/perf/util/trace-event-parse.c b/tools/perf/util/trace-event-parse.c index a05c7144aded..2b75ec2f57e8 100644 --- a/tools/perf/util/trace-event-parse.c +++ b/tools/perf/util/trace-event-parse.c | |||
@@ -522,7 +522,10 @@ static enum event_type __read_token(char **tok) | |||
522 | last_ch = ch; | 522 | last_ch = ch; |
523 | ch = __read_char(); | 523 | ch = __read_char(); |
524 | buf[i++] = ch; | 524 | buf[i++] = ch; |
525 | } while (ch != quote_ch && last_ch != '\\'); | 525 | /* the '\' '\' will cancel itself */ |
526 | if (ch == '\\' && last_ch == '\\') | ||
527 | last_ch = 0; | ||
528 | } while (ch != quote_ch || last_ch == '\\'); | ||
526 | /* remove the last quote */ | 529 | /* remove the last quote */ |
527 | i--; | 530 | i--; |
528 | goto out; | 531 | goto out; |
@@ -2325,7 +2328,27 @@ static void pretty_print(void *data, int size, struct event *event) | |||
2325 | 2328 | ||
2326 | for (; *ptr; ptr++) { | 2329 | for (; *ptr; ptr++) { |
2327 | ls = 0; | 2330 | ls = 0; |
2328 | if (*ptr == '%') { | 2331 | if (*ptr == '\\') { |
2332 | ptr++; | ||
2333 | switch (*ptr) { | ||
2334 | case 'n': | ||
2335 | printf("\n"); | ||
2336 | break; | ||
2337 | case 't': | ||
2338 | printf("\t"); | ||
2339 | break; | ||
2340 | case 'r': | ||
2341 | printf("\r"); | ||
2342 | break; | ||
2343 | case '\\': | ||
2344 | printf("\\"); | ||
2345 | break; | ||
2346 | default: | ||
2347 | printf("%c", *ptr); | ||
2348 | break; | ||
2349 | } | ||
2350 | |||
2351 | } else if (*ptr == '%') { | ||
2329 | saveptr = ptr; | 2352 | saveptr = ptr; |
2330 | show_func = 0; | 2353 | show_func = 0; |
2331 | cont_process: | 2354 | cont_process: |