# HG changeset patch
# User Hasso Tepper <hasso@estpak.ee>
# Date 1213730291 -10800
# Branch HEAD
# Node ID c60320887866f5f09642102a5276b5e38339496c
# Parent  d1b878f501a1bec8f4242490fb2c9c46810c2a92
* Move timeval struct into its own header.

* Include it from headers where needed or defined by standards plus from
  sys/types.h to make several pkgsrc packages more happy. Including just
  sys/types.h to get struct timeval works here in every BSD, Linux and
  Solaris, so we can't just ignore it.

* Rename sys/fd_set.h to sys/_fd_set.h - it's private header and shouldn't
  be included by userspace.

diff --git a/sys/sys/_fd_set.h b/sys/sys/_fd_set.h
new file mode 100644
--- /dev/null
+++ b/sys/sys/_fd_set.h
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 1992, 1993
+ *	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.
+ *
+ *	@(#)select.h	8.2 (Berkeley) 1/4/94
+ * $FreeBSD: src/sys/sys/select.h,v 1.6.2.1 2000/05/05 03:50:02 jlemon Exp $
+ * $DragonFly: src/sys/sys/fd_set.h,v 1.3 2008/05/30 08:07:22 corecode Exp $
+ */
+
+#ifndef _SYS__FD_SET_H_
+#define	_SYS__FD_SET_H_
+
+/*
+ * Select uses bit masks of file descriptors in longs.  These macros
+ * manipulate such bit fields (the filesystem macros use chars).
+ * FD_SETSIZE may be defined by the user, but the default here should
+ * be enough for most uses.
+ */
+#ifndef FD_SETSIZE
+#define FD_SETSIZE	1024
+#endif
+
+#define	__NBBY		8		/* number of bits in a byte */
+
+typedef unsigned long   __fd_mask;
+#define __NFDBITS ((unsigned int)sizeof(__fd_mask) * __NBBY)	/* bits per mask */
+
+#ifndef __howmany
+#define __howmany(x, y)	(((x) + ((y) - 1)) / (y))
+#endif
+
+typedef struct fd_set {
+	__fd_mask fds_bits[__howmany(FD_SETSIZE, __NFDBITS)];
+} fd_set;
+
+#define _fdset_mask(n)	((__fd_mask)1 << ((n) % __NFDBITS))
+#define FD_SET(n, p)	((p)->fds_bits[(n)/__NFDBITS] |= _fdset_mask(n))
+#define FD_CLR(n, p)	((p)->fds_bits[(n)/__NFDBITS] &= ~_fdset_mask(n))
+#define FD_ISSET(n, p)	((p)->fds_bits[(n)/__NFDBITS] & _fdset_mask(n))
+#define FD_ZERO(p)	__builtin_memset((p), 0, sizeof(*(p)))
+
+
+/*
+ * Expose classic BSD names if we're not running in conformance mode.
+ */
+#ifdef __BSD_VISIBLE
+
+#define fd_mask	__fd_mask
+#define NFDBITS	__NFDBITS
+#ifndef howmany
+#define howmany(a, b)	__howmany(a, b)
+#endif
+
+#define FD_COPY(f, t)	__builtin_memcpy((t), (f), sizeof(*(f)))
+
+#endif /* __BSD_VISIBLE */
+
+#endif /* _SYS__FD_SET_H_ */
diff --git a/sys/sys/fd_set.h b/sys/sys/fd_set.h
deleted file mode 100644
--- a/sys/sys/fd_set.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-
- * Copyright (c) 1992, 1993
- *	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.
- *
- *	@(#)select.h	8.2 (Berkeley) 1/4/94
- * $FreeBSD: src/sys/sys/select.h,v 1.6.2.1 2000/05/05 03:50:02 jlemon Exp $
- * $DragonFly: src/sys/sys/fd_set.h,v 1.3 2008/05/30 08:07:22 corecode Exp $
- */
-
-#ifndef _SYS_FD_SET_H_
-#define	_SYS_FD_SET_H_
-
-/*
- * Select uses bit masks of file descriptors in longs.  These macros
- * manipulate such bit fields (the filesystem macros use chars).
- * FD_SETSIZE may be defined by the user, but the default here should
- * be enough for most uses.
- */
-#ifndef FD_SETSIZE
-#define FD_SETSIZE	1024
-#endif
-
-#define	__NBBY		8		/* number of bits in a byte */
-
-typedef unsigned long   __fd_mask;
-#define __NFDBITS ((unsigned int)sizeof(__fd_mask) * __NBBY)	/* bits per mask */
-
-#ifndef __howmany
-#define __howmany(x, y)	(((x) + ((y) - 1)) / (y))
-#endif
-
-typedef struct fd_set {
-	__fd_mask fds_bits[__howmany(FD_SETSIZE, __NFDBITS)];
-} fd_set;
-
-#define _fdset_mask(n)	((__fd_mask)1 << ((n) % __NFDBITS))
-#define FD_SET(n, p)	((p)->fds_bits[(n)/__NFDBITS] |= _fdset_mask(n))
-#define FD_CLR(n, p)	((p)->fds_bits[(n)/__NFDBITS] &= ~_fdset_mask(n))
-#define FD_ISSET(n, p)	((p)->fds_bits[(n)/__NFDBITS] & _fdset_mask(n))
-#define FD_ZERO(p)	__builtin_memset((p), 0, sizeof(*(p)))
-
-
-/*
- * Expose classic BSD names if we're not running in conformance mode.
- */
-#ifdef __BSD_VISIBLE
-
-#define fd_mask	__fd_mask
-#define NFDBITS	__NFDBITS
-#ifndef howmany
-#define howmany(a, b)	__howmany(a, b)
-#endif
-
-#define FD_COPY(f, t)	__builtin_memcpy((t), (f), sizeof(*(f)))
-
-#endif /* __BSD_VISIBLE */
-
-#endif /* _SYS_FD_SET_H_ */
diff --git a/sys/sys/resource.h b/sys/sys/resource.h
--- a/sys/sys/resource.h
+++ b/sys/sys/resource.h
@@ -41,9 +41,7 @@
 #ifndef _SYS_TYPES_H_
 #include <sys/types.h>
 #endif
-#ifndef _SYS_TIME_H_
-#include <sys/time.h>
-#endif
+#include <sys/_timeval.h>
 
 /*
  * Process priority specifications to get/setpriority.
diff --git a/sys/sys/select.h b/sys/sys/select.h
--- a/sys/sys/select.h
+++ b/sys/sys/select.h
@@ -47,10 +47,10 @@
 #include <sys/time.h>
 #endif
 
-#include <sys/fd_set.h>
+#include <sys/_fd_set.h>
+#include <sys/_timeval.h>
 
 __BEGIN_DECLS
-struct timeval;
 int	select(int, fd_set * __restrict, fd_set * __restrict,
 	       fd_set * __restrict, struct timeval * __restrict);
 struct timespec;
diff --git a/sys/sys/time.h b/sys/sys/time.h
--- a/sys/sys/time.h
+++ b/sys/sys/time.h
@@ -42,16 +42,8 @@
 #include <sys/types.h>
 #endif
 
+#include <sys/_timeval.h>
 #include <sys/select.h>
-
-/*
- * Structure returned by gettimeofday(2) system call,
- * and used in other calls.
- */
-struct timeval {
-	long	tv_sec;		/* seconds */
-	long	tv_usec;	/* and microseconds */
-};
 
 #ifndef _TIMESPEC_DECLARED
 #define _TIMESPEC_DECLARED
diff --git a/sys/sys/types.h b/sys/sys/types.h
--- a/sys/sys/types.h
+++ b/sys/sys/types.h
@@ -196,7 +196,8 @@
 
 #ifdef __BSD_VISIBLE
 
-#include <sys/fd_set.h>
+#include <sys/_fd_set.h>
+#include <sys/_timeval.h>
 
 #define NBBY 8		/* number of bits in a byte */
 /*
