Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 22 Sep 2002 23:59:43 -0400
From:      Mike Barcroft <mike@FreeBSD.org>
To:        standards@FreeBSD.org
Cc:        Josef Karthauser <joe@tao.org.uk>
Subject:   select.diff for review
Message-ID:  <20020922235943.G91924@espresso.q9media.com>

next in thread | raw e-mail | index | archive | help

--RIYY1s2vRbPFwWeW
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline


Attached is a patch which makes <sys/select.h> much more conformant by
bringing over components from <sys/types.h>.  Comments appreciated.

Best regards,
Mike Barcroft

--RIYY1s2vRbPFwWeW
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="select.diff"

o Move select() helper macros from <sys/types.h> to <sys/select.h>.
o Include <sys/select.h> from <sys/types.h> in the __BSD_VISIBLE case,
  so applications and base software can be slowly updated.
o Prototype select() in <sys/select.h>.  It was previously only
  prototyped in <unistd.h>.
o Add some XXX's to <sys/types.h>.

Index: include/unistd.h
===================================================================
RCS file: /work/repo/src/include/unistd.h,v
retrieving revision 1.58
diff -u -r1.58 unistd.h
--- include/unistd.h	21 Sep 2002 02:08:32 -0000	1.58
+++ include/unistd.h	23 Sep 2002 00:32:15 -0000
@@ -489,7 +489,12 @@
 int	 rresvport_af(int *, int);
 int	 ruserok(const char *, int, const char *, const char *);
 void	*sbrk(intptr_t);
+#if __BSD_VISIBLE
+#ifndef _SELECT_DECLARED
+#define	_SELECT_DECLARED
 int	 select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+#endif
+#endif
 int	 setdomainname(const char *, int);
 int	 setgroups(int, const gid_t *);
 void	 sethostid(long);
Index: sys/sys/select.h
===================================================================
RCS file: /work/repo/src/sys/sys/select.h,v
retrieving revision 1.13
diff -u -r1.13 select.h
--- sys/sys/select.h	16 Jun 2002 18:40:16 -0000	1.13
+++ sys/sys/select.h	23 Sep 2002 03:49:52 -0000
@@ -43,23 +43,61 @@
 #include <sys/timespec.h>
 
 /*
+ * XXX
  * Other things required for this header which we do not presently implement:
  *
  * struct timeval (with suseconds_t)
- * fd_set
- * FD_* macros
- *
- * Temporarily get all of these things from <sys/types.h>, which has too
- * much pollution to be used here but will do for now.  (Eventually, the
- * latter two will move to this file and be included *from* <sys/types.h>
- * in the BSD namespace.)
  */
-#include <sys/types.h>	/* XXX dependency reversed */
+
+typedef	unsigned long	__fd_mask;
+#if __BSD_VISIBLE
+typedef	__fd_mask	fd_mask;
+#endif
+
+/*
+ * 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	1024U
+#endif
+
+#define	_NFDBITS	(sizeof(__fd_mask) * 8)	/* bits per mask */
+#if __BSD_VISIBLE
+#define	NFDBITS		_NFDBITS
+#endif
+
+#ifndef _howmany
+#define	_howmany(x, y)	(((x) + ((y) - 1U)) / (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_CLR(n, p)	((p)->fds_bits[(n)/_NFDBITS] &= ~_fdset_mask(n))
+#if __BSD_VISIBLE
+/* XXX bcopy() not in scope, so <strings.h> is required; see also FD_ZERO(). */
+#define	FD_COPY(f, t)	bcopy(f, t, sizeof(*(f)))
+#endif
+#define	FD_ISSET(n, p)	((p)->fds_bits[(n)/_NFDBITS] & _fdset_mask(n))
+#define	FD_SET(n, p)	((p)->fds_bits[(n)/_NFDBITS] |= _fdset_mask(n))
+#define	FD_ZERO(p)	bzero(p, sizeof(*(p)))
 
 #ifndef _KERNEL
+struct timeval;
+
 __BEGIN_DECLS
 int pselect(int, fd_set *__restrict, fd_set *__restrict, fd_set *__restrict,
 	const struct timespec *__restrict, const sigset_t *__restrict);
+#ifndef _SELECT_DECLARED
+#define	_SELECT_DECLARED
+/* XXX missing restrict type-qualifier */
+int	select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+#endif
 __END_DECLS
 #endif /* !_KERNEL */
 
Index: sys/sys/types.h
===================================================================
RCS file: /work/repo/src/sys/sys/types.h,v
retrieving revision 1.70
diff -u -r1.70 types.h
--- sys/sys/types.h	17 Sep 2002 05:05:14 -0000	1.70
+++ sys/sys/types.h	23 Sep 2002 00:33:48 -0000
@@ -255,41 +255,28 @@
 #define	_TIMER_T_DECLARED
 #endif
 
-#if __BSD_VISIBLE
-#define	NBBY	8		/* number of bits in a byte */
-
 /*
- * 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.
+ * The following are all things that really shouldn't exist in this header,
+ * since its purpose is to provide typedefs, not miscellaneous doodads.
  */
-#ifndef	FD_SETSIZE
-#define	FD_SETSIZE	1024U
-#endif
+#if __BSD_VISIBLE
 
-typedef	unsigned long	fd_mask;
-#define	NFDBITS	(sizeof(fd_mask) * NBBY)	/* bits per mask */
+#include <sys/select.h>
 
+/* XXX should be moved to <sys/param.h>. */
+#define	NBBY	8		/* number of bits in a byte */
+
+/* XXX should be removed, since <sys/param.h> has this. */
 #ifndef howmany
 #define	howmany(x, y)	(((x) + ((y) - 1U)) / (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_COPY(f, t)	bcopy(f, t, sizeof(*(f)))
-#define	FD_ZERO(p)	bzero(p, sizeof(*(p)))
-
 /*
  * These declarations belong elsewhere, but are repeated here and in
  * <stdio.h> to give broken programs a better chance of working with
  * 64-bit off_t's.
+ *
+ * XXX is this still needed?
  */
 #ifndef _KERNEL
 __BEGIN_DECLS

--RIYY1s2vRbPFwWeW--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-standards" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020922235943.G91924>