2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Made protected member variable private. Added accessor funcs.
	* src/AbstractDiskWriter.cc
	* src/AbstractDiskWriter.h
pull/1/head
Tatsuhiro Tsujikawa 2010-06-11 12:08:11 +00:00
parent 4c719530d9
commit 56ea539975
3 changed files with 30 additions and 25 deletions

View File

@ -1,3 +1,9 @@
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made protected member variable private. Added accessor funcs.
* src/AbstractDiskWriter.cc
* src/AbstractDiskWriter.h
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made protected member variable private. Added accessor funcs.

View File

@ -58,10 +58,10 @@ namespace aria2 {
AbstractDiskWriter::AbstractDiskWriter(const std::string& filename):
_filename(filename),
fd(-1),
_fd(-1),
_readOnly(false),
_directIOAllowed(false),
logger(LogFactory::getInstance()) {}
_logger(LogFactory::getInstance()) {}
AbstractDiskWriter::~AbstractDiskWriter()
{
@ -79,9 +79,9 @@ void AbstractDiskWriter::openFile(uint64_t totalLength)
void AbstractDiskWriter::closeFile()
{
if(fd >= 0) {
close(fd);
fd = -1;
if(_fd >= 0) {
close(_fd);
_fd = -1;
}
}
@ -99,7 +99,7 @@ void AbstractDiskWriter::openExistingFile(uint64_t totalLength)
flags |= O_RDWR;
}
if((fd = open(_filename.c_str(), flags, OPEN_MODE)) < 0) {
if((_fd = open(_filename.c_str(), flags, OPEN_MODE)) < 0) {
throw DL_ABORT_EX
(StringFormat(EX_FILE_OPEN, _filename.c_str(), strerror(errno)).str());
}
@ -109,7 +109,7 @@ void AbstractDiskWriter::createFile(int addFlags)
{
assert(!_filename.empty());
util::mkdirs(File(_filename).getDirname());
if((fd = open(_filename.c_str(), O_CREAT|O_RDWR|O_TRUNC|O_BINARY|addFlags,
if((_fd = open(_filename.c_str(), O_CREAT|O_RDWR|O_TRUNC|O_BINARY|addFlags,
OPEN_MODE)) < 0) {
throw DL_ABORT_EX(StringFormat(EX_FILE_OPEN,
_filename.c_str(), strerror(errno)).str());
@ -121,7 +121,7 @@ ssize_t AbstractDiskWriter::writeDataInternal(const unsigned char* data, size_t
ssize_t writtenLength = 0;
while((size_t)writtenLength < len) {
ssize_t ret = 0;
while((ret = write(fd, data+writtenLength, len-writtenLength)) == -1 && errno == EINTR);
while((ret = write(_fd, data+writtenLength, len-writtenLength)) == -1 && errno == EINTR);
if(ret == -1) {
return -1;
}
@ -133,13 +133,13 @@ ssize_t AbstractDiskWriter::writeDataInternal(const unsigned char* data, size_t
ssize_t AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len)
{
ssize_t ret = 0;
while((ret = read(fd, data, len)) == -1 && errno == EINTR);
while((ret = read(_fd, data, len)) == -1 && errno == EINTR);
return ret;
}
void AbstractDiskWriter::seek(off_t offset)
{
if(a2lseek(fd, offset, SEEK_SET) == (off_t)-1) {
if(a2lseek(_fd, offset, SEEK_SET) == (off_t)-1) {
throw DL_ABORT_EX
(StringFormat(EX_FILE_SEEK, _filename.c_str(), strerror(errno)).str());
}
@ -173,20 +173,20 @@ ssize_t AbstractDiskWriter::readData(unsigned char* data, size_t len, off_t offs
void AbstractDiskWriter::truncate(uint64_t length)
{
if(fd == -1) {
if(_fd == -1) {
throw DL_ABORT_EX("File not opened.");
}
#ifdef __MINGW32__
// Since mingw32's ftruncate cannot handle over 2GB files, we use SetEndOfFile
// instead.
HANDLE handle = LongToHandle(_get_osfhandle(fd));
HANDLE handle = LongToHandle(_get_osfhandle(_fd));
seek(length);
if(SetEndOfFile(handle) == 0) {
throw DL_ABORT_EX(StringFormat("SetEndOfFile failed. cause: %s",
GetLastError()).str());
}
#else
if(ftruncate(fd, length) == -1) {
if(ftruncate(_fd, length) == -1) {
throw DL_ABORT_EX(StringFormat("ftruncate failed. cause: %s",
strerror(errno)).str());
}
@ -196,10 +196,10 @@ void AbstractDiskWriter::truncate(uint64_t length)
#ifdef HAVE_POSIX_FALLOCATE
void AbstractDiskWriter::allocate(off_t offset, uint64_t length)
{
if(fd == -1) {
if(_fd == -1) {
throw DL_ABORT_EX("File not yet opened.");
}
int r = posix_fallocate(fd, offset, length);
int r = posix_fallocate(_fd, offset, length);
if(r != 0) {
throw DL_ABORT_EX(StringFormat("posix_fallocate failed. cause: %s",
strerror(r)).str());
@ -217,8 +217,8 @@ void AbstractDiskWriter::enableDirectIO()
#ifdef ENABLE_DIRECT_IO
if(_directIOAllowed) {
int flg;
while((flg = fcntl(fd, F_GETFL)) == -1 && errno == EINTR);
while(fcntl(fd, F_SETFL, flg|O_DIRECT) == -1 && errno == EINTR);
while((flg = fcntl(_fd, F_GETFL)) == -1 && errno == EINTR);
while(fcntl(_fd, F_SETFL, flg|O_DIRECT) == -1 && errno == EINTR);
}
#endif // ENABLE_DIRECT_IO
}
@ -227,8 +227,8 @@ void AbstractDiskWriter::disableDirectIO()
{
#ifdef ENABLE_DIRECT_IO
int flg;
while((flg = fcntl(fd, F_GETFL)) == -1 && errno == EINTR);
while(fcntl(fd, F_SETFL, flg&(~O_DIRECT)) == -1 && errno == EINTR);
while((flg = fcntl(_fd, F_GETFL)) == -1 && errno == EINTR);
while(fcntl(_fd, F_SETFL, flg&(~O_DIRECT)) == -1 && errno == EINTR);
#endif // ENABLE_DIRECT_IO
}

View File

@ -43,23 +43,22 @@ namespace aria2 {
class Logger;
class AbstractDiskWriter : public DiskWriter {
protected:
private:
std::string _filename;
int fd;
int _fd;
bool _readOnly;
bool _directIOAllowed;
Logger* logger;
Logger* _logger;
void createFile(int addFlags = 0);
private:
ssize_t writeDataInternal(const unsigned char* data, size_t len);
ssize_t readDataInternal(unsigned char* data, size_t len);
void seek(off_t offset);
protected:
void createFile(int addFlags = 0);
public:
AbstractDiskWriter(const std::string& filename);
virtual ~AbstractDiskWriter();