int __cdecl _fseek_nolock ( FILE *str, long offset, int whence ) { REG1 FILE *stream; /* Init stream pointer */ stream = str; if ( !inuse(stream)) { errno=EINVAL; return(-1); } /* Clear EOF flag */ stream->_flag &= ~_IOEOF; /* If seeking relative to current location, then convert to a seek relative to beginning of file. This accounts for buffering, etc. by letting fseek() tell us where we are. */ if (whence == SEEK_CUR) { offset += _ftell_nolock(stream); whence = SEEK_SET; } /* Flush buffer as necessary */ _flush(stream); /* If file opened for read/write, clear flags since we don't know what the user is going to do next. If the file was opened for read access only, decrease _bufsiz so that the next _filbuf won't cost quite so much */ if (stream->_flag & _IORW) stream->_flag &= ~(_IOWRT|_IOREAD); else if ( (stream->_flag & _IOREAD) && (stream->_flag & _IOMYBUF) && !(stream->_flag & _IOSETVBUF) ) stream->_bufsiz = _SMALL_BUFSIZ; /* Seek to the desired locale and return. */ return(_lseek(_fileno(stream), offset, whence) == -1L ? -1 : 0); }
long __cdecl ftell( FILE* stream ) { long retval; _VALIDATE_RETURN((stream != NULL), EINVAL, (-1L)); _lock_str(stream); __try { retval = _ftell_nolock(stream); } __finally { _unlock_str(stream); } return (retval); }