Home | History | Annotate | Line # | Download | only in c
      1 /* Check that TRT happens when error on pipe call.
      2 #progos: linux
      3 */
      4 
      5 #include <stddef.h>
      6 #include <stdio.h>
      7 #include <stdlib.h>
      8 #include <unistd.h>
      9 #include <errno.h>
     10 #include <limits.h>
     11 
     12 int main (void)
     13 {
     14   int i;
     15   int filemax;
     16 
     17 #ifdef OPEN_MAX
     18   filemax = OPEN_MAX;
     19 #else
     20   filemax = sysconf (_SC_OPEN_MAX);
     21 #endif
     22 
     23   /* Check that TRT happens when error on pipe call.  */
     24   for (i = 0; i < filemax + 1; i++)
     25     {
     26       int pip[2];
     27       if (pipe (pip) != 0)
     28 	{
     29 	  /* Shouldn't happen too early.  */
     30 	  if (i < filemax / 2 - 3 - 1)
     31 	    {
     32 	      fprintf (stderr, "i: %d\n", i);
     33 	      abort ();
     34 	    }
     35 	  if (errno != EMFILE)
     36 	    {
     37 	      perror ("pipe");
     38 	      abort ();
     39 	    }
     40 	  goto ok;
     41 	}
     42     }
     43   abort ();
     44 
     45 ok:
     46   printf ("pass\n");
     47   exit (0);
     48 }
     49