Date: Mon, 11 Nov 2002 11:21:28 -0500 From: Mike Barcroft <mike@FreeBSD.org> To: Marc Recht <marc@informatik.uni-bremen.de> Cc: Garrett Wollman <wollman@lcs.mit.edu>, current@FreeBSD.ORG Subject: Re: addition to cdefs Message-ID: <20021111112128.G52940@espresso.q9media.com> In-Reply-To: <1037029019.779.87.camel@leeloo.intern.geht.de>; from marc@informatik.uni-bremen.de on Mon, Nov 11, 2002 at 04:36:58PM %2B0100 References: <1037017897.779.20.camel@leeloo.intern.geht.de> <20021111095458.F52940@espresso.q9media.com> <1037029019.779.87.camel@leeloo.intern.geht.de>
next in thread | previous in thread | raw e-mail | index | archive | help
--tqI+Z3u+9OQ7kwn0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Marc Recht <marc@informatik.uni-bremen.de> writes:
> Thanks!
>
> > It looks like <unistd.h> has some XSI bugs. Is _XOPEN_SOURCE defined
> > anywhere? If so, try the attached patch. If not, this is a bug in
> Yes, _XOPEN_SOURCE is defined. So, it solves some of the problems.
>
> > Python (since POSIX doesn't specify chroot()) and should be fixed at
> > their end and in the ports collection.
> But, there still some problems left. Like fd_set being not defined in
> sys/select if _BSD_VISIBLE isn't given.
I've had the attached patch in my tree for a while. I'll try and get
it and the <unistd.h> patch committed today.
> > _BSD_SOURCE provides mostly the same visibility as not defining any
> > standards constants, so it isn't very useful.
> IMO it would be nice to have a clean way to toggle __BSD_VISIBLE from
> the outside. In the default environment I have
> #define __POSIX_VISIBLE 200112
> #define __XSI_VISIBLE 600
> #define __BSD_VISIBLE 1
> #define __ISO_C_VISIBLE 1999
>
> But, Python for example, wants _POSIX_C_SOURCE 199506,_XOPEN_SOURCE 500
> _and_ __BSD_VISIBLE 1. I know, I could also just do a -D__BSD_VISIBLE=1,
> but I think thats not The Right Thing to do.
The whole point of the standards constants is to specify a strict
environment. If you want a BSD environment don't specify a particular
standard, it's simple.
Best regards,
Mike Barcroft
--tqI+Z3u+9OQ7kwn0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="select.diff"
Index: select.h
===================================================================
RCS file: /work/repo/src/sys/sys/select.h,v
retrieving revision 1.15
diff -u -r1.15 select.h
--- select.h 5 Oct 2002 05:40:48 -0000 1.15
+++ select.h 21 Oct 2002 21:49:23 -0000
@@ -79,18 +79,30 @@
#endif
typedef struct fd_set {
+#if __BSD_VISIBLE || __XSI_VISIBLE <= 500
__fd_mask fds_bits[_howmany(FD_SETSIZE, _NFDBITS)];
+#else
+ __fd_mask __fds_bits[_howmany(FD_SETSIZE, _NFDBITS)];
+#endif
} fd_set;
-#define __fdset_mask(n) ((fd_mask)1 << ((n) % _NFDBITS))
+#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)))
+#define FD_COPY(f, t) (void)(*(t) = *(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)))
+#define FD_ZERO(p) __fd_zero((p), FD_SETSIZE)
+
+static __inline void
+__fd_zero(fd_set *p, __size_t n)
+{
+
+ n = _howmany(n, _NFDBITS);
+ while (n > 0)
+ p->fds_bits[n--] = 0;
+}
#ifndef _KERNEL
struct timeval;
--tqI+Z3u+9OQ7kwn0--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021111112128.G52940>
