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;
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)) {
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;
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)) {