summaryrefslogtreecommitdiff
path: root/tests/libtest/lib518.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2007-04-04 03:19:59 +0000
committerYang Tse <yangsita@gmail.com>2007-04-04 03:19:59 +0000
commitec8019b2a84e9bf304e78518124ae7fd9557698a (patch)
tree163b78e8f22bb17d74b2d74b6ca6ee7842953839 /tests/libtest/lib518.c
parent27d2d780598b1f73fc71489c6e9933a313e72521 (diff)
downloadcurl-ec8019b2a84e9bf304e78518124ae7fd9557698a.tar.gz
test can be allowed to run if fopen() is capable of fopen()ing
SAFETY_MARGIN additional files once that we have already open()ed the big bunch of file descriptors.
Diffstat (limited to 'tests/libtest/lib518.c')
-rw-r--r--tests/libtest/lib518.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c
index 2c59ff0a7..24b7a8732 100644
--- a/tests/libtest/lib518.c
+++ b/tests/libtest/lib518.c
@@ -65,23 +65,23 @@ static void close_file_descriptors(void)
fd = NULL;
}
-static int stdio_limit_256(void)
+static int fopen_works(void)
{
- FILE *fpa[300];
+ FILE *fpa[SAFETY_MARGIN];
int i;
- int ret = 0;
+ int ret = 1;
- for (i = 0; i < 300; i++) {
+ for (i = 0; i < SAFETY_MARGIN; i++) {
fpa[i] = NULL;
}
- for (i = 0; i < 300; i++) {
+ for (i = 0; i < SAFETY_MARGIN; i++) {
fpa[i] = fopen(DEV_NULL, "r");
if (fpa[i] == NULL) {
- ret = -1;
+ ret = 0;
break;
}
}
- for (i = 0; i < 300; i++) {
+ for (i = 0; i < SAFETY_MARGIN; i++) {
if (fpa[i] != NULL)
fclose(fpa[i]);
}
@@ -258,18 +258,6 @@ static int rlimit(int keep_open)
num_open.rlim_max = NUM_OPEN;
- /* verify that we don't have an ancient stdio */
-
- if (((size_t)(num_open.rlim_max) > (size_t)256) && stdio_limit_256()) {
- sprintf(strbuff1, fmt, num_open.rlim_max);
- sprintf(strbuff, "fds needed %s > stdio limit 256",
- strbuff1);
- store_errmsg(strbuff, 0);
- fprintf(stderr, "%s\n", msgbuff);
- free(memchunk);
- return -12;
- }
-
/* verify that we won't overflow size_t in malloc() */
if ((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {
@@ -407,6 +395,19 @@ static int rlimit(int keep_open)
#endif /* using a FD_SETSIZE bound select() */
+ /* test stdio's capability to fopen() SAFETY_MARGIN additional files */
+
+ if (!fopen_works()) {
+ sprintf(strbuff1, fmt, num_open.rlim_max);
+ sprintf(strbuff, "stdio fopen() fails with %s open() files",
+ strbuff1);
+ store_errmsg(strbuff, 0);
+ fprintf(stderr, "%s\n", msgbuff);
+ close_file_descriptors();
+ free(memchunk);
+ return -12;
+ }
+
/* free the chunk of memory we were reserving so that it
becomes becomes available to the test */