39 lines
		
	
	
	
		
			814 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			814 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
 | 
						|
 | 
						|
fseek(iop, offset, where)
 | 
						|
FILE *iop;
 | 
						|
long offset;
 | 
						|
{
 | 
						|
	int  count;
 | 
						|
	long lseek();
 | 
						|
	long pos;
 | 
						|
 | 
						|
	iop->_flags &= ~(IO_EOF | IO_ERR);
 | 
						|
	/* Clear both the end of file and error flags */
 | 
						|
 | 
						|
	if ( io_testflag(iop,IO_READMODE) ) {
 | 
						|
		if ( where < 2 && iop->_buf && !io_testflag(iop,IO_UNBUFF) ) {
 | 
						|
			count = iop->_count;
 | 
						|
			pos = offset;
 | 
						|
 | 
						|
			if ( where == 0 )
 | 
						|
				pos += count - lseek(fileno(iop), 0L,1);
 | 
						|
			else
 | 
						|
				offset -= count;
 | 
						|
 | 
						|
			if ( count > 0 && pos <= count 
 | 
						|
			     && pos >= iop->_buf - iop->_ptr ) {
 | 
						|
		        	iop->_ptr += (int) pos;
 | 
						|
				iop->_count -= (int) pos;
 | 
						|
				return(0);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		pos = lseek(fileno(iop), offset, where);
 | 
						|
		iop->_count = 0;
 | 
						|
	} else if ( io_testflag(iop,IO_WRITEMODE) ) {
 | 
						|
		fflush(iop);
 | 
						|
		pos = lseek(fileno(iop), offset, where);
 | 
						|
	}
 | 
						|
	return((pos == -1) ? -1 : 0 );
 | 
						|
}
 |