From 5c648baca8186df6100ae1386605cd0963ed4e89 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Sat, 28 Dec 2002 22:17:29 +0000 Subject: [PATCH] It is bad style to define the same structure in multiple header files which might be included together. Things like debuggers and lint-like programs get their knickers in a twist (rightly so one might add) when they find different locations for the same named struct depending on which .h file were included first. This is a stellar example of Very Bad Thinking on the part of the standards dudes who wrote that both sys/uio.h and sys/socket.h should define struct iovec the same way. Fix this by putting struct iovec into its own miniature sys/_iovec.h file and #include that from sys/socket.h and sys/uio.h. Sensible people could just put iovec into sys/_types.h but there is probably some standard or other which will be violated if we did something that horrible. --- sys/sys/_iovec.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ sys/sys/socket.h | 9 +-------- sys/sys/uio.h | 9 +-------- 3 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 sys/sys/_iovec.h diff --git a/sys/sys/_iovec.h b/sys/sys/_iovec.h new file mode 100644 index 00000000000..fac5f27306f --- /dev/null +++ b/sys/sys/_iovec.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 1982, 1986, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)uio.h 8.5 (Berkeley) 2/22/94 + * $FreeBSD$ + */ + +#ifndef _SYS__IOVEC_H_ +#define _SYS__IOVEC_H_ + +struct iovec { + void *iov_base; /* Base address. */ + size_t iov_len; /* Length. */ +}; + +#endif /* !_SYS__IOVEC_H_ */ diff --git a/sys/sys/socket.h b/sys/sys/socket.h index a38b2170607..a078c4fe310 100644 --- a/sys/sys/socket.h +++ b/sys/sys/socket.h @@ -39,6 +39,7 @@ #include #include +#include #define _NO_NAMESPACE_POLLUTION #include #undef _NO_NAMESPACE_POLLUTION @@ -370,14 +371,6 @@ struct sockaddr_storage { */ #define SOMAXCONN 128 -#ifndef _STRUCT_IOVEC_DECLARED -#define _STRUCT_IOVEC_DECLARED -struct iovec { - void *iov_base; /* Base address. */ - size_t iov_len; /* Length. */ -}; -#endif - /* * Message header for recvmsg and sendmsg calls. * Used value-result for recvmsg, value only for sendmsg. diff --git a/sys/sys/uio.h b/sys/sys/uio.h index 8e4fd6f6a52..e180356d87a 100644 --- a/sys/sys/uio.h +++ b/sys/sys/uio.h @@ -39,6 +39,7 @@ #include #include +#include #ifndef _SIZE_T_DECLARED typedef __size_t size_t; @@ -50,14 +51,6 @@ typedef __ssize_t ssize_t; #define _SSIZE_T_DECLARED #endif -#ifndef _STRUCT_IOVEC_DECLARED -#define _STRUCT_IOVEC_DECLARED -struct iovec { - void *iov_base; /* Base address. */ - size_t iov_len; /* Length. */ -}; -#endif - #if __BSD_VISIBLE enum uio_rw { UIO_READ, UIO_WRITE };