mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-14 10:09:48 +00:00
Reorganize code to elimitate one _sseek() call for append modes.
MFC after: 1 week
This commit is contained in:
parent
3f5ac575ea
commit
881e47bbb2
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=290549
@ -98,7 +98,20 @@ _ftello(FILE *fp, fpos_t *offset)
|
||||
* Find offset of underlying I/O object, then
|
||||
* adjust for buffered bytes.
|
||||
*/
|
||||
if (fp->_flags & __SOFF)
|
||||
if (!(fp->_flags & __SRD) && (fp->_flags & __SWR) &&
|
||||
fp->_p != NULL && fp->_p - fp->_bf._base > 0 &&
|
||||
((fp->_flags & __SAPP) || (fp->_flags2 & __S2OAP))) {
|
||||
if ((pos = _sseek(fp, (fpos_t)0, SEEK_END)) == -1) {
|
||||
if (errno == ESPIPE ||
|
||||
(fp->_flags & __SOPT) || __sflush(fp) ||
|
||||
(pos = _sseek(fp, (fpos_t)0, SEEK_CUR)) == -1)
|
||||
return (1);
|
||||
else {
|
||||
*offset = pos;
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
} else if (fp->_flags & __SOFF)
|
||||
pos = fp->_offset;
|
||||
else {
|
||||
pos = _sseek(fp, (fpos_t)0, SEEK_CUR);
|
||||
@ -125,26 +138,6 @@ _ftello(FILE *fp, fpos_t *offset)
|
||||
* position to be greater than that in the
|
||||
* underlying object.
|
||||
*/
|
||||
if ((fp->_flags & __SAPP) || (fp->_flags2 & __S2OAP)) {
|
||||
int serrno = errno;
|
||||
|
||||
errno = 0;
|
||||
if ((pos = _sseek(fp, (fpos_t)0, SEEK_END)) == -1) {
|
||||
if (errno == ESPIPE ||
|
||||
(fp->_flags & __SOPT) || __sflush(fp) ||
|
||||
(pos =
|
||||
_sseek(fp, (fpos_t)0, SEEK_CUR)) == -1)
|
||||
return (1);
|
||||
else {
|
||||
errno = serrno;
|
||||
*offset = pos;
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
errno = serrno;
|
||||
/* fp->_p can be changed in _sseek(), recalculate. */
|
||||
n = fp->_p - fp->_bf._base;
|
||||
}
|
||||
if (pos > OFF_MAX - n) {
|
||||
errno = EOVERFLOW;
|
||||
return (1);
|
||||
|
Loading…
Reference in New Issue
Block a user