ftell.c (82670) | ftell.c (82673) |
---|---|
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[] = "@(#)ftell.c 8.2 (Berkeley) 5/4/95"; 40#endif 41static const char rcsid[] = | 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[] = "@(#)ftell.c 8.2 (Berkeley) 5/4/95"; 40#endif 41static const char rcsid[] = |
42 "$FreeBSD: head/lib/libc/stdio/ftell.c 82670 2001-08-31 18:54:44Z ache $"; | 42 "$FreeBSD: head/lib/libc/stdio/ftell.c 82673 2001-08-31 19:50:25Z ache $"; |
43#endif /* LIBC_SCCS and not lint */ 44 45#include "namespace.h" 46#include <sys/types.h> 47#include <errno.h> 48#include <limits.h> 49#include <stdio.h> 50#include "un-namespace.h" --- 60 unchanged lines hidden (view full) --- 111 if (fp->_flags & __SRD) { 112 /* 113 * Reading. Any unread characters (including 114 * those from ungetc) cause the position to be 115 * smaller than that in the underlying object. 116 */ 117 pos -= fp->_r; 118 if (pos < 0) { | 43#endif /* LIBC_SCCS and not lint */ 44 45#include "namespace.h" 46#include <sys/types.h> 47#include <errno.h> 48#include <limits.h> 49#include <stdio.h> 50#include "un-namespace.h" --- 60 unchanged lines hidden (view full) --- 111 if (fp->_flags & __SRD) { 112 /* 113 * Reading. Any unread characters (including 114 * those from ungetc) cause the position to be 115 * smaller than that in the underlying object. 116 */ 117 pos -= fp->_r; 118 if (pos < 0) { |
119 if (HASUB(fp)) { 120 fp->_p -= pos; 121 fp->_r += pos; 122 pos = 0; 123 } else { | 119 fp->_p = fp->_bf._base; 120 fp->_r = 0; 121 if (HASUB(fp)) 122 FREEUB(fp); 123 if (spos == -1) 124 goto get_real_pos; 125 pos = spos; 126 } else if (HASUB(fp)) { 127 pos -= fp->_ur; 128 if (pos < 0) { |
124 fp->_p = fp->_bf._base; 125 fp->_r = 0; | 129 fp->_p = fp->_bf._base; 130 fp->_r = 0; |
131 FREEUB(fp); |
|
126 if (spos == -1) 127 goto get_real_pos; 128 pos = spos; 129 } 130 } | 132 if (spos == -1) 133 goto get_real_pos; 134 pos = spos; 135 } 136 } |
131 if (HASUB(fp)) { 132 pos -= fp->_ur; 133 if (pos < 0) { 134 if (-pos <= fp->_r) { 135 fp->_p -= pos; 136 fp->_r += pos; 137 pos = 0; 138 } else { 139 fp->_p = fp->_bf._base; 140 fp->_r = 0; 141 FREEUB(fp); 142 if (spos == -1) 143 goto get_real_pos; 144 pos = spos; 145 } 146 } 147 } | |
148 } else if ((fp->_flags & __SWR) && fp->_p != NULL) { 149 /* 150 * Writing. Any buffered characters cause the 151 * position to be greater than that in the 152 * underlying object. 153 */ 154 n = fp->_p - fp->_bf._base; 155 if (pos > OFF_MAX - n) { 156 errno = EOVERFLOW; 157 return (-1); 158 } 159 pos += n; 160 } 161 return (pos); 162} | 137 } else if ((fp->_flags & __SWR) && fp->_p != NULL) { 138 /* 139 * Writing. Any buffered characters cause the 140 * position to be greater than that in the 141 * underlying object. 142 */ 143 n = fp->_p - fp->_bf._base; 144 if (pos > OFF_MAX - n) { 145 errno = EOVERFLOW; 146 return (-1); 147 } 148 pos += n; 149 } 150 return (pos); 151} |