Update NOTES.opensolaris with scheduling details
[kopensolaris-gnu/glibc.git] / resource / tst-getrlimit.c
1 #include <errno.h>
2 #include <stdbool.h>
3 #include <stdio.h>
4 #include <sys/resource.h>
5
6
7 static struct
8 {
9   const char *name;
10   int resource;
11   bool required;
12 } tests[] =
13   {
14     /* The following 7 limits are part of POSIX and must exist.  */
15     { "RLIMIT_CORE", RLIMIT_CORE, true },
16     { "RLIMIT_CPU", RLIMIT_CPU, true },
17     { "RLIMIT_DATA", RLIMIT_DATA, true },
18     { "RLIMIT_FSIZE", RLIMIT_FSIZE, true },
19     { "RLIMIT_NOFILE", RLIMIT_NOFILE, true },
20     { "RLIMIT_STACK", RLIMIT_STACK, true },
21     { "RLIMIT_AS", RLIMIT_AS, true },
22     /* The following are traditional Unix limits which are also
23        expected (by us).  */
24 #ifdef RLIMIT_RSS
25     { "RLIMIT_RSS", RLIMIT_RSS, true },
26 #endif
27 #ifdef RLIMIT_NPROC
28     { "RLIMIT_NPROC", RLIMIT_NPROC, true },
29 #endif
30     /* The following are extensions.  */
31 #ifdef RLIMIT_MEMLOCK
32     { "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK, false },
33 #endif
34 #ifdef RLIMIT_LOCKS
35     { "RLIMIT_LOCKS", RLIMIT_LOCKS, false },
36 #endif
37 #ifdef RLIMIT_SIGPENDING
38     { "RLIMIT_SIGPENDING", RLIMIT_SIGPENDING, false },
39 #endif
40 #ifdef RLIMIT_MSGQUEUE
41     { "RLIMIT_MSGQUEUE", RLIMIT_MSGQUEUE, false },
42 #endif
43 #ifdef RLIMIT_NICE
44     { "RLIMIT_NICE", RLIMIT_NICE, false },
45 #endif
46 #ifdef RLIMIT_RTPRIO
47     { "RLIMIT_RTPRIO", RLIMIT_RTPRIO, false },
48 #endif
49   };
50 #define ntests (sizeof (tests) / sizeof (tests[0]))
51
52
53 static int
54 do_test (void)
55 {
56   int status = 0;
57
58   for (int i = 0; i < ntests; ++i)
59     {
60       bool this_ok = true;
61
62       struct rlimit r;
63       int res = getrlimit (tests[i].resource, &r);
64       if (res == -1)
65         {
66           if (errno == EINVAL)
67             {
68               if (tests[i].required)
69                 {
70                   printf ("limit %s expectedly not available for getrlimit\n",
71                           tests[i].name);
72                   status = 1;
73                   this_ok = false;
74                 }
75             }
76           else
77             {
78               printf ("getrlimit for %s returned unexpected error: %m\n",
79                       tests[i].name);
80               status = 1;
81               this_ok = false;
82             }
83         }
84
85       struct rlimit64 r64;
86       res = getrlimit64 (tests[i].resource, &r64);
87       if (res == -1)
88         {
89           if (errno == EINVAL)
90             {
91               if (tests[i].required)
92                 {
93                   printf ("limit %s expectedly not available for getrlimit64"
94                           "\n", tests[i].name);
95                   status = 1;
96                   this_ok = false;
97                 }
98             }
99           else
100             {
101               printf ("getrlimit64 for %s returned unexpected error: %m\n",
102                       tests[i].name);
103               status = 1;
104               this_ok = false;
105             }
106         }
107
108       if (this_ok)
109         printf ("limit %s OK\n", tests[i].name);
110     }
111
112   return status;
113 }
114
115 #define TEST_FUNCTION do_test ()
116 #include "../test-skeleton.c"