|
|
1.1 root 1: /* Check that TRT happens when error on too many opened files.
2: #notarget: cris*-*-elf
3: #sim: --sysroot=@exedir@
4: */
5: #include <stddef.h>
6: #include <stdlib.h>
7: #include <stdio.h>
8: #include <unistd.h>
9: #include <errno.h>
10: #include <limits.h>
11: #include <sys/types.h>
12: #include <sys/stat.h>
13: #include <fcntl.h>
14: #include <string.h>
15:
16: int main (int argc, char *argv[])
17: {
18: int i;
19: int filemax;
20:
21: #ifdef OPEN_MAX
22: filemax = OPEN_MAX;
23: #else
24: filemax = sysconf (_SC_OPEN_MAX);
25: #endif
26:
27: char *fn = malloc (strlen (argv[0]) + 2);
28: if (fn == NULL)
29: abort ();
30: strcpy (fn, "/");
31: strcat (fn, argv[0]);
32:
33: for (i = 0; i < filemax + 1; i++)
34: {
35: if (open (fn, O_RDONLY) < 0)
36: {
37: /* Shouldn't happen too early. */
38: if (i < filemax - 3 - 1)
39: {
40: fprintf (stderr, "i: %d\n", i);
41: abort ();
42: }
43: if (errno != EMFILE)
44: {
45: perror ("open");
46: abort ();
47: }
48: goto ok;
49: }
50: }
51: abort ();
52:
53: ok:
54: printf ("pass\n");
55: exit (0);
56: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.