home *** CD-ROM | disk | FTP | other *** search
/ PC Extra Super CD 1998 January / PCPLUS131.iso / DJGPP / V2 / DJLSR201.ZIP / src / libc / compat / sys / resource / gtrlimit.c next >
Encoding:
C/C++ Source or Header  |  1996-09-08  |  1.4 KB  |  56 lines

  1. #include <errno.h>
  2. #include <stddef.h>
  3. #include <unistd.h>
  4. #include <sys/resource.h>
  5. #include <libc/bss.h>
  6.  
  7. extern unsigned int _stklen;
  8. extern struct rlimit __libc_limits[];
  9.  
  10. static int rlimit_count = -1;
  11. struct rlimit __libc_limits[RLIM_NLIMITS];
  12.  
  13. static void
  14. __limits_initialize (void)
  15. {
  16.   int i;
  17.  
  18.   /* set hard limit */
  19.   __libc_limits[RLIMIT_CPU].rlim_max = RLIM_INFINITY;
  20.   __libc_limits[RLIMIT_FSIZE].rlim_max = RLIM_INFINITY;
  21.   __libc_limits[RLIMIT_DATA].rlim_max = RLIM_INFINITY;
  22.   __libc_limits[RLIMIT_STACK].rlim_max = (long) _stklen;
  23.   __libc_limits[RLIMIT_CORE].rlim_max = RLIM_INFINITY;
  24.   __libc_limits[RLIMIT_RSS].rlim_max = RLIM_INFINITY;
  25.   __libc_limits[RLIMIT_MEMLOCK].rlim_max = RLIM_INFINITY;
  26.   __libc_limits[RLIMIT_NPROC].rlim_max = RLIM_INFINITY;
  27.   __libc_limits[RLIMIT_NOFILE].rlim_max = sysconf (_SC_OPEN_MAX);
  28.  
  29.   /* copy all hard limit to soft limit */
  30.   for (i = 0; i < RLIM_NLIMITS; i++)
  31.     __libc_limits[i].rlim_cur = __libc_limits[i].rlim_max;
  32. }
  33.  
  34. int
  35. getrlimit (int rltype, struct rlimit *rlimitp)
  36. {
  37.   /* check argument range */
  38.   if (rltype < 0 || rltype >= RLIM_NLIMITS || rlimitp == NULL)
  39.     {
  40.       errno = EINVAL;
  41.       return -1;
  42.     }
  43.  
  44.   /* initialize */
  45.   if (rlimit_count != __bss_count)
  46.     {
  47.       rlimit_count = __bss_count;
  48.       __limits_initialize ();
  49.     }
  50.  
  51.   /* copy limit value */
  52.   *rlimitp = __libc_limits[rltype];
  53.  
  54.   return 0;
  55. }
  56.