summaryrefslogtreecommitdiff
path: root/tests/libtest/lib537.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2007-04-03 18:02:02 +0000
committerYang Tse <yangsita@gmail.com>2007-04-03 18:02:02 +0000
commit2886ce96b07f49f77bf9dbb34d8ef475ed09a300 (patch)
tree26c55034e8de1416e38d4056b85d081628cf2dec /tests/libtest/lib537.c
parent3344142b87627949e6fceee02041699f98b7ad9f (diff)
downloadcurl-2886ce96b07f49f77bf9dbb34d8ef475ed09a300.tar.gz
Verify if the test is limited by an ancient stdio with a 256
open file limit. In this case the test is skipped with a message showing this limitation when the number of open files needed for the test is greater than 256.
Diffstat (limited to 'tests/libtest/lib537.c')
-rw-r--r--tests/libtest/lib537.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/libtest/lib537.c b/tests/libtest/lib537.c
index 85635043b..0ddd3a77c 100644
--- a/tests/libtest/lib537.c
+++ b/tests/libtest/lib537.c
@@ -67,6 +67,29 @@ static void close_file_descriptors(void)
fd = NULL;
}
+static int stdio_limit_256(void)
+{
+ FILE *fpa[300];
+ int i;
+ int ret = 0;
+
+ for (i = 0; i < 300; i++) {
+ fpa[i] = NULL;
+ }
+ for (i = 0; i < 300; i++) {
+ fpa[i] = fopen(DEV_NULL, "r");
+ if (fpa[i] == NULL) {
+ ret = -1;
+ break;
+ }
+ }
+ for (i = 0; i < 300; i++) {
+ if (fpa[i] != NULL)
+ fclose(fpa[i]);
+ }
+ return ret;
+}
+
static int rlimit(int keep_open)
{
int *tmpfd;
@@ -225,6 +248,18 @@ static int rlimit(int keep_open)
num_open.rlim_max = nitems;
}
+ /* 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 -10;
+ }
+
/* verify that we won't overflow size_t in malloc() */
if ((size_t)(num_open.rlim_max) > ((size_t)-1) / sizeof(*fd)) {