[libvirt] [PATCH] Make sure sys/types.h is included after sys/sysmacros.h

Michal Privoznik mprivozn at redhat.com
Tue Sep 6 13:46:59 UTC 2016


In the latest glibc, major() and minor() functions are marked as
deprecated (glibc commit dbab6577):

  CC       util/libvirt_util_la-vircgroup.lo
util/vircgroup.c: In function 'virCgroupGetBlockDevString':
util/vircgroup.c:768:5: error: '__major_from_sys_types' is deprecated:
  In the GNU C Library, `major' is defined by <sys/sysmacros.h>.
  For historical compatibility, it is currently defined by
  <sys/types.h> as well, but we plan to remove this soon.
  To use `major', include <sys/sysmacros.h> directly.
  If you did not intend to use a system-defined macro `major',
  you should #undef it after including <sys/types.h>.
  [-Werror=deprecated-declarations]
     if (virAsprintf(&ret, "%d:%d ", major(sb.st_rdev), minor(sb.st_rdev)) < 0)
     ^~
In file included from /usr/include/features.h:397:0,
                 from /usr/include/bits/libc-header-start.h:33,
                 from /usr/include/stdio.h:28,
                 from ../gnulib/lib/stdio.h:43,
                 from util/vircgroup.c:26:
/usr/include/sys/sysmacros.h:87:1: note: declared here
 __SYSMACROS_DEFINE_MAJOR (__SYSMACROS_FST_IMPL_TEMPL)
 ^

Moreover, in the glibc commit, there's suggestion to keep
ordering of including of header files as implemented here.

Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
---

This still won't solve the build issue completely as AC_HEADER_MAJOR still
reports that major() is defined by sys/types.h instead of sys/sysmacros.h.
But once they fix it, we are good too. Or we can use the following
workaround in configure.ac:

  +old_CFLAGS=$CFLAGS
  +CFLAGS+=" -Werror "
   AC_HEADER_MAJOR
  +CFLAGS=$old_CFLAGS

 src/conf/domain_audit.c  | 3 ++-
 src/lxc/lxc_controller.c | 2 +-
 src/lxc/lxc_driver.c     | 2 +-
 src/util/vircgroup.c     | 2 +-
 src/util/virutil.c       | 2 +-
 5 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index 53a58ac..52dea02 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -24,7 +24,6 @@
 #include <config.h>
 
 #include <sys/stat.h>
-#include <sys/types.h>
 
 #ifdef MAJOR_IN_MKDEV
 # include <sys/mkdev.h>
@@ -32,6 +31,8 @@
 # include <sys/sysmacros.h>
 #endif
 
+#include <sys/types.h>
+
 #include "domain_audit.h"
 #include "viraudit.h"
 #include "viruuid.h"
diff --git a/src/lxc/lxc_controller.c b/src/lxc/lxc_controller.c
index 825b4d4..8c581df 100644
--- a/src/lxc/lxc_controller.c
+++ b/src/lxc/lxc_controller.c
@@ -27,7 +27,6 @@
 #include <sys/epoll.h>
 #include <sys/wait.h>
 #include <sys/socket.h>
-#include <sys/types.h>
 
 #ifdef MAJOR_IN_MKDEV
 # include <sys/mkdev.h>
@@ -35,6 +34,7 @@
 # include <sys/sysmacros.h>
 #endif
 
+#include <sys/types.h>
 #include <sys/un.h>
 #include <sys/personality.h>
 #include <unistd.h>
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index da98b38..24025d1 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -28,7 +28,6 @@
 #include <sched.h>
 #include <sys/utsname.h>
 #include <string.h>
-#include <sys/types.h>
 
 #ifdef MAJOR_IN_MKDEV
 # include <sys/mkdev.h>
@@ -36,6 +35,7 @@
 # include <sys/sysmacros.h>
 #endif
 
+#include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 #include <sys/un.h>
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index f2477d5..8b52816 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -34,7 +34,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 
 #ifdef MAJOR_IN_MKDEV
 # include <sys/mkdev.h>
@@ -42,6 +41,7 @@
 # include <sys/sysmacros.h>
 #endif
 
+#include <sys/types.h>
 #include <signal.h>
 #include <dirent.h>
 #include <unistd.h>
diff --git a/src/util/virutil.c b/src/util/virutil.c
index 170dd59..b57a195 100644
--- a/src/util/virutil.c
+++ b/src/util/virutil.c
@@ -35,7 +35,6 @@
 #include <errno.h>
 #include <poll.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 
 #ifdef MAJOR_IN_MKDEV
 # include <sys/mkdev.h>
@@ -43,6 +42,7 @@
 # include <sys/sysmacros.h>
 #endif
 
+#include <sys/types.h>
 #include <sys/ioctl.h>
 #include <string.h>
 #include <termios.h>
-- 
2.8.4




More information about the libvir-list mailing list