Wietse Venema:
> Do you need code for testing the sysctl() stuff?

To make the job easier, below is a patch to unmodified open_limit.c

        Wietse

*** ./open_limit.c-     Fri Dec 11 13:55:29 1998
--- ./open_limit.c      Fri Mar 22 15:44:13 2013
***************
*** 34,39 ****
--- 34,48 ----
  #include <sys/resource.h>
  #include <errno.h>
  
+  /*
+   * XXX MacOSX rlim_cur is only 256, rlim_max is infinite, so we use the
+   * kern.maxfilesperproc value instead.
+   */
+ #ifdef MACOSX
+ #include <sys/sysctl.h>
+ #define MAX_FILES_PER_PROC      "kern.maxfilesperproc"
+ #endif
+ 
  /* Application-specific. */
  
  #include "iostuff.h"
***************
*** 63,68 ****
--- 72,87 ----
      if (getrlimit(RLIMIT_NOFILE, &rl) < 0)
        return (-1);
      if (limit > 0) {
+ #ifdef MACOSX
+       long    current_limit;
+       size_t  len = sizeof(current_limit);
+ 
+       if (sysctlbyname(MAX_FILES_PER_PROC, &current_limit, &len,
+                        (void *) 0, (size_t) 0) < 0)
+           return (-1);
+       if (limit > current_limit)
+           limit = current_limit;
+ #endif
        if (limit > rl.rlim_max)
            rl.rlim_cur = rl.rlim_max;
        else

Reply via email to