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>
This commit is contained in:
parent
2f197b9d7e
commit
e1aa7c30c5
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue