[LTP] [PATCH] include: undefine _LINUX_TYPES_H if including sys/capability.h

Li Wang liwang@redhat.com
Wed Oct 16 08:57:03 CEST 2019


Richard Palethorpe <rpalethorpe@suse.de> wrote:

...
> >  #ifdef HAVE_SYS_CAPABILITY_H
> >  # include <sys/capability.h>
> > +# undef _LINUX_TYPES_H
>
> My concern here is if linux/types.h has already been included. Then this
> could cause a redefinition error if it is included again.
>

Hmm, it looks tricky to solve this, because I didn't find a macro to show
version in libcap files.

Another method I can think of is to build a small program to check if that
libcap version is newer or not during the configure phase. If yes, then
export a new macro HAVE_NEWER_LIBCAP to be used in /lapi/capability.h.

The following patch has been verified on both rhel6 and rhel8, any comments?
[I'm not familiar with m4 syntax, just copy from other places]

diff --git a/include/lapi/capability.h b/include/lapi/capability.h
index 3c2ee7937..3607179b5 100644
--- a/include/lapi/capability.h
+++ b/include/lapi/capability.h
@@ -10,7 +10,9 @@

 #ifdef HAVE_SYS_CAPABILITY_H
 # include <sys/capability.h>
-# undef _LINUX_TYPES_H
+# ifndef HAVE_NEWER_LIBCAP
+#  undef _LINUX_TYPES_H
+# endif
 #endif

 #ifndef CAP_NET_RAW
diff --git a/m4/ltp-cap.m4 b/m4/ltp-cap.m4
index 02d3cac8c..8b1546401 100644
--- a/m4/ltp-cap.m4
+++ b/m4/ltp-cap.m4
@@ -14,4 +14,20 @@ if test "x$cap_libs" != x; then
        AC_DEFINE(HAVE_LIBCAP)
 fi
 AC_SUBST(CAP_LIBS,$cap_libs)
+
+AH_TEMPLATE(HAVE_NEWER_LIBCAP,
+[Define to 1 if you have newer libcap-2 installed.])
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+#include <sys/capability.h>
+#include <linux/types.h>
+int main(void) {
+       __u16 a;
+       __u32 b;
+       return 0;
+}])],[has_newer_libcap="yes"])
+
+if test "x$has_newer_libcap" = xyes; then
+       AC_DEFINE(HAVE_NEWER_LIBCAP)
+fi
 ])
-- 
Regards,
Li Wang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20191016/906d80d0/attachment.htm>


More information about the ltp mailing list