>From 727c56ac213bdaedb9247c442375a5979686acf5 Mon Sep 17 00:00:00 2001 From: H. Peter Anvin Date: Wed, 2 Jan 2008 10:08:16 -0800 Subject: [PATCH] : break out "glibc" portions into Some userspaces (e.g. klibc) want to be able to use the full set of ABI constants in , others (e.g. glibc) do not, and rather want just the bare minimum to build a kernel-valid sockaddr... but apparently they want that much. This is currently keyed on the existence of __GLIBC__, which is clearly wrong. This patch breaks out the "bare minimum" into for the userspaces who want to do it themselves, and eliminates the ifdefs completely. Signed-off-by: H. Peter Anvin --- include/linux/Kbuild | 1 + include/linux/sockaddr.h | 19 +++++++++++++++++++ include/linux/socket.h | 21 ++------------------- 3 files changed, 22 insertions(+), 19 deletions(-) create mode 100644 include/linux/sockaddr.h diff --git a/include/linux/Kbuild b/include/linux/Kbuild index f30fa92..f8bbb31 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild @@ -139,6 +139,7 @@ header-y += rose.h header-y += serial_reg.h header-y += smbno.h header-y += snmp.h +header-y += sockaddr.h header-y += sockios.h header-y += som.h header-y += sound.h diff --git a/include/linux/sockaddr.h b/include/linux/sockaddr.h new file mode 100644 index 0000000..f182083 --- /dev/null +++ b/include/linux/sockaddr.h @@ -0,0 +1,19 @@ +#ifndef _KERNEL_SOCKADDR_H +#define _KERNEL_SOCKADDR_H + +/* + * Desired design of maximum size and alignment (see RFC2553) + */ +#define _K_SS_MAXSIZE 128 /* Implementation specific max size */ +#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *)) + /* Implementation specific desired alignment */ + +struct __kernel_sockaddr_storage { + unsigned short ss_family; /* address family */ + /* Following field(s) are implementation specific */ + char __data[_K_SS_MAXSIZE - sizeof(unsigned short)]; + /* space to achieve desired size, */ + /* _SS_MAXSIZE value minus size of ss_family */ +} __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ + +#endif /* _KERNEL_SOCKADDR_H */ diff --git a/include/linux/socket.h b/include/linux/socket.h index c22ef1c..9cd6edc 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -1,23 +1,7 @@ #ifndef _LINUX_SOCKET_H #define _LINUX_SOCKET_H -/* - * Desired design of maximum size and alignment (see RFC2553) - */ -#define _K_SS_MAXSIZE 128 /* Implementation specific max size */ -#define _K_SS_ALIGNSIZE (__alignof__ (struct sockaddr *)) - /* Implementation specific desired alignment */ - -struct __kernel_sockaddr_storage { - unsigned short ss_family; /* address family */ - /* Following field(s) are implementation specific */ - char __data[_K_SS_MAXSIZE - sizeof(unsigned short)]; - /* space to achieve desired size, */ - /* _SS_MAXSIZE value minus size of ss_family */ -} __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ - -#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) - +#include #include /* arch-dependent defines */ #include /* the SIOCxxx I/O controls */ #include /* iovec support */ @@ -310,7 +294,6 @@ extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); extern int move_addr_to_user(void *kaddr, int klen, void __user *uaddr, int __user *ulen); extern int move_addr_to_kernel(void __user *uaddr, int ulen, void *kaddr); extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); +#endif /* __KERNEL__ */ -#endif -#endif /* not kernel and not glibc */ #endif /* _LINUX_SOCKET_H */ -- 1.5.3.6