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 --- 25 unchanged lines hidden (view full) --- 34 * SUCH DAMAGE. 35 */ 36 37#if defined(LIBC_SCCS) && !defined(lint) 38#if 0 39static char sccsid[] = "@(#)stdio.c 8.1 (Berkeley) 6/4/93"; 40#endif 41static const char rcsid[] = |
42 "$FreeBSD: head/lib/libc/stdio/stdio.c 81666 2001-08-15 02:07:47Z ache $"; |
43#endif /* LIBC_SCCS and not lint */ 44 45#include "namespace.h" |
46#include <errno.h> |
47#include <fcntl.h> 48#include <unistd.h> 49#include <stdio.h> 50#include "un-namespace.h" 51#include "local.h" 52 53/* 54 * Small standard I/O/seek/close functions. --- 35 unchanged lines hidden (view full) --- 90__sseek(cookie, offset, whence) 91 void *cookie; 92 fpos_t offset; 93 int whence; 94{ 95 register FILE *fp = cookie; 96 register off_t ret; 97 |
98 /* 99 * Disallow negative seeks per POSIX. 100 * It is needed here to help upper level caller 101 * (fseek) in the cases it can't detect. 102 */ 103 if (whence == SEEK_SET && (off_t)offset < 0) { 104 errno = EINVAL; 105 return (-1); 106 } |
107 ret = lseek(fp->_file, (off_t)offset, whence); |
108 if (ret < 0) { 109 if (ret != -1) { 110 /* Resulting seek is negative! */ 111 ret = -1; 112 errno = EINVAL; 113 } |
114 fp->_flags &= ~__SOFF; |
115 } else { |
116 fp->_flags |= __SOFF; 117 fp->_offset = ret; 118 } 119 return (ret); 120} 121 122int 123__sclose(cookie) 124 void *cookie; 125{ 126 127 return (_close(((FILE *)cookie)->_file)); 128} |