diff options
author | Yang Tse <yangsita@gmail.com> | 2007-04-03 18:02:02 +0000 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2007-04-03 18:02:02 +0000 |
commit | 2886ce96b07f49f77bf9dbb34d8ef475ed09a300 (patch) | |
tree | 26c55034e8de1416e38d4056b85d081628cf2dec | |
parent | 3344142b87627949e6fceee02041699f98b7ad9f (diff) |
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.
-rw-r--r-- | tests/libtest/lib518.c | 35 | ||||
-rw-r--r-- | tests/libtest/lib537.c | 35 |
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/libtest/lib518.c b/tests/libtest/lib518.c index 413168c60..2c59ff0a7 100644 --- a/tests/libtest/lib518.c +++ b/tests/libtest/lib518.c @@ -65,6 +65,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 nitems, i; @@ -235,6 +258,18 @@ 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)) { 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)) { |