projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BSD 4_1_snap release
[unix-history]
/
usr
/
src
/
libc
/
stdio
/
fseek.c
diff --git
a/usr/src/libc/stdio/fseek.c
b/usr/src/libc/stdio/fseek.c
index
6ac9b3f
..
5347996
100644
(file)
--- a/
usr/src/libc/stdio/fseek.c
+++ b/
usr/src/libc/stdio/fseek.c
@@
-1,3
+1,4
@@
+/* @(#)fseek.c 4.2 (Berkeley) 3/9/81 */
/*
* Seek for standard library. Coordinates with buffering.
*/
/*
* Seek for standard library. Coordinates with buffering.
*/
@@
-23,7
+24,8
@@
long offset;
p += c - lseek(fileno(iop),0L,1);
else
offset -= c;
p += c - lseek(fileno(iop),0L,1);
else
offset -= c;
- if(c>0&&p<=c&&p>=iop->_base-iop->_ptr){
+ if(!(iop->_flag&_IORW) && c>0&&p<=c
+ && p>=iop->_base-iop->_ptr){
iop->_ptr += (int)p;
iop->_cnt -= (int)p;
return(0);
iop->_ptr += (int)p;
iop->_cnt -= (int)p;
return(0);
@@
-31,13
+33,22
@@
long offset;
resync = offset&01;
} else
resync = 0;
resync = offset&01;
} else
resync = 0;
+ if (iop->_flag & _IORW) {
+ iop->_ptr = iop->_base;
+ iop->_flag &= ~_IOREAD;
+ }
p = lseek(fileno(iop), offset-resync, ptrname);
iop->_cnt = 0;
if (resync)
getc(iop);
}
p = lseek(fileno(iop), offset-resync, ptrname);
iop->_cnt = 0;
if (resync)
getc(iop);
}
- else if (iop->_flag
&_IOWRT
) {
+ else if (iop->_flag
& (_IOWRT|_IORW)
) {
fflush(iop);
fflush(iop);
+ if (iop->_flag & _IORW) {
+ iop->_cnt = 0;
+ iop->_flag &= ~_IOWRT;
+ iop->_ptr = iop->_base;
+ }
p = lseek(fileno(iop), offset, ptrname);
}
return(p==-1?-1:0);
p = lseek(fileno(iop), offset, ptrname);
}
return(p==-1?-1:0);