From: Ben Pfaff Date: Wed, 26 May 2010 17:07:22 +0000 (-0700) Subject: socket-util: Tolerate missing RLIM_SAVED_CUR and RLIM_SAVED_MAX. X-Git-Tag: v1.0.1~21 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=0ec6cfb13b4d9ef14b90119cf662e47ed559a185;p=sliver-openvswitch.git socket-util: Tolerate missing RLIM_SAVED_CUR and RLIM_SAVED_MAX. POSIX requires these macros, but FreeBSD 8.0 doesn't have them. --- diff --git a/lib/socket-util.c b/lib/socket-util.c index 3af74a48d..bf563edae 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -55,6 +55,28 @@ set_nonblocking(int fd) } } +static bool +rlim_is_finite(rlim_t limit) +{ + if (limit == RLIM_INFINITY) { + return false; + } + +#ifdef RLIM_SAVED_CUR /* FreeBSD 8.0 lacks RLIM_SAVED_CUR. */ + if (limit == RLIM_SAVED_CUR) { + return false; + } +#endif + +#ifdef RLIM_SAVED_MAX /* FreeBSD 8.0 lacks RLIM_SAVED_MAX. */ + if (limit == RLIM_SAVED_MAX) { + return false; + } +#endif + + return true; +} + /* Returns the maximum valid FD value, plus 1. */ int get_max_fds(void) @@ -62,10 +84,7 @@ get_max_fds(void) static int max_fds = -1; if (max_fds < 0) { struct rlimit r; - if (!getrlimit(RLIMIT_NOFILE, &r) - && r.rlim_cur != RLIM_INFINITY - && r.rlim_cur != RLIM_SAVED_MAX - && r.rlim_cur != RLIM_SAVED_CUR) { + if (!getrlimit(RLIMIT_NOFILE, &r) && rlim_is_finite(r.rlim_cur)) { max_fds = r.rlim_cur; } else { VLOG_WARN("failed to obtain fd limit, defaulting to 1024");