]>
Commit | Line | Data |
---|---|---|
dd43edf4 TS |
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 | } |