diff options
Diffstat (limited to 'sal/osl/unx/file.cxx')
-rw-r--r-- | sal/osl/unx/file.cxx | 166 |
1 files changed, 81 insertions, 85 deletions
diff --git a/sal/osl/unx/file.cxx b/sal/osl/unx/file.cxx index 416533a64de1..933780f87d8f 100644 --- a/sal/osl/unx/file.cxx +++ b/sal/osl/unx/file.cxx @@ -431,64 +431,62 @@ oslFileError FileHandle_Impl::readFileAt ( *pBytesRead = nBytes; return osl_File_E_None; } - else if (m_kind == KIND_MEM || nullptr == m_buffer) + if (m_kind == KIND_MEM || nullptr == m_buffer) { // not buffered return readAt (nOffset, pBuffer, nBytesRequested, pBytesRead); } - else + + sal_uInt8 * buffer = static_cast<sal_uInt8*>(pBuffer); + for (*pBytesRead = 0; nBytesRequested > 0; ) { - sal_uInt8 * buffer = static_cast<sal_uInt8*>(pBuffer); - for (*pBytesRead = 0; nBytesRequested > 0; ) - { - off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; - size_t const bufpos = (nOffset % m_bufsiz); + off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + size_t const bufpos = (nOffset % m_bufsiz); - if (bufptr != m_bufptr) + if (bufptr != m_bufptr) + { + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + m_bufptr = -1; + m_buflen = 0; + + if (nBytesRequested >= m_bufsiz) { - // flush current buffer - oslFileError result = syncFile(); - if (result != osl_File_E_None) - return result; - m_bufptr = -1; - m_buflen = 0; - - if (nBytesRequested >= m_bufsiz) - { - // buffer too small, read through from file - sal_uInt64 uDone = 0; - result = readAt (nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone); - if (result != osl_File_E_None) - return result; - - *pBytesRead += uDone; - return osl_File_E_None; - } - - // update buffer (pointer) + // buffer too small, read through from file sal_uInt64 uDone = 0; - result = readAt (bufptr, m_buffer, m_bufsiz, &uDone); + result = readAt (nOffset, &(buffer[*pBytesRead]), nBytesRequested, &uDone); if (result != osl_File_E_None) return result; - m_bufptr = bufptr; - m_buflen = uDone; - } - if (bufpos >= m_buflen) - { - // end of file + + *pBytesRead += uDone; return osl_File_E_None; } - size_t const bytes = std::min (m_buflen - bufpos, nBytesRequested); - SAL_INFO("sal.file", "FileHandle_Impl::readFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); - - memcpy (&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes); - nBytesRequested -= bytes; - *pBytesRead += bytes; - nOffset += bytes; + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt (bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + m_bufptr = bufptr; + m_buflen = uDone; } - return osl_File_E_None; + if (bufpos >= m_buflen) + { + // end of file + return osl_File_E_None; + } + + size_t const bytes = std::min (m_buflen - bufpos, nBytesRequested); + SAL_INFO("sal.file", "FileHandle_Impl::readFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); + + memcpy (&(buffer[*pBytesRead]), &(m_buffer[bufpos]), bytes); + nBytesRequested -= bytes; + *pBytesRead += bytes; + nOffset += bytes; } + return osl_File_E_None; } oslFileError FileHandle_Impl::writeFileAt ( @@ -506,63 +504,61 @@ oslFileError FileHandle_Impl::writeFileAt ( *pBytesWritten = nBytes; return osl_File_E_None; } - else if (nullptr == m_buffer) + if (nullptr == m_buffer) { // not buffered return writeAt (nOffset, pBuffer, nBytesToWrite, pBytesWritten); } - else + + sal_uInt8 const * buffer = static_cast<sal_uInt8 const *>(pBuffer); + for (*pBytesWritten = 0; nBytesToWrite > 0; ) { - sal_uInt8 const * buffer = static_cast<sal_uInt8 const *>(pBuffer); - for (*pBytesWritten = 0; nBytesToWrite > 0; ) + off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; + size_t const bufpos = (nOffset % m_bufsiz); + if (bufptr != m_bufptr) { - off_t const bufptr = (nOffset / m_bufsiz) * m_bufsiz; - size_t const bufpos = (nOffset % m_bufsiz); - if (bufptr != m_bufptr) + // flush current buffer + oslFileError result = syncFile(); + if (result != osl_File_E_None) + return result; + m_bufptr = -1; + m_buflen = 0; + + if (nBytesToWrite >= m_bufsiz) { - // flush current buffer - oslFileError result = syncFile(); - if (result != osl_File_E_None) - return result; - m_bufptr = -1; - m_buflen = 0; - - if (nBytesToWrite >= m_bufsiz) - { - // buffer to small, write through to file - sal_uInt64 uDone = 0; - result = writeAt (nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone); - if (result != osl_File_E_None) - return result; - if (uDone != nBytesToWrite) - return osl_File_E_IO; - - *pBytesWritten += uDone; - return osl_File_E_None; - } - - // update buffer (pointer) + // buffer to small, write through to file sal_uInt64 uDone = 0; - result = readAt (bufptr, m_buffer, m_bufsiz, &uDone); + result = writeAt (nOffset, &(buffer[*pBytesWritten]), nBytesToWrite, &uDone); if (result != osl_File_E_None) return result; - m_bufptr = bufptr; - m_buflen = uDone; + if (uDone != nBytesToWrite) + return osl_File_E_IO; + + *pBytesWritten += uDone; + return osl_File_E_None; } - size_t const bytes = std::min (m_bufsiz - bufpos, nBytesToWrite); - SAL_INFO("sal.file", "FileHandle_Impl::writeFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); + // update buffer (pointer) + sal_uInt64 uDone = 0; + result = readAt (bufptr, m_buffer, m_bufsiz, &uDone); + if (result != osl_File_E_None) + return result; + m_bufptr = bufptr; + m_buflen = uDone; + } - memcpy (&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes); - nBytesToWrite -= bytes; - *pBytesWritten += bytes; - nOffset += bytes; + size_t const bytes = std::min (m_bufsiz - bufpos, nBytesToWrite); + SAL_INFO("sal.file", "FileHandle_Impl::writeFileAt(" << m_fd << ", " << nOffset << ", " << bytes << ")"); - m_buflen = std::max(m_buflen, bufpos + bytes); - m_state |= STATE_MODIFIED; - } - return osl_File_E_None; + memcpy (&(m_buffer[bufpos]), &(buffer[*pBytesWritten]), bytes); + nBytesToWrite -= bytes; + *pBytesWritten += bytes; + nOffset += bytes; + + m_buflen = std::max(m_buflen, bufpos + bytes); + m_state |= STATE_MODIFIED; } + return osl_File_E_None; } oslFileError FileHandle_Impl::readLineAt ( |