int _IO_new_fgetpos64 (FILE *fp, __fpos64_t *posp) { off64_t pos; int result = 0; CHECK_FILE (fp, EOF); _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp) && pos != _IO_pos_BAD) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on failure. */ if (errno == 0) __set_errno (EIO); result = EOF; } else { posp->__pos = pos; if (fp->_mode > 0 && __libio_codecvt_encoding (fp->_codecvt) < 0) /* This is a stateful encoding, safe the state. */ posp->__state = fp->_wide_data->_IO_state; } _IO_release_lock (fp); return result; }
long int _IO_ftell (_IO_FILE *fp) { _IO_off64_t pos; CHECK_FILE (fp, -1L); _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp) && pos != _IO_pos_BAD) { if (_IO_vtable_offset (fp) != 0 || fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } _IO_release_lock (fp); if (pos == _IO_pos_BAD) { #ifdef EIO if (errno == 0) __set_errno (EIO); #endif return -1L; } if ((_IO_off64_t) (long int) pos != pos) { #ifdef EOVERFLOW __set_errno (EOVERFLOW); #endif return -1L; } return pos; }
int _IO_new_fgetpos (_IO_FILE *fp, _IO_fpos_t *posp) { _IO_off64_t pos; int result = 0; CHECK_FILE (fp, EOF); _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp) && pos != _IO_pos_BAD) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on failure. */ #ifdef EIO if (errno == 0) __set_errno (EIO); #endif result = EOF; } else if ((_IO_off64_t) (__typeof (posp->__pos)) pos != pos) { #ifdef EOVERFLOW __set_errno (EOVERFLOW); #endif result = EOF; } else { posp->__pos = pos; if (fp->_mode > 0 && (*fp->_codecvt->__codecvt_do_encoding) (fp->_codecvt) < 0) /* This is a stateful encoding, safe the state. */ posp->__state = fp->_wide_data->_IO_state; } _IO_release_lock (fp); return result; }
off64_t ftello64 (_IO_FILE *fp) { _IO_off64_t pos; CHECK_FILE (fp, -1L); _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp) && pos != _IO_pos_BAD) { if (fp->_mode <= 0) pos -= fp->_IO_save_end - fp->_IO_save_base; } _IO_release_lock (fp); if (pos == _IO_pos_BAD) { #ifdef EIO if (errno == 0) __set_errno (EIO); #endif return -1L; } return pos; }
int attribute_compat_text_section _IO_old_fgetpos64 (_IO_FILE *fp, _IO_fpos64_t *posp) { _IO_off64_t pos; CHECK_FILE (fp, EOF); _IO_acquire_lock (fp); pos = _IO_seekoff_unlocked (fp, 0, _IO_seek_cur, 0); if (_IO_in_backup (fp) && pos != _IO_pos_BAD) pos -= fp->_IO_save_end - fp->_IO_save_base; _IO_release_lock (fp); if (pos == _IO_pos_BAD) { /* ANSI explicitly requires setting errno to a positive value on failure. */ #ifdef EIO if (errno == 0) __set_errno (EIO); #endif return EOF; } posp->__pos = pos; return 0; }