summaryrefslogtreecommitdiff
path: root/src/AbstractDiskWriter.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-23 13:27:08 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-23 13:27:08 +0000
commit2dfee3dc49463286854aa3e20ab0398b3c8adb57 (patch)
treee7e2624664ad717a62776136e80bc858d93e309c /src/AbstractDiskWriter.cc
parent120e2de09646b200a78e971d24b061a1d9e47b67 (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.cc20
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