Define sockaddr_storage in bionic
Bionic currently renames the kernel's __kernel_sockaddr_storage
to sockaddr_storage. We would like to reuse the bionic kernel
headers for musl, but musl defines its own sockaddr_storage,
causing redefinition errors when the musl and kernel headers
are both included.
Give bionic its own definition of sockaddr_storage so the kernel
one can be left as __kernel_sockaddr_storage, avoiding the
conflict in musl.
Some of the structs in netinet/in.h contain sockaddr_storage members.
There are definitions in linux/in.h, but they now use the
__kernel_sockaddr_storage naming. To avoid having to copy the structs
from linux/in.h into netinet/in.h, add some #define hackery to
rename __kernel_sockaddr_storage to sockaddr_storage when including
linux/in.h from netinet/in.h.
Bug: 190084016
Test: m checkbuild
Test: bionic-unit-tests
Change-Id: I8f654511722b3a4a8e0bb146e4418ebcd370305c
diff --git a/libc/include/sys/socket.h b/libc/include/sys/socket.h
index 3ecbcce..f33f112 100644
--- a/libc/include/sys/socket.h
+++ b/libc/include/sys/socket.h
@@ -31,7 +31,6 @@
#include <sys/cdefs.h>
#include <sys/types.h>
-#include <linux/socket.h>
#include <asm/fcntl.h>
#include <asm/socket.h>
@@ -71,6 +70,16 @@
char sa_data[14];
};
+struct sockaddr_storage {
+ union {
+ struct {
+ sa_family_t ss_family;
+ char __data[128 - sizeof(sa_family_t)];
+ };
+ void* __align;
+ };
+};
+
struct linger {
int l_onoff;
int l_linger;