Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* resource/Makefile (tests): Add tst-getrlimit.
* resource/tst-getrlimit.c: New file.
- Loading branch information
Ulrich Drepper
committed
Jun 21, 2005
1 parent
6a46350
commit 2f37117
Showing
3 changed files
with
118 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
#include <errno.h> | ||
#include <stdbool.h> | ||
#include <stdio.h> | ||
#include <sys/resource.h> | ||
|
||
|
||
static struct | ||
{ | ||
const char *name; | ||
int resource; | ||
bool required; | ||
} tests[] = | ||
{ | ||
/* The following 7 limits are part of POSIX and must exist. */ | ||
{ "RLIMIT_CORE", RLIMIT_CORE, true }, | ||
{ "RLIMIT_CPU", RLIMIT_CPU, true }, | ||
{ "RLIMIT_DATA", RLIMIT_DATA, true }, | ||
{ "RLIMIT_FSIZE", RLIMIT_FSIZE, true }, | ||
{ "RLIMIT_NOFILE", RLIMIT_NOFILE, true }, | ||
{ "RLIMIT_STACK", RLIMIT_STACK, true }, | ||
{ "RLIMIT_AS", RLIMIT_AS, true }, | ||
/* The following are traditional Unix limits which are also | ||
expected (by us). */ | ||
{ "RLIMIT_RSS", RLIMIT_RSS, true }, | ||
{ "RLIMIT_NPROC", RLIMIT_NPROC, true }, | ||
/* The following are extensions. */ | ||
#ifdef RLIMIT_MEMLOCK | ||
{ "RLIMIT_MEMLOCK", RLIMIT_MEMLOCK, false }, | ||
#endif | ||
#ifdef RLIMIT_LOCKS | ||
{ "RLIMIT_LOCKS", RLIMIT_LOCKS, false }, | ||
#endif | ||
#ifdef RLIMIT_SIGPENDING | ||
{ "RLIMIT_SIGPENDING", RLIMIT_SIGPENDING, false }, | ||
#endif | ||
#ifdef RLIMIT_MSGQUEUE | ||
{ "RLIMIT_MSGQUEUE", RLIMIT_MSGQUEUE, false }, | ||
#endif | ||
#ifdef RLIMIT_NICE | ||
{ "RLIMIT_NICE", RLIMIT_NICE, false }, | ||
#endif | ||
#ifdef RLIMIT_RTPRIO | ||
{ "RLIMIT_RTPRIO", RLIMIT_RTPRIO, false }, | ||
#endif | ||
}; | ||
#define ntests (sizeof (tests) / sizeof (tests[0])) | ||
|
||
|
||
static int | ||
do_test (void) | ||
{ | ||
int status = 0; | ||
|
||
for (int i = 0; i < ntests; ++i) | ||
{ | ||
bool this_ok = true; | ||
|
||
struct rlimit r; | ||
int res = getrlimit (tests[i].resource, &r); | ||
if (res == -1) | ||
{ | ||
if (errno == EINVAL) | ||
{ | ||
if (tests[i].required) | ||
{ | ||
printf ("limit %s expectedly not available for getrlimit\n", | ||
tests[i].name); | ||
status = 1; | ||
this_ok = false; | ||
} | ||
} | ||
else | ||
{ | ||
printf ("getrlimit for %s returned unexpected error: %m\n", | ||
tests[i].name); | ||
status = 1; | ||
this_ok = false; | ||
} | ||
} | ||
|
||
struct rlimit64 r64; | ||
res = getrlimit64 (tests[i].resource, &r64); | ||
if (res == -1) | ||
{ | ||
if (errno == EINVAL) | ||
{ | ||
if (tests[i].required) | ||
{ | ||
printf ("limit %s expectedly not available for getrlimit64" | ||
"\n", tests[i].name); | ||
status = 1; | ||
this_ok = false; | ||
} | ||
} | ||
else | ||
{ | ||
printf ("getrlimit64 for %s returned unexpected error: %m\n", | ||
tests[i].name); | ||
status = 1; | ||
this_ok = false; | ||
} | ||
} | ||
|
||
if (this_ok) | ||
printf ("limit %s OK\n", tests[i].name); | ||
} | ||
|
||
return status; | ||
} | ||
|
||
#define TEST_FUNCTION do_test () | ||
#include "../test-skeleton.c" |