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
ecbda88
..
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.
*/
@@
-7,35
+8,41
@@
long lseek();
fseek(iop, offset, ptrname)
long lseek();
fseek(iop, offset, ptrname)
-
register
FILE *iop;
-
long offset;
+FILE *iop;
+long offset;
{
{
- register
int
c;
+ register
resync,
c;
long p;
iop->_flag &= ~_IOEOF;
long p;
iop->_flag &= ~_IOEOF;
- if (iop->_flag & _IOREAD) {
- if (ptrname < 2 && iop->_base && !(iop->_flag&_IONBF)) {
+ if (iop->_flag&_IOREAD) {
+ if (ptrname<2 && iop->_base &&
+ !(iop->_flag&_IONBF)) {
c = iop->_cnt;
p = offset;
c = iop->_cnt;
p = offset;
- if (ptrname
==
0)
- p += c - lseek(fileno(iop),
0L,
1);
+ if (ptrname
==
0)
+ p += c - lseek(fileno(iop),
0L,
1);
else
offset -= c;
else
offset -= c;
- if
(!(iop->_flag&_IORW) && c > 0 && p <=
c
- && p
>= iop->_base -
iop->_ptr){
- iop->_ptr += (int)
p;
- iop->_cnt -= (int)
p;
+ if
(!(iop->_flag&_IORW) && c>0&&p<=
c
+ && p
>=iop->_base-
iop->_ptr){
+ iop->_ptr += (int)p;
+ iop->_cnt -= (int)p;
return(0);
}
return(0);
}
- }
+ resync = offset&01;
+ } else
+ resync = 0;
if (iop->_flag & _IORW) {
iop->_ptr = iop->_base;
iop->_flag &= ~_IOREAD;
}
if (iop->_flag & _IORW) {
iop->_ptr = iop->_base;
iop->_flag &= ~_IOREAD;
}
- p = lseek(fileno(iop), offset, ptrname);
+ p = lseek(fileno(iop), offset
-resync
, ptrname);
iop->_cnt = 0;
iop->_cnt = 0;
- } else if(iop->_flag & (_IOWRT|_IORW)) {
+ if (resync)
+ getc(iop);
+ }
+ else if (iop->_flag & (_IOWRT|_IORW)) {
fflush(iop);
if (iop->_flag & _IORW) {
iop->_cnt = 0;
fflush(iop);
if (iop->_flag & _IORW) {
iop->_cnt = 0;
@@
-44,5
+51,5
@@
fseek(iop, offset, ptrname)
}
p = lseek(fileno(iop), offset, ptrname);
}
}
p = lseek(fileno(iop), offset, ptrname);
}
- return(p==-1?
-1:
0);
+ return(p==-1?
-1:
0);
}
}