Mercurial > hg > octave-kai > gnulib-hg
annotate lib/fd-safer.c @ 9364:559ef0e161fe
New module: xprintf
* modules/xprintf, lib/xprintf.c, lib/xprintf.h: New files.
author | Jim Meyering <meyering@redhat.com> |
---|---|
date | Fri, 19 Oct 2007 17:09:37 +0200 |
parents | bbbbbf4cd1c5 |
children | 8398d9f607b4 |
rev | line source |
---|---|
5813 | 1 /* Return a safer copy of a file descriptor. |
2 | |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6259
diff
changeset
|
3 Copyright (C) 2005, 2006 Free Software Foundation, Inc. |
5813 | 4 |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7302
diff
changeset
|
5 This program is free software: you can redistribute it and/or modify |
5813 | 6 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7302
diff
changeset
|
7 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7302
diff
changeset
|
8 (at your option) any later version. |
5813 | 9 |
10 This program is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 GNU General Public License for more details. | |
14 | |
15 You should have received a copy of the GNU General Public License | |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7302
diff
changeset
|
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
5813 | 17 |
18 /* Written by Paul Eggert. */ | |
19 | |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6259
diff
changeset
|
20 #include <config.h> |
5813 | 21 |
22 #include "unistd-safer.h" | |
23 | |
24 #include <errno.h> | |
25 | |
6150
882f5823cabb
Merge minor changes from coreutils.
Jim Meyering <jim@meyering.net>
parents:
5848
diff
changeset
|
26 #include <unistd.h> |
5813 | 27 #ifndef STDIN_FILENO |
28 # define STDIN_FILENO 0 | |
29 #endif | |
30 #ifndef STDERR_FILENO | |
31 # define STDERR_FILENO 2 | |
32 #endif | |
33 | |
34 /* Return FD, unless FD would be a copy of standard input, output, or | |
35 error; in that case, return a duplicate of FD, closing FD. On | |
36 failure to duplicate, close FD, set errno, and return -1. Preserve | |
37 errno if FD is negative, so that the caller can always inspect | |
38 errno when the returned value is negative. | |
39 | |
40 This function is usefully wrapped around functions that return file | |
41 descriptors, e.g., fd_safer (open ("file", O_RDONLY)). */ | |
42 | |
43 int | |
44 fd_safer (int fd) | |
45 { | |
46 if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) | |
47 { | |
48 int f = dup_safer (fd); | |
49 int e = errno; | |
50 close (fd); | |
51 errno = e; | |
52 fd = f; | |
53 } | |
54 | |
55 return fd; | |
56 } |