19
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
1 /*
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
2 * Copyright (C) 2017 Guido Berhoerster <guido+pwm@berhoerster.name>
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
3 *
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
4 * Permission is hereby granted, free of charge, to any person obtaining
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
5 * a copy of this software and associated documentation files (the
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
6 * "Software"), to deal in the Software without restriction, including
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
7 * without limitation the rights to use, copy, modify, merge, publish,
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
8 * distribute, sublicense, and/or sell copies of the Software, and to
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
9 * permit persons to whom the Software is furnished to do so, subject to
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
10 * the following conditions:
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
11 *
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
12 * The above copyright notice and this permission notice shall be included
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
13 * in all copies or substantial portions of the Software.
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
14 *
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
22 */
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
23
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
24 #include <errno.h>
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
25 #include <fcntl.h>
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
26 #include <unistd.h>
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
27
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
28 int
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
29 closefrom(int fd_min)
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
30 {
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
31 #ifdef F_CLOSEM
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
32 return fcntl(fd_min, F_CLOSEM, 0);
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
33 #else /* !F_CLOSEM */
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
34 int fd_max;
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
35 int fd;
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
36
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
37 fd_max = sysconf(_SC_OPEN_MAX);
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
38 for (fd = fd_min; fd < fd_max; fd++) {
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
39 if ((close(fd) < 0) && (errno != EBADF)) {
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
40 return (-1);
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
41 }
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
42 }
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
43
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
44 return (0);
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
45 #endif /* !F_CLOSEM */
|
Guido Berhoerster <guido+pwm@berhoerster.name>
parents:
diff
changeset
|
46 }
|