diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-02-23 13:27:08 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-02-23 13:27:08 +0000 |
| commit | 2dfee3dc49463286854aa3e20ab0398b3c8adb57 (patch) | |
| tree | e7e2624664ad717a62776136e80bc858d93e309c /src/AbstractDiskWriter.cc | |
| parent | 120e2de09646b200a78e971d24b061a1d9e47b67 (diff) | |
2009-02-23 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
In BitTorrent, Open files in read-only mode for hash check.
After that, re-open file in read/write mode only when the
download is not finished.
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
* src/AbstractSingleDiskAdaptor.cc
* src/AbstractSingleDiskAdaptor.h
* src/BtCheckIntegrityEntry.cc
* src/DiskAdaptor.h
* src/DiskWriter.h
* src/MultiDiskAdaptor.cc
* src/MultiDiskAdaptor.h
* src/RequestGroup.cc
Diffstat (limited to 'src/AbstractDiskWriter.cc')
| -rw-r--r-- | src/AbstractDiskWriter.cc | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/AbstractDiskWriter.cc b/src/AbstractDiskWriter.cc index d3a31f5a..cec3bdaf 100644 --- a/src/AbstractDiskWriter.cc +++ b/src/AbstractDiskWriter.cc @@ -58,6 +58,7 @@ namespace aria2 { AbstractDiskWriter::AbstractDiskWriter(): fd(-1), + _readOnly(false), logger(LogFactory::getInstance()) {} AbstractDiskWriter::~AbstractDiskWriter() @@ -93,7 +94,14 @@ void AbstractDiskWriter::openExistingFile(const std::string& filename, (StringFormat(EX_FILE_OPEN, filename.c_str(), MSG_FILE_NOT_FOUND).str()); } - if((fd = open(filename.c_str(), O_RDWR|O_BINARY, OPEN_MODE)) < 0) { + int flags = O_BINARY; + if(_readOnly) { + flags |= O_RDONLY; + } else { + flags |= O_RDWR; + } + + if((fd = open(filename.c_str(), flags, OPEN_MODE)) < 0) { throw DlAbortEx (StringFormat(EX_FILE_OPEN, filename.c_str(), strerror(errno)).str()); } @@ -217,4 +225,14 @@ void AbstractDiskWriter::disableDirectIO() #endif // ENABLE_DIRECT_IO } +void AbstractDiskWriter::enableReadOnly() +{ + _readOnly = true; +} + +void AbstractDiskWriter::disableReadOnly() +{ + _readOnly = false; +} + } // namespace aria2 |
