]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - gnu/libexec/uucp/libunix/dup2.c
This commit was generated by cvs2svn to compensate for changes in r56545,
[FreeBSD/FreeBSD.git] / gnu / libexec / uucp / libunix / dup2.c
1 /* dup2.c
2    The Unix dup2 function, for systems which only have dup.
3
4    Copyright (C) 1985, 1986, 1987, 1988, 1990 Free Software Foundation, Inc.
5
6    This file is part of the Taylor UUCP package.
7
8    This program is free software; you can redistribute it and/or
9    modify it under the terms of the GNU General Public License as
10    published by the Free Software Foundation; either version 2 of the
11    License, or (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful, but
14    WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16    General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21
22    The author of the program may be contacted at ian@airs.com or
23    c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
24    */
25
26 #include "uucp.h"
27 #include "sysdep.h"
28
29 #include <errno.h>
30
31 #if HAVE_FCNTL_H
32 #include <fcntl.h>
33 #else
34 #if HAVE_SYS_FILE_H
35 #include <sys/file.h>
36 #endif
37 #endif
38
39 /* I basically took this from the emacs 18.57 distribution, although I
40    cleaned it up a bit and made it POSIX compliant.  */
41
42 int
43 dup2 (oold, onew)
44      int oold;
45      int onew;
46 {
47   if (oold == onew)
48     return onew;
49   (void) close (onew);
50   
51 #ifdef F_DUPFD
52   return fcntl (oold, F_DUPFD, onew);
53 #else
54   {
55     int onext, oret, isave;
56
57     onext = dup (oold);
58     if (onext == onew)
59       return onext;
60     if (onext < 0)
61       return -1;
62     oret = dup2 (oold, onew);
63     isave = errno;
64     (void) close (onext);
65     errno = isave;
66     return oret;
67   }
68 #endif
69 }