ewmscp  ..
inputHandlerPosixFile.h
Go to the documentation of this file.
1 #ifndef __inputHandlerPosixFile_h__
2 #define __inputHandlerPosixFile_h__
3 #include "inputHandler.h"
4 #include "posixFileCommon.h"
5 #include <Options.h>
6 #include <deque>
7 #include <dirent.h>
8 #include <string>
9 #include <sys/stat.h>
10 #include <sys/types.h>
11 
12 
13 namespace inputHandler {
14 
15  class posixFile: public base, virtual public posixFileCommon {
18  public:
20  class regionType {
21  // std::make_unsigned<off_t>::type start;
22  //std::make_unsigned<off_t>::type end;
23  size_t start;
24  size_t end;
25  bool hole;
26  public:
27  regionType(decltype(start) aStart, decltype(end) aEnd, decltype(hole) aHole):
28  start(aStart), end(aEnd), hole(aHole) {};
29 
30  decltype(start) getStart() const {
31  return start;
32  }
33  decltype(end) getEnd() const {
34  return end;
35  }
36  size_t size() const {
37  return end - start;
38  }
39  bool isHole() const {
40  return hole;
41  }
42  };
43 
44  class readerPosixFile: public reader, virtual public posixFileIoCommon {
45  protected:
46  std::deque<regionType> regions;
47 
48  public:
49  readerPosixFile(const std::string& aPath,
51  const genericStat& inititalStat);
52  ~readerPosixFile() override;
53  bool parallelizable() const override;
54  bool setupSparseRegions(const std::string& sparseHandling) override;
55  void seek(size_t pos) override;
56  bool readBlock(block &b) override;
57  void readBlockP(block& b, size_t bytesToRead, off_t offset) override;
58  void checkUnchangedness() override;
59  };
60  posixFile() = default;
61  ~posixFile() override = default;
62  std::unique_ptr<reader> newReader(const std::string& aPath,
64  const genericStat& inititalStat) override;
65  bool readLinkTarget(const std::string& path,
66  std::vector<char>& target) override;
67 
68 
69  class PosixDirectory: public Directory {
70  DIR *dir;
71  public:
72  PosixDirectory(const std::string& path);
73  ~PosixDirectory() noexcept(false) override;
74  std::unique_ptr<Entry> getNextEntry(bool ignoreMissing) override;
75  };
76  std::unique_ptr<Directory> getDirectory(const std::string& path) override;
77 
78  };
79 
80 } // end namespace inputHandler
81 #endif
inputHandler::posixFile::readerPosixFile::seek
void seek(size_t pos) override
like the standard seek, to be used only when appending new data to a file
Definition: inputHandlerPosixFile.cpp:139
inputHandler::posixFile::readerPosixFile::readBlock
bool readBlock(block &b) override
read one block from the file
Definition: inputHandlerPosixFile.cpp:154
inputHandler::posixFile::regionType
class for data or hole regions, needed for sparse file handling
Definition: inputHandlerPosixFile.h:20
inputHandler::posixFile::readerPosixFile::readBlockP
void readBlockP(block &b, size_t bytesToRead, off_t offset) override
read one block from the file, starting at offset.
Definition: inputHandlerPosixFile.cpp:226
inputHandler::posixFile::posixFile
posixFile()=default
inputHandler::posixFile::PosixDirectory::~PosixDirectory
~PosixDirectory() noexcept(false) override
Definition: inputHandlerPosixFile.cpp:277
inputHandler
Definition: inputHandler.h:29
options::single< bool >
class specialisation for options of type bool
Definition: Options.h:595
inputHandler::posixFile::factory
static factoryTemplate< posixFile > factory
Definition: inputHandlerPosixFile.h:16
genericStat
generic stat abstraction class Used to abstract the variants of the stat structure.
Definition: genericStat.h:12
inputHandler::posixFile::PosixDirectory::getNextEntry
std::unique_ptr< Entry > getNextEntry(bool ignoreMissing) override
Definition: inputHandlerPosixFile.cpp:289
inputHandler::posixFile::readerPosixFile::readerPosixFile
readerPosixFile(const std::string &aPath, copyRequest::stateType &state, const genericStat &inititalStat)
Definition: inputHandlerPosixFile.cpp:44
inputHandler::posixFile::newReader
std::unique_ptr< reader > newReader(const std::string &aPath, copyRequest::stateType &state, const genericStat &inititalStat) override
get a reader for the file at path
Definition: inputHandlerPosixFile.cpp:18
inputHandler::base::factoryTemplate
Definition: inputHandler.h:55
inputHandler::posixFile::regionType::regionType
regionType(decltype(start) aStart, decltype(end) aEnd, decltype(hole) aHole)
Definition: inputHandlerPosixFile.h:27
inputHandler::posixFile::readerPosixFile::~readerPosixFile
~readerPosixFile() override
Definition: inputHandlerPosixFile.cpp:73
inputHandler::posixFile::regionType::hole
bool hole
Definition: inputHandlerPosixFile.h:25
copyRequest::stateType
Definition: copyRequestTypes.h:66
inputHandler::posixFile::regionType::getStart
decltype(start) getStart() const
Definition: inputHandlerPosixFile.h:30
Options.h
inputHandler::posixFile::readerPosixFile
Definition: inputHandlerPosixFile.h:44
inputHandler::posixFile::preserveAtime
static options::single< bool > preserveAtime
Definition: inputHandlerPosixFile.h:17
inputHandler::posixFile::regionType::size
size_t size() const
Definition: inputHandlerPosixFile.h:36
inputHandler::posixFile::regionType::isHole
bool isHole() const
Definition: inputHandlerPosixFile.h:39
inputHandler::posixFile::readerPosixFile::regions
std::deque< regionType > regions
Definition: inputHandlerPosixFile.h:46
block
data block, used to hold the data that are being copied (or checksummed).
Definition: block.h:7
inputHandler::posixFile::readerPosixFile::checkUnchangedness
void checkUnchangedness() override
check if the file is unchanged by comparing cuttent stat to initial stat
Definition: inputHandlerPosixFile.cpp:252
inputHandler::posixFile
Definition: inputHandlerPosixFile.h:15
inputHandler::posixFile::PosixDirectory::dir
DIR * dir
Definition: inputHandlerPosixFile.h:70
inputHandler::posixFile::regionType::start
size_t start
Definition: inputHandlerPosixFile.h:23
inputHandler::posixFile::readLinkTarget
bool readLinkTarget(const std::string &path, std::vector< char > &target) override
read link target from a symlink
Definition: inputHandlerPosixFile.cpp:27
inputHandler::posixFile::~posixFile
~posixFile() override=default
inputHandler::posixFile::regionType::getEnd
decltype(end) getEnd() const
Definition: inputHandlerPosixFile.h:33
inputHandler::base
class for handling input This is the (abstract) base class for handling input, both reading a file vi...
Definition: inputHandler.h:35
posixFileCommon.h
posixFileIoCommon
base class for posixFile reader and writer class with the common stuff like fd, path and xattr handli...
Definition: posixFileCommon.h:17
inputHandler::posixFile::readerPosixFile::setupSparseRegions
bool setupSparseRegions(const std::string &sparseHandling) override
create a region list which maps the holes in the source file
Definition: inputHandlerPosixFile.cpp:103
inputHandler::posixFile::readerPosixFile::parallelizable
bool parallelizable() const override
tell if this handler is capable of parallel IO. Unsually not the case
Definition: inputHandlerPosixFile.cpp:151
inputHandler::posixFile::PosixDirectory
Definition: inputHandlerPosixFile.h:69
inputHandler::posixFile::getDirectory
std::unique_ptr< Directory > getDirectory(const std::string &path) override
Definition: inputHandlerPosixFile.cpp:312
inputHandler::posixFile::PosixDirectory::PosixDirectory
PosixDirectory(const std::string &path)
Definition: inputHandlerPosixFile.cpp:273
posixFileCommon
Definition: posixFileCommon.h:6
inputHandler::posixFile::regionType::end
size_t end
Definition: inputHandlerPosixFile.h:24
inputHandler::base::reader
(abstract) class for reading a file An instance of this class is used to read data from a file vie th...
Definition: inputHandler.h:72
inputHandler.h