lkml.org 
[lkml]   [2009]   [Oct]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 02/13] [PATCH 02/13] perf tools: fix backslash processing on trace print formats
    From: Steven Rostedt <srostedt@redhat.com>

    The handling of backslashes was broken. It would stop parsing when
    accountering one. Also, '\n', '\t', '\r' and '\\' were not converted.

    Signed-off-by: Steven Rostedt <srostedt@redhat.com>
    ---
    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 2fee75f..cae88de 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)
    last_ch = ch;
    ch = __read_char();
    buf[i++] = ch;
    - } while (ch != quote_ch && last_ch != '\\');
    + /* the '\' '\' will cancel itself */
    + if (ch == '\\' && last_ch == '\\')
    + last_ch = 0;
    + } while (ch != quote_ch || last_ch == '\\');
    /* remove the last quote */
    i--;
    goto out;
    @@ -2325,7 +2328,27 @@ static void pretty_print(void *data, int size, struct event *event)

    for (; *ptr; ptr++) {
    ls = 0;
    - if (*ptr == '%') {
    + if (*ptr == '\\') {
    + ptr++;
    + switch (*ptr) {
    + case 'n':
    + printf("\n");
    + break;
    + case 't':
    + printf("\t");
    + break;
    + case 'r':
    + printf("\r");
    + break;
    + case '\\':
    + printf("\\");
    + break;
    + default:
    + printf("%c", *ptr);
    + break;
    + }
    +
    + } else if (*ptr == '%') {
    saveptr = ptr;
    show_func = 0;
    cont_process:
    --
    1.6.3.3



    \
     
     \ /
      Last update: 2009-10-14 22:15    [W:0.021 / U:61.728 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site