[klibc] [PATCH] Fix <sys/time.h> for Linux 3.5.1

Colin Watson cjwatson at ubuntu.com
Tue Sep 25 04:31:16 PDT 2012

With Linux 3.5.1, 'make test' fails with:

  usr/klibc/tests/select.c: In function ‘main’:
  usr/klibc/tests/select.c:31:14: error: ‘FD_SETSIZE’ undeclared (first use in this function)
  usr/klibc/tests/select.c:31:14: note: each undeclared identifier is reported only once for each function it appears in

This is due to Linux commit 8ded2bbc1845e19c771eb55209aab166ef011243.
Handle it by making sure that FD_SETSIZE is defined.
 usr/include/sys/time.h |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/usr/include/sys/time.h b/usr/include/sys/time.h
index 7a2f8b9..178a4c6 100644
--- a/usr/include/sys/time.h
+++ b/usr/include/sys/time.h
@@ -15,6 +15,8 @@
    double-underscore ones, except __NFDBITS, __FD_SETSIZE and
    __FDSET_LONGS which are defined in <linux/posix_types.h>.
+   From 3.5.1, <linux/time.h> does not even define FD_ZERO etc.
    Unfortunately, some architectures define the double-underscore ones
    as inlines, so we can't use a simple #ifdef test.  Thus, the only
    safe option remaining is to #undef the top-level macros. */
@@ -23,6 +25,7 @@
 #undef FD_SET
 #undef FD_CLR
 #undef FD_ISSET
+#undef FD_SETSIZE
 __extern void *memset(void *, int, size_t);
 static inline void FD_ZERO(fd_set *__fdsetp)
@@ -45,6 +48,8 @@ static inline int FD_ISSET(int __fd, fd_set *__fdsetp)
 		(__fd % BITS_PER_LONG)) & 1;
 __extern int gettimeofday(struct timeval *, struct timezone *);
 __extern int settimeofday(const struct timeval *, const struct timezone *);
 __extern int getitimer(int, struct itimerval *);

More information about the klibc mailing list