From 16e5e5e4ec65faf8dcb0b7f7918a890c41a3960d Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 18 May 2013 03:55:39 +0200 Subject: [PATCH] Some *DataReader improvements * BFDDataReader: Add SetFD(). * BBufferDataReader: Derive from BAbstractBufferedDataReader. --- headers/os/package/hpkg/DataReader.h | 6 +++++- src/kits/package/hpkg/DataReader.cpp | 17 +++++++++++++++++ src/kits/package/hpkg/FDDataReader.cpp | 7 +++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/headers/os/package/hpkg/DataReader.h b/headers/os/package/hpkg/DataReader.h index c0668c0cfe..2590415fba 100644 --- a/headers/os/package/hpkg/DataReader.h +++ b/headers/os/package/hpkg/DataReader.h @@ -41,6 +41,8 @@ class BFDDataReader : public BDataReader { public: BFDDataReader(int fd); + void SetFD(int fd); + virtual status_t ReadData(off_t offset, void* buffer, size_t size); @@ -64,12 +66,14 @@ private: }; -class BBufferDataReader : public BDataReader { +class BBufferDataReader : public BAbstractBufferedDataReader { public: BBufferDataReader(const void* data, size_t size); virtual status_t ReadData(off_t offset, void* buffer, size_t size); + virtual status_t ReadDataToOutput(off_t offset, size_t size, + BDataOutput* output); private: const void* fData; diff --git a/src/kits/package/hpkg/DataReader.cpp b/src/kits/package/hpkg/DataReader.cpp index cc770e233d..b47f988a2f 100644 --- a/src/kits/package/hpkg/DataReader.cpp +++ b/src/kits/package/hpkg/DataReader.cpp @@ -68,6 +68,23 @@ BBufferDataReader::ReadData(off_t offset, void* buffer, size_t size) } +status_t +BBufferDataReader::ReadDataToOutput(off_t offset, size_t size, + BDataOutput* output) +{ + if (size == 0) + return B_OK; + + if (offset < 0) + return B_BAD_VALUE; + + if (size > fSize || offset > (off_t)fSize - (off_t)size) + return B_ERROR; + + return output->WriteData((const uint8*)fData + offset, size); +} + + } // namespace BHPKG } // namespace BPackageKit diff --git a/src/kits/package/hpkg/FDDataReader.cpp b/src/kits/package/hpkg/FDDataReader.cpp index c0ce13e921..5a20fc4bb2 100644 --- a/src/kits/package/hpkg/FDDataReader.cpp +++ b/src/kits/package/hpkg/FDDataReader.cpp @@ -22,6 +22,13 @@ BFDDataReader::BFDDataReader(int fd) } +void +BFDDataReader::SetFD(int fd) +{ + fFD = fd; +} + + status_t BFDDataReader::ReadData(off_t offset, void* buffer, size_t size) {