Some *DataReader improvements
* BFDDataReader: Add SetFD(). * BBufferDataReader: Derive from BAbstractBufferedDataReader.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user