ssize_t eRawFile::read(off_t offset, void *buf, size_t count) { eSingleLocker l(m_lock); if (offset != m_current_offset) { m_current_offset = lseek_internal(offset); if (m_current_offset < 0) return m_current_offset; } switchOffset(m_current_offset); if (m_nrfiles >= 2) { if (m_current_offset + count > m_totallength) count = m_totallength - m_current_offset; if (count < 0) return 0; } int ret; ret = ::read(m_fd, buf, count); if (ret > 0) { m_current_offset = m_last_offset += ret; } return ret; }
ssize_t eRawFile::read(void *buf, size_t count) { // eDebug("read: %p, %d", buf, count); switchOffset(m_current_offset); if (m_nrfiles >= 2) { if (m_current_offset + count > m_totallength) count = m_totallength - m_current_offset; if (count < 0) return 0; } int ret; if (!m_cached) ret = ::read(m_fd, buf, count); else ret = ::fread(buf, 1, count, m_file); if (ret > 0) m_current_offset = m_last_offset += ret; return ret; }