X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fmountd%2Fsvc_run.c;h=422e839c171176638e66c32b53fa2af8a63f3886;hb=8d52fc2691783dc9ef5bd9d9a1fa4c0ec33b20bc;hp=a1ef74adf306c4e7abb302754ea0f25c256b9b0a;hpb=1275be70ca6cd6c4bec07a3381f7b510086c5526;p=nfs-utils.git diff --git a/utils/mountd/svc_run.c b/utils/mountd/svc_run.c index a1ef74a..422e839 100644 --- a/utils/mountd/svc_run.c +++ b/utils/mountd/svc_run.c @@ -43,7 +43,11 @@ * This is the RPC server side idle loop. * Wait for input, call server program. */ -#include "config.h" + +#ifdef HAVE_CONFIG_H +#include +#endif + #include #include #include "xlog.h" @@ -53,6 +57,32 @@ void cache_set_fds(fd_set *fdset); int cache_process_req(fd_set *readfds); +#if LONG_MAX != INT_MAX +/* bug in glibc 2.3.6 and earlier, we need + * our own svc_getreqset + */ +static void +my_svc_getreqset (fd_set *readfds) +{ + fd_mask mask; + fd_mask *maskp; + int setsize; + int sock; + int bit; + + setsize = _rpc_dtablesize (); + if (setsize > FD_SETSIZE) + setsize = FD_SETSIZE; + maskp = readfds->fds_bits; + for (sock = 0; sock < setsize; sock += NFDBITS) + for (mask = *maskp++; + (bit = ffsl (mask)); + mask ^= (1L << (bit - 1))) + svc_getreq_common (sock + bit - 1); +} +#define svc_getreqset my_svc_getreqset + +#endif /* * The heart of the server. A crib from libc for the most part...