Mercurial > hg > octave-kai > gnulib-hg
annotate lib/dup2.c @ 3766:6ed5059e1333
new macros/decls, from Paul Eggert
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Fri, 01 Mar 2002 23:16:55 +0000 |
parents | 807294ed0f4f |
children | a535859efd14 |
rev | line source |
---|---|
1822 | 1 /* Duplicate an open file descriptor to a specified file descriptor. |
2807
807294ed0f4f
back out Copyright date changes for files with no changes year
Jim Meyering <jim@meyering.net>
parents:
2718
diff
changeset
|
2 Copyright 1999 Free Software Foundation, Inc. |
1822 | 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 #ifndef errno | |
26 extern int errno; | |
27 #endif | |
28 | |
29 #if HAVE_FCNTL_H | |
30 # include <fcntl.h> | |
31 #endif | |
32 | |
33 #if HAVE_UNISTD_H | |
34 # include <unistd.h> | |
35 #endif | |
36 | |
37 #ifndef F_DUPFD | |
38 static int | |
39 dupfd (int fd, int desired_fd) | |
40 { | |
41 int duplicated_fd = dup (fd); | |
42 if (duplicated_fd < 0 || duplicated_fd == desired_fd) | |
43 return duplicated_fd; | |
44 else | |
45 { | |
46 int r = dupfd (fd, desired_fd); | |
47 int e = errno; | |
48 close (duplicated_fd); | |
49 errno = e; | |
50 return r; | |
51 } | |
52 } | |
53 #endif | |
54 | |
55 int | |
56 dup2 (int fd, int desired_fd) | |
57 { | |
58 if (fd == desired_fd) | |
59 return fd; | |
60 close (desired_fd); | |
61 #ifdef F_DUPFD | |
62 return fcntl (fd, F_DUPFD, desired_fd); | |
63 #else | |
64 return dupfd (fd, desired_fd); | |
65 #endif | |
66 } |