From 56270ee1c957a5c4c67959a4c4ec9868356a53fb Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 15 Nov 2009 08:39:45 +0000 Subject: [PATCH] Added AttributeDataReader, a DataReader implementation for attributes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34053 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/package/DataReader.cpp | 26 ++++++++++++++++++++++++++ src/bin/package/DataReader.h | 15 +++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/bin/package/DataReader.cpp b/src/bin/package/DataReader.cpp index 05aa82af87..735103d4fc 100644 --- a/src/bin/package/DataReader.cpp +++ b/src/bin/package/DataReader.cpp @@ -10,6 +10,8 @@ #include #include +#include + // #pragma mark - DataReader @@ -39,6 +41,30 @@ FDDataReader::ReadData(off_t offset, void* buffer, size_t size) } +// #pragma mark - AttributeDataReader + + +AttributeDataReader::AttributeDataReader(int fd, const char* attribute, + uint32 type) + : + fFD(fd), + fType(type), + fAttribute(attribute) +{ +} + + +status_t +AttributeDataReader::ReadData(off_t offset, void* buffer, size_t size) +{ + ssize_t bytesRead = fs_read_attr(fFD, fAttribute, fType, offset, buffer, + size); + if (bytesRead < 0) + return errno; + return (size_t)bytesRead == size ? B_OK : B_ERROR; +} + + // #pragma mark - BufferDataReader diff --git a/src/bin/package/DataReader.h b/src/bin/package/DataReader.h index 6ac47f9a64..be6a897be0 100644 --- a/src/bin/package/DataReader.h +++ b/src/bin/package/DataReader.h @@ -30,6 +30,21 @@ private: }; +class AttributeDataReader : public DataReader { +public: + AttributeDataReader(int fd, + const char* attribute, uint32 type); + + virtual status_t ReadData(off_t offset, void* buffer, + size_t size); + +private: + int fFD; + uint32 fType; + const char* fAttribute; +}; + + class BufferDataReader : public DataReader { public: BufferDataReader(const void* data, size_t size);