Skip to contentSkip to conversation

net: include compat.h first incase some specifier-qualifier-list error

PATCH In review Hangbin Liu 2 participants 3 messages Aug 13, 2013 – Aug 14, 2013 Networking

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net: include compat.h first incase some specifier-qualifier-list error

On some old distros, we use sa_family_t in linux/irda.h and linux/netlink.h first, but include the header file bits/sockaddr.h later in compat.h. Then it will compile failed with error: expected specifier-qualifier-list before ‘sa_family_t’. So let's move compat.h before irda.h and netlink.h

---
 net/irda_setsockopt.c    | 2 +-
 net/netlink_setsockopt.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
net/irda_setsockopt.c +1 -1
index a5d96ec..21ff649 100644
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/irda.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/irda.h>
 
 #define NR_SOL_IRDA_OPTS ARRAY_SIZE(irda_opts)
 static const unsigned int irda_opts[] = {
net/netlink_setsockopt.c +1 -1
index c6e9297..c401047 100644
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/netlink.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/netlink.h>
 
 #define SOL_NETLINK 270
 
Signature · 1 line
1.8.1.4
#1 lore raw
Quoted 26 lines · Hangbin Liu

On some old distros, we use sa_family_t in linux/irda.h and linux/netlink.h first, but include the header file bits/sockaddr.h later in compat.h. Then it will compile failed with error: expected specifier-qualifier-list before ‘sa_family_t’. So let's move compat.h before irda.h and netlink.h

net/irda_setsockopt.c +1 -1
index a5d96ec..21ff649 100644
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/irda.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/irda.h>
 
 #define NR_SOL_IRDA_OPTS ARRAY_SIZE(irda_opts)
 static const unsigned int irda_opts[] = {
net/netlink_setsockopt.c +0 -0
index c6e9297..c401047 100644

net/netlink_setsockopt.c line 6

Quoted 7 lines
net/netlink_setsockopt.c +1 -1
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/netlink.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/netlink.h>

This seems fragile to me. The idea here is that compat.h is to override all the system includes, so reordering like this may mean that we won't get the desired affect on some other distro.

I don't have a better answer for this though, need to think about it some more. Perhaps changing compat.h to include something other than the bits/sockaddr (Or adding additional includes there)..

What distribution was this ?

Dave

#2 lore raw
Quoted 39 lines · Dave Jones
Quoted 26 lines · Hangbin Liu

On some old distros, we use sa_family_t in linux/irda.h and linux/netlink.h first, but include the header file bits/sockaddr.h later in compat.h. Then it will compile failed with error: expected specifier-qualifier-list before ‘sa_family_t’. So let's move compat.h before irda.h and netlink.h

net/irda_setsockopt.c +1 -1
index a5d96ec..21ff649 100644
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/irda.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/irda.h>
 
 #define NR_SOL_IRDA_OPTS ARRAY_SIZE(irda_opts)
 static const unsigned int irda_opts[] = {
net/netlink_setsockopt.c +0 -0
index c6e9297..c401047 100644

net/netlink_setsockopt.c line 6

Quoted 7 lines
net/netlink_setsockopt.c +1 -1
@@ -1,9 +1,9 @@
 #include <stdlib.h>
-#include <linux/netlink.h>
 #include "net.h"
 #include "maps.h"	// page_rand
 #include "compat.h"
 #include "trinity.h"	// ARRAY_SIZE
+#include <linux/netlink.h>

This seems fragile to me. The idea here is that compat.h is to override all the system includes, so reordering like this may mean that we won't get the desired affect on some other distro.

Quoted 6 lines

I don't have a better answer for this though, need to think about it some more. Perhaps changing compat.h to include something other than the bits/sockaddr (Or adding additional includes there)..

What distribution was this ?

RHEL6.4

# make
<snip>
  CC    net/irda_setsockopt.o
In file included from net/irda_setsockopt.c:2:
/usr/include/linux/irda.h:128: error: expected specifier-qualifier-list before ‘sa_family_t’
make: *** [net/irda_setsockopt.o] Error 1
# uname -r
2.6.32-358.el6.x86_64
# rpm -qf /usr/include/linux/irda.h
kernel-headers-2.6.32-358.el6.x86_64
# rpm -qa | grep gcc
libgcc-4.4.7-3.el6.x86_64
gcc-4.4.7-3.el6.x86_64
gcc-gfortran-4.4.7-3.el6.x86_64
gcc-c++-4.4.7-3.el6.x86_64
# rpm -qa | grep glibc
glibc-common-2.12-1.107.el6.x86_64
glibc-headers-2.12-1.107.el6.x86_64
glibc-2.12-1.107.el6.x86_64
glibc-devel-2.12-1.107.el6.x86_64
Signature · 2 lines
Thanks & Best Regards
Hangbin Liu <[email protected]>