freopen.c (165903) | freopen.c (176628) |
---|---|
1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33#if defined(LIBC_SCCS) && !defined(lint) 34static char sccsid[] = "@(#)freopen.c 8.1 (Berkeley) 6/4/93"; 35#endif /* LIBC_SCCS and not lint */ 36#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1990, 1993 3 * The Regents of the University of California. All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Chris Torek. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 20 unchanged lines hidden (view full) --- 29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * SUCH DAMAGE. 31 */ 32 33#if defined(LIBC_SCCS) && !defined(lint) 34static char sccsid[] = "@(#)freopen.c 8.1 (Berkeley) 6/4/93"; 35#endif /* LIBC_SCCS and not lint */ 36#include <sys/cdefs.h> |
37__FBSDID("$FreeBSD: head/lib/libc/stdio/freopen.c 165903 2007-01-09 00:28:16Z imp $"); | 37__FBSDID("$FreeBSD: head/lib/libc/stdio/freopen.c 176628 2008-02-27 19:02:02Z jhb $"); |
38 39#include "namespace.h" 40#include <sys/types.h> 41#include <sys/stat.h> 42#include <fcntl.h> 43#include <errno.h> 44#include <unistd.h> 45#include <stdio.h> --- 152 unchanged lines hidden (view full) --- 198 */ 199 if (wantfd >= 0 && f != wantfd) { 200 if (_dup2(f, wantfd) >= 0) { 201 (void)_close(f); 202 f = wantfd; 203 } 204 } 205 | 38 39#include "namespace.h" 40#include <sys/types.h> 41#include <sys/stat.h> 42#include <fcntl.h> 43#include <errno.h> 44#include <unistd.h> 45#include <stdio.h> --- 152 unchanged lines hidden (view full) --- 198 */ 199 if (wantfd >= 0 && f != wantfd) { 200 if (_dup2(f, wantfd) >= 0) { 201 (void)_close(f); 202 f = wantfd; 203 } 204 } 205 |
206 /* 207 * File descriptors are a full int, but _file is only a short. 208 * If we get a valid file descriptor that is greater than 209 * SHRT_MAX, then the fd will get sign-extended into an 210 * invalid file descriptor. Handle this case by failing the 211 * open. 212 */ 213 if (f > SHRT_MAX) { 214 fp->_flags = 0; /* set it free */ 215 FUNLOCKFILE(fp); 216 errno = EMFILE; 217 return (NULL); 218 } 219 |
|
206 fp->_flags = flags; 207 fp->_file = f; 208 fp->_cookie = fp; 209 fp->_read = __sread; 210 fp->_write = __swrite; 211 fp->_seek = __sseek; 212 fp->_close = __sclose; 213 /* --- 12 unchanged lines hidden --- | 220 fp->_flags = flags; 221 fp->_file = f; 222 fp->_cookie = fp; 223 fp->_read = __sread; 224 fp->_write = __swrite; 225 fp->_seek = __sseek; 226 fp->_close = __sclose; 227 /* --- 12 unchanged lines hidden --- |