/* */ #include "AbstractSingleDiskAdaptor.h" #include "File.h" #include "AdaptiveFileAllocationIterator.h" #include "DiskWriter.h" #include "FileEntry.h" #ifdef HAVE_SOME_FALLOCATE # include "FallocFileAllocationIterator.h" #endif // HAVE_SOME_FALLOCATE namespace aria2 { AbstractSingleDiskAdaptor::AbstractSingleDiskAdaptor(): totalLength_(0), readOnly_(false) {} AbstractSingleDiskAdaptor::~AbstractSingleDiskAdaptor() {} void AbstractSingleDiskAdaptor::initAndOpenFile() { diskWriter_->initAndOpenFile(totalLength_); } void AbstractSingleDiskAdaptor::openFile() { diskWriter_->openFile(totalLength_); } void AbstractSingleDiskAdaptor::closeFile() { diskWriter_->closeFile(); } void AbstractSingleDiskAdaptor::openExistingFile() { diskWriter_->openExistingFile(totalLength_); } void AbstractSingleDiskAdaptor::writeData (const unsigned char* data, size_t len, off_t offset) { diskWriter_->writeData(data, len, offset); } ssize_t AbstractSingleDiskAdaptor::readData (unsigned char* data, size_t len, off_t offset) { return diskWriter_->readData(data, len, offset); } bool AbstractSingleDiskAdaptor::fileExists() { return File(getFilePath()).exists(); } off_t AbstractSingleDiskAdaptor::size() { return File(getFilePath()).size(); } void AbstractSingleDiskAdaptor::truncate(off_t length) { diskWriter_->truncate(length); } SharedHandle AbstractSingleDiskAdaptor::fileAllocationIterator() { #ifdef HAVE_SOME_FALLOCATE if(doesFallocate()) { SharedHandle h (new FallocFileAllocationIterator (diskWriter_.get(), size() ,totalLength_)); return h; } else #endif // HAVE_SOME_FALLOCATE { SharedHandle h (new AdaptiveFileAllocationIterator (diskWriter_.get(), size(), totalLength_)); return h; } } void AbstractSingleDiskAdaptor::enableReadOnly() { diskWriter_->enableReadOnly(); readOnly_ = true; } void AbstractSingleDiskAdaptor::disableReadOnly() { diskWriter_->disableReadOnly(); readOnly_ = false; } void AbstractSingleDiskAdaptor::enableMmap() { diskWriter_->enableMmap(); } void AbstractSingleDiskAdaptor::cutTrailingGarbage() { if(File(getFilePath()).size() > totalLength_) { diskWriter_->truncate(totalLength_); } } void AbstractSingleDiskAdaptor::setDiskWriter (const DiskWriterHandle& diskWriter) { diskWriter_ = diskWriter; } void AbstractSingleDiskAdaptor::setTotalLength(const off_t& totalLength) { totalLength_ = totalLength; } } // namespace aria2