From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yonghong Song Subject: [PATCH bpf-next] tools/bpf: make libbpf _GNU_SOURCE friendly Date: Thu, 29 Nov 2018 12:38:03 -0800 Message-ID: <20181129203803.1547309-1-yhs@fb.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Cc: To: , , Return-path: Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:57992 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726190AbeK3Hp3 (ORCPT ); Fri, 30 Nov 2018 02:45:29 -0500 Received: from pps.filterd (m0001255.ppops.net [127.0.0.1]) by mx0b-00082601.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id wATKVMsS010568 for ; Thu, 29 Nov 2018 12:38:48 -0800 Received: from mail.thefacebook.com ([199.201.64.23]) by mx0b-00082601.pphosted.com with ESMTP id 2p2nuurau5-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 29 Nov 2018 12:38:47 -0800 Sender: netdev-owner@vger.kernel.org List-ID: During porting libbpf to bcc, I got some warnings like below: ... [ 2%] Building C object src/cc/CMakeFiles/bpf-shared.dir/libbpf/src/li= bbpf.c.o /home/yhs/work/bcc2/src/cc/libbpf/src/libbpf.c:12:0: warning: "_GNU_SOURCE" redefined [enabled by default] #define _GNU_SOURCE ... [ 3%] Building C object src/cc/CMakeFiles/bpf-shared.dir/libbpf/src/li= bbpf_errno.c.o /home/yhs/work/bcc2/src/cc/libbpf/src/libbpf_errno.c: In function =E2=80= =98libbpf_strerror=E2=80=99: /home/yhs/work/bcc2/src/cc/libbpf/src/libbpf_errno.c:45:7: warning: assignment makes integer from pointer without a cast [enabled = by default] ret =3D strerror_r(err, buf, size); ... bcc is built with _GNU_SOURCE defined and this caused the above warning. This patch intends to make libpf _GNU_SOURCE friendly by . define _GNU_SOURCE unless it is not defined . gnu version strerror_r has different return value than non-gnu versio= n, so strerror_r return value is handled differently if _GNU_SOURCE is d= efined. Signed-off-by: Yonghong Song --- tools/lib/bpf/libbpf.c | 2 ++ tools/lib/bpf/libbpf_errno.c | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index ed4212a4c5f9..59b748ebd15f 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -9,7 +9,9 @@ * Copyright (C) 2017 Nicira, Inc. */ =20 +#ifndef _GNU_SOURCE #define _GNU_SOURCE +#endif #include #include #include diff --git a/tools/lib/bpf/libbpf_errno.c b/tools/lib/bpf/libbpf_errno.c index d83b17f8435c..286e497c50ec 100644 --- a/tools/lib/bpf/libbpf_errno.c +++ b/tools/lib/bpf/libbpf_errno.c @@ -40,9 +40,19 @@ int libbpf_strerror(int err, char *buf, size_t size) err =3D err > 0 ? err : -err; =20 if (err < __LIBBPF_ERRNO__START) { +#ifdef _GNU_SOURCE + const char *ret_buf; +#endif int ret; =20 +#ifdef _GNU_SOURCE + ret_buf =3D strerror_r(err, buf, size); + if (ret_buf !=3D buf) + snprintf(buf, size, "%s", ret_buf); + ret =3D 0; +#else ret =3D strerror_r(err, buf, size); +#endif buf[size - 1] =3D '\0'; return ret; } --=20 2.17.1