]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
test can be allowed to run if fopen() is capable of fopen()ing
authorYang Tse <yangsita@gmail.com>
Wed, 4 Apr 2007 03:19:59 +0000 (03:19 +0000)
committerYang Tse <yangsita@gmail.com>
Wed, 4 Apr 2007 03:19:59 +0000 (03:19 +0000)
SAFETY_MARGIN additional files once that we have already open()ed
the big bunch of file descriptors.

tests/libtest/lib518.c
tests/libtest/lib537.c

index 2c59ff0a71e0853691b979b2bf2990981239d237..24b7a8732930001528f3a80a9433fcd3d4b04a1a 100644 (file)
@@ -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 */
 
index 0ddd3a77c898e5a9384bbc79660a2756a34f0021..142686c8f576560518598c316ba94105d9155b9a 100644 (file)
@@ -67,23 +67,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]);
   }
@@ -248,18 +248,6 @@ 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)) {
@@ -411,6 +399,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 -10;
+  }
+
   /* free the chunk of memory we were reserving so that it
      becomes becomes available to the test */