home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib25.zoo / setrlimi.c < prev    next >
C/C++ Source or Header  |  1992-09-05  |  1KB  |  91 lines

  1. /* get/set resource limits */
  2. /* written by Eric R. Smith and placed in the public domain */
  3.  
  4. #include <time.h>
  5. #include <types.h>
  6. #include <resource.h>
  7. #include <mintbind.h>
  8. #include <errno.h>
  9.  
  10. extern int __mint;
  11.  
  12. int
  13. setrlimit(kind, rl)
  14.     int kind;
  15.     struct rlimit *rl;
  16. {
  17.     unsigned long limit;
  18.     long r;
  19.     int mode;
  20.  
  21.     if (!__mint) {
  22.         errno = EINVAL;
  23.         return -1;
  24.     }
  25.  
  26.     limit = rl->rlim_cur;
  27.  
  28.     if (limit >= RLIM_INFINITY)
  29.         limit = 0;
  30.     else if (limit == 0)
  31.         limit = 1;
  32.  
  33.     switch(kind) {
  34.     case RLIMIT_CPU:
  35.         mode = 1; break;
  36.     case RLIMIT_RSS:
  37.         mode = 2; break;
  38.     case RLIMIT_DATA:
  39.         mode = 3; break;
  40.     default:
  41.         errno = EINVAL;
  42.         return -1;
  43.     }
  44.     r = Psetlimit(mode, limit);
  45.     if (r < 0) {
  46.         errno = (int) -r;
  47.         return -1;
  48.     }
  49.     return 0;
  50. }
  51.  
  52. int
  53. getrlimit(kind, rl)
  54.     int kind;
  55.     struct rlimit *rl;
  56. {
  57.     long limit;
  58.     int mode;
  59.  
  60.     if (!__mint) {
  61.         errno = EINVAL;
  62.         return -1;
  63.     }
  64.  
  65.     switch(kind) {
  66.     case RLIMIT_CPU:
  67.         mode = 1;
  68.         break;
  69.     case RLIMIT_RSS:
  70.         mode = 2;
  71.         break;
  72.     case RLIMIT_DATA:
  73.         mode = 3;
  74.         break;
  75.     default:
  76.         errno = EINVAL;
  77.         return -1;
  78.     }
  79.     limit = Psetlimit(mode, -1L);
  80.     if (limit < 0) {
  81.         errno = (int ) -limit;
  82.         return -1;
  83.     }
  84.     if (limit == 0)
  85.         limit = RLIM_INFINITY;
  86.  
  87.     rl->rlim_cur = limit;
  88.     rl->rlim_max = RLIM_INFINITY;
  89.     return 0;
  90. }
  91.