]> mj.ucw.cz Git - libucw.git/blob - lib/perl/Ulimit/Ulimit.xs
And do not forget .cvsignore, of course.
[libucw.git] / lib / perl / Ulimit / Ulimit.xs
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4
5 #include <sys/resource.h>
6 #include <unistd.h>
7
8
9 MODULE = Sherlock::Ulimit               PACKAGE = Sherlock::Ulimit              
10
11 PROTOTYPES: ENABLED
12
13 int
14 setlimit(IN resource, IN soft, IN hard)
15         int resource
16         int soft
17         int hard
18 CODE:
19         struct rlimit rl;
20         int r;
21
22         switch(resource) {
23         case 0:
24                 r = RLIMIT_CPU; break;
25         case 1:
26                 r = RLIMIT_FSIZE; break;
27         case 2:
28                 r = RLIMIT_DATA; break;
29         case 3:
30                 r = RLIMIT_STACK; break;
31         case 4:
32                 r = RLIMIT_CORE; break;
33         case 5:
34                 r = RLIMIT_RSS; break;
35         case 6:
36                 r = RLIMIT_NPROC; break;
37         case 7:
38                 r = RLIMIT_NOFILE; break;
39         case 8:
40                 r = RLIMIT_MEMLOCK; break;
41         case 9:
42                 r = RLIMIT_AS; break;
43         }
44         rl.rlim_cur = soft;
45         rl.rlim_max = hard;
46         RETVAL = setrlimit(r, &rl);
47 OUTPUT:
48         RETVAL
49
50
51 int
52 getlimit(IN resource, OUT soft, OUT hard)
53         int resource
54         int soft
55         int hard
56 CODE:
57         struct rlimit rl;
58         int r;
59
60         switch(resource) {
61         case 0:
62                 r = RLIMIT_CPU; break;
63         case 1:
64                 r = RLIMIT_FSIZE; break;
65         case 2:
66                 r = RLIMIT_DATA; break;
67         case 3:
68                 r = RLIMIT_STACK; break;
69         case 4:
70                 r = RLIMIT_CORE; break;
71         case 5:
72                 r = RLIMIT_RSS; break;
73         case 6:
74                 r = RLIMIT_NPROC; break;
75         case 7:
76                 r = RLIMIT_NOFILE; break;
77         case 8:
78                 r = RLIMIT_MEMLOCK; break;
79         case 9:
80                 r = RLIMIT_AS; break;
81         }
82
83         RETVAL = getrlimit(r, &rl);
84         soft = rl.rlim_cur;
85         hard = rl.rlim_max;
86 OUTPUT:
87         RETVAL
88
89