On Wed, Aug 22, 2012 at 04:00:31PM +0900, Namhyung Kim wrote:
> From: Namhyung Kim <[email protected]>
> 
> 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.
> 
> Cc: Fredereic Weisbecker <[email protected]>
> Cc: Steven Rostedt <[email protected]>
> Cc: Kirill A. Shutemov <[email protected]>
> Signed-off-by: Namhyung Kim <[email protected]>

Acked-by: Kirill A. Shutemov <[email protected]>

> ---
>  tools/lib/traceevent/event-parse.c | 7 ++++++-
>  tools/lib/traceevent/event-utils.h | 6 ++++++
>  2 files changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/lib/traceevent/event-parse.c 
> b/tools/lib/traceevent/event-parse.c
> index 1373e4cf109e..f978c59f67bf 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 08296383d1e6..bc075006966e 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;
> -- 
> 1.7.11.4
> 

-- 
 Kirill A. Shutemov
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to