lkml.org 
[lkml]   [2012]   [Aug]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] tools lib traceevent: Fix strerror_r() use in pevent_strerror
    Commit-ID:  e1aa7c30c599e99b4544f9e5b4c275c8a5325bdc
    Gitweb: http://git.kernel.org/tip/e1aa7c30c599e99b4544f9e5b4c275c8a5325bdc
    Author: Namhyung Kim <namhyung.kim@lge.com>
    AuthorDate: Wed, 22 Aug 2012 16:00:31 +0900
    Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
    CommitDate: Wed, 22 Aug 2012 16:04:05 -0300

    tools lib traceevent: Fix strerror_r() use in pevent_strerror

    glibc-2.16 starts to mark the function with attribute warn_unused_result
    so that it can cause a build warning.

    Since GNU version of strerror_r() can return a pointer to a string
    without setting @buf, check the return value and copy/truncate it to our
    buffer if needed.

    Signed-off-by: Namhyung Kim <namhyung@kernel.org>
    Acked-by: Kirill A. Shutemov <kirill@shutemov.name>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Kirill A. Shutemov <kirill@shutemov.name>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1345618831-9148-5-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/lib/traceevent/event-parse.c | 7 ++++++-
    tools/lib/traceevent/event-utils.h | 6 ++++++
    2 files changed, 12 insertions(+), 1 deletions(-)

    diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
    index 1373e4c..f978c59 100644
    --- a/tools/lib/traceevent/event-parse.c
    +++ b/tools/lib/traceevent/event-parse.c
    @@ -4809,7 +4809,12 @@ int pevent_strerror(struct pevent *pevent, enum pevent_errno errnum,
    const char *msg;

    if (errnum >= 0) {
    - strerror_r(errnum, buf, buflen);
    + msg = strerror_r(errnum, buf, buflen);
    + if (msg != buf) {
    + size_t len = strlen(msg);
    + char *c = mempcpy(buf, msg, min(buflen-1, len));
    + *c = '\0';
    + }
    return 0;
    }

    diff --git a/tools/lib/traceevent/event-utils.h b/tools/lib/traceevent/event-utils.h
    index 0829638..bc07500 100644
    --- a/tools/lib/traceevent/event-utils.h
    +++ b/tools/lib/traceevent/event-utils.h
    @@ -39,6 +39,12 @@ void __vdie(const char *fmt, ...);
    void __vwarning(const char *fmt, ...);
    void __vpr_stat(const char *fmt, ...);

    +#define min(x, y) ({ \
    + typeof(x) _min1 = (x); \
    + typeof(y) _min2 = (y); \
    + (void) (&_min1 == &_min2); \
    + _min1 < _min2 ? _min1 : _min2; })
    +
    static inline char *strim(char *string)
    {
    char *ret;

    \
     
     \ /
      Last update: 2012-08-27 20:21    [W:2.326 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site