fopen.c (165903) | fopen.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[] = "@(#)fopen.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[] = "@(#)fopen.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/fopen.c 165903 2007-01-09 00:28:16Z imp $"); | 37__FBSDID("$FreeBSD: head/lib/libc/stdio/fopen.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> | 38 39#include "namespace.h" 40#include <sys/types.h> 41#include <sys/stat.h> 42#include <fcntl.h> |
43#include <unistd.h> |
|
43#include <stdio.h> 44#include <errno.h> 45#include "un-namespace.h" 46 47#include "local.h" 48 49FILE * 50fopen(file, mode) --- 7 unchanged lines hidden (view full) --- 58 if ((flags = __sflags(mode, &oflags)) == 0) 59 return (NULL); 60 if ((fp = __sfp()) == NULL) 61 return (NULL); 62 if ((f = _open(file, oflags, DEFFILEMODE)) < 0) { 63 fp->_flags = 0; /* release */ 64 return (NULL); 65 } | 44#include <stdio.h> 45#include <errno.h> 46#include "un-namespace.h" 47 48#include "local.h" 49 50FILE * 51fopen(file, mode) --- 7 unchanged lines hidden (view full) --- 59 if ((flags = __sflags(mode, &oflags)) == 0) 60 return (NULL); 61 if ((fp = __sfp()) == NULL) 62 return (NULL); 63 if ((f = _open(file, oflags, DEFFILEMODE)) < 0) { 64 fp->_flags = 0; /* release */ 65 return (NULL); 66 } |
67 /* 68 * File descriptors are a full int, but _file is only a short. 69 * If we get a valid file descriptor that is greater than 70 * SHRT_MAX, then the fd will get sign-extended into an 71 * invalid file descriptor. Handle this case by failing the 72 * open. 73 */ 74 if (f > SHRT_MAX) { 75 _close(f); 76 errno = EMFILE; 77 return (NULL); 78 } |
|
66 fp->_file = f; 67 fp->_flags = flags; 68 fp->_cookie = fp; 69 fp->_read = __sread; 70 fp->_write = __swrite; 71 fp->_seek = __sseek; 72 fp->_close = __sclose; 73 /* 74 * When opening in append mode, even though we use O_APPEND, 75 * we need to seek to the end so that ftell() gets the right 76 * answer. If the user then alters the seek pointer, or 77 * the file extends, this will fail, but there is not much 78 * we can do about this. (We could set __SAPP and check in 79 * fseek and ftell.) 80 */ 81 if (oflags & O_APPEND) 82 (void)_sseek(fp, (fpos_t)0, SEEK_END); 83 return (fp); 84} | 79 fp->_file = f; 80 fp->_flags = flags; 81 fp->_cookie = fp; 82 fp->_read = __sread; 83 fp->_write = __swrite; 84 fp->_seek = __sseek; 85 fp->_close = __sclose; 86 /* 87 * When opening in append mode, even though we use O_APPEND, 88 * we need to seek to the end so that ftell() gets the right 89 * answer. If the user then alters the seek pointer, or 90 * the file extends, this will fail, but there is not much 91 * we can do about this. (We could set __SAPP and check in 92 * fseek and ftell.) 93 */ 94 if (oflags & O_APPEND) 95 (void)_sseek(fp, (fpos_t)0, SEEK_END); 96 return (fp); 97} |