Mercurial > hg > octave-kai > gnulib-hg
annotate lib/dup-safer.c @ 5132:c7c53476ce34
(errno): Don't declare; we assume C89 or better now.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Fri, 06 Aug 2004 05:16:49 +0000 |
parents | 45ae29380da9 |
children | 6962b5c5069f |
rev | line source |
---|---|
3196 | 1 /* Invoke dup, but avoid some glitches. |
5132
c7c53476ce34
(errno): Don't declare; we assume C89 or better now.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3196
diff
changeset
|
2 Copyright (C) 2001, 2004 Free Software Foundation, Inc. |
3196 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software Foundation, | |
16 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |
17 | |
18 /* Written by Paul Eggert. */ | |
19 | |
20 #if HAVE_CONFIG_H | |
21 # include <config.h> | |
22 #endif | |
23 | |
24 #include <errno.h> | |
25 | |
26 #if HAVE_FCNTL_H | |
27 # include <fcntl.h> | |
28 #endif | |
29 | |
30 #if HAVE_UNISTD_H | |
31 # include <unistd.h> | |
32 #endif | |
33 #ifndef STDERR_FILENO | |
34 # define STDERR_FILENO 2 | |
35 #endif | |
36 | |
37 #include <unistd-safer.h> | |
38 | |
39 /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or | |
40 STDERR_FILENO. */ | |
41 | |
42 int | |
43 dup_safer (int fd) | |
44 { | |
45 #ifdef F_DUPFD | |
46 return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); | |
47 #else | |
48 int f = dup (fd); | |
49 if (0 <= f && f <= STDERR_FILENO) | |
50 { | |
51 int f1 = dup_safer (f); | |
52 int e = errno; | |
53 close (f); | |
54 errno = e; | |
55 f = f1; | |
56 } | |
57 return f; | |
58 #endif | |
59 } |