summaryrefslogtreecommitdiff
path: root/src/AbstractDiskWriter.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-11-28 21:46:44 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-11-28 21:46:44 +0900
commit506a9358e17ea5843d5b3d9cce66b1d6894cf76c (patch)
tree6d5286faffcad5f06c6fa1d277de2207441c73d4 /src/AbstractDiskWriter.cc
parent16e25ef4e1ca1fe1e3e8cdacd77de228f997ceaf (diff)
Refactored file open code
Diffstat (limited to 'src/AbstractDiskWriter.cc')
-rw-r--r--src/AbstractDiskWriter.cc46
1 files changed, 21 insertions, 25 deletions
diff --git a/src/AbstractDiskWriter.cc b/src/AbstractDiskWriter.cc
index ed0d1842..0aad2eba 100644
--- a/src/AbstractDiskWriter.cc
+++ b/src/AbstractDiskWriter.cc
@@ -104,6 +104,24 @@ void AbstractDiskWriter::closeFile()
}
}
+namespace {
+int openFileWithFlags(const std::string& filename, int flags,
+ error_code::Value errCode)
+{
+ int fd;
+ while((fd = a2open(utf8ToWChar(filename).c_str(), flags, OPEN_MODE)) == -1
+ && errno == EINTR);
+ if(fd < 0) {
+ int errNum = errno;
+ throw DL_ABORT_EX3(errNum, fmt(EX_FILE_OPEN,
+ filename.c_str(),
+ util::safeStrerror(errNum).c_str()),
+ errCode);
+ }
+ return fd;
+}
+} // namespace
+
void AbstractDiskWriter::openExistingFile(int64_t totalLength)
{
int flags = O_BINARY;
@@ -112,37 +130,15 @@ void AbstractDiskWriter::openExistingFile(int64_t totalLength)
} else {
flags |= O_RDWR;
}
- while((fd_ = a2open(utf8ToWChar(filename_).c_str(),
- flags, OPEN_MODE)) == -1 &&
- errno == EINTR);
- if(fd_ < 0) {
- int errNum = errno;
- throw DL_ABORT_EX3
- (errNum,
- fmt(EX_FILE_OPEN,
- filename_.c_str(),
- util::safeStrerror(errNum).c_str()),
- error_code::FILE_OPEN_ERROR);
- }
+ fd_ = openFileWithFlags(filename_, flags, error_code::FILE_OPEN_ERROR);
}
void AbstractDiskWriter::createFile(int addFlags)
{
assert(!filename_.empty());
util::mkdirs(File(filename_).getDirname());
-
- while((fd_ = a2open(utf8ToWChar(filename_).c_str(),
- O_CREAT|O_RDWR|O_TRUNC|O_BINARY|addFlags,
- OPEN_MODE)) == -1 && errno == EINTR);
- if(fd_ < 0) {
- int errNum = errno;
- throw DL_ABORT_EX3
- (errNum,
- fmt(EX_FILE_OPEN,
- filename_.c_str(),
- util::safeStrerror(errNum).c_str()),
- error_code::FILE_CREATE_ERROR);
- }
+ fd_ = openFileWithFlags(filename_, O_CREAT|O_RDWR|O_TRUNC|O_BINARY|addFlags,
+ error_code::FILE_CREATE_ERROR);
}
ssize_t AbstractDiskWriter::writeDataInternal(const unsigned char* data,