summary |
tags |
clone url |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
51dd21c)
(for Sys V compat); more error checking
SCCS-vsn: lib/libc/stdio/fseek.c 5.2
-static char sccsid[] = "@(#)fseek.c 5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)fseek.c 5.2 (Berkeley) %G%";
fseek(iop, offset, ptrname)
register FILE *iop;
long offset;
{
register resync, c;
fseek(iop, offset, ptrname)
register FILE *iop;
long offset;
{
register resync, c;
+ long p = -1; /* can't happen? */
iop->_flag &= ~_IOEOF;
if (iop->_flag&_IOREAD) {
iop->_flag &= ~_IOEOF;
if (iop->_flag&_IOREAD) {
c = iop->_cnt;
p = offset;
if (ptrname==0) {
c = iop->_cnt;
p = offset;
if (ptrname==0) {
- curpos = lseek(fileno(iop), 0L, 1);
+ long curpos = lseek(fileno(iop), 0L, 1);
if (curpos == -1)
return (-1);
p += c - curpos;
if (curpos == -1)
return (-1);
p += c - curpos;
&& p>=iop->_base-iop->_ptr){
iop->_ptr += (int)p;
iop->_cnt -= (int)p;
&& p>=iop->_base-iop->_ptr){
iop->_ptr += (int)p;
iop->_cnt -= (int)p;
- if (curpos == -1)
- curpos = lseek(fileno(iop), 0L, 1);
- return (curpos == -1? -1: curpos - iop->_cnt);
}
resync = offset&01;
} else
}
resync = offset&01;
} else
}
p = lseek(fileno(iop), offset-resync, ptrname);
iop->_cnt = 0;
}
p = lseek(fileno(iop), offset-resync, ptrname);
iop->_cnt = 0;
- if (resync && getc(iop) != EOF && p != -1)
- p++;
+ if (resync && p != -1)
+ if (getc(iop) == EOF)
+ p = -1;
}
else if (iop->_flag & (_IOWRT|_IORW)) {
}
else if (iop->_flag & (_IOWRT|_IORW)) {
if (iop->_flag & _IORW) {
iop->_cnt = 0;
iop->_flag &= ~_IOWRT;
iop->_ptr = iop->_base;
}
if (iop->_flag & _IORW) {
iop->_cnt = 0;
iop->_flag &= ~_IOWRT;
iop->_ptr = iop->_base;
}
- p = lseek(fileno(iop), offset, ptrname);
+ return(lseek(fileno(iop), offset, ptrname) == -1 || p == EOF ?
+ -1 : 0);