1/* zcatfd - copy contents of file descriptor to another */ 2 3/* Copyright (C) 2002 Free Software Foundation, Inc. 4 5 This file is part of GNU Bash, the Bourne Again SHell. 6 7 Bash is free software: you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation, either version 3 of the License, or 10 (at your option) any later version. 11 12 Bash is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with Bash. If not, see <http://www.gnu.org/licenses/>. 19*/ 20 21#include <config.h> 22 23#include <sys/types.h> 24 25#if defined (HAVE_UNISTD_H) 26# include <unistd.h> 27#endif 28 29#include <errno.h> 30 31#include <stdc.h> 32 33#if !defined (errno) 34extern int errno; 35#endif 36 37extern ssize_t zread __P((int, char *, size_t)); 38extern int zwrite __P((int, char *, ssize_t)); 39 40/* Dump contents of file descriptor FD to OFD. FN is the filename for 41 error messages (not used right now). */ 42int 43zcatfd (fd, ofd, fn) 44 int fd, ofd; 45 char *fn; 46{ 47 ssize_t nr; 48 int rval; 49 char lbuf[128]; 50 51 rval = 0; 52 while (1) 53 { 54 nr = zread (fd, lbuf, sizeof (lbuf)); 55 if (nr == 0) 56 break; 57 else if (nr < 0) 58 { 59 rval = -1; 60 break; 61 } 62 else if (zwrite (ofd, lbuf, nr) < 0) 63 { 64 rval = -1; 65 break; 66 } 67 } 68 69 return rval; 70} 71