mirror of https://github.com/aria2/aria2
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Made protected member variable private. Added accessor funcs. * src/AbstractDiskWriter.cc * src/AbstractDiskWriter.hpull/1/head
parent
4c719530d9
commit
56ea539975
|
@ -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>
|
2010-06-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Made protected member variable private. Added accessor funcs.
|
Made protected member variable private. Added accessor funcs.
|
||||||
|
|
|
@ -58,10 +58,10 @@ namespace aria2 {
|
||||||
|
|
||||||
AbstractDiskWriter::AbstractDiskWriter(const std::string& filename):
|
AbstractDiskWriter::AbstractDiskWriter(const std::string& filename):
|
||||||
_filename(filename),
|
_filename(filename),
|
||||||
fd(-1),
|
_fd(-1),
|
||||||
_readOnly(false),
|
_readOnly(false),
|
||||||
_directIOAllowed(false),
|
_directIOAllowed(false),
|
||||||
logger(LogFactory::getInstance()) {}
|
_logger(LogFactory::getInstance()) {}
|
||||||
|
|
||||||
AbstractDiskWriter::~AbstractDiskWriter()
|
AbstractDiskWriter::~AbstractDiskWriter()
|
||||||
{
|
{
|
||||||
|
@ -79,9 +79,9 @@ void AbstractDiskWriter::openFile(uint64_t totalLength)
|
||||||
|
|
||||||
void AbstractDiskWriter::closeFile()
|
void AbstractDiskWriter::closeFile()
|
||||||
{
|
{
|
||||||
if(fd >= 0) {
|
if(_fd >= 0) {
|
||||||
close(fd);
|
close(_fd);
|
||||||
fd = -1;
|
_fd = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ void AbstractDiskWriter::openExistingFile(uint64_t totalLength)
|
||||||
flags |= O_RDWR;
|
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
|
throw DL_ABORT_EX
|
||||||
(StringFormat(EX_FILE_OPEN, _filename.c_str(), strerror(errno)).str());
|
(StringFormat(EX_FILE_OPEN, _filename.c_str(), strerror(errno)).str());
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ void AbstractDiskWriter::createFile(int addFlags)
|
||||||
{
|
{
|
||||||
assert(!_filename.empty());
|
assert(!_filename.empty());
|
||||||
util::mkdirs(File(_filename).getDirname());
|
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) {
|
OPEN_MODE)) < 0) {
|
||||||
throw DL_ABORT_EX(StringFormat(EX_FILE_OPEN,
|
throw DL_ABORT_EX(StringFormat(EX_FILE_OPEN,
|
||||||
_filename.c_str(), strerror(errno)).str());
|
_filename.c_str(), strerror(errno)).str());
|
||||||
|
@ -121,7 +121,7 @@ ssize_t AbstractDiskWriter::writeDataInternal(const unsigned char* data, size_t
|
||||||
ssize_t writtenLength = 0;
|
ssize_t writtenLength = 0;
|
||||||
while((size_t)writtenLength < len) {
|
while((size_t)writtenLength < len) {
|
||||||
ssize_t ret = 0;
|
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) {
|
if(ret == -1) {
|
||||||
return -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 AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len)
|
||||||
{
|
{
|
||||||
ssize_t ret = 0;
|
ssize_t ret = 0;
|
||||||
while((ret = read(fd, data, len)) == -1 && errno == EINTR);
|
while((ret = read(_fd, data, len)) == -1 && errno == EINTR);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractDiskWriter::seek(off_t offset)
|
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
|
throw DL_ABORT_EX
|
||||||
(StringFormat(EX_FILE_SEEK, _filename.c_str(), strerror(errno)).str());
|
(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)
|
void AbstractDiskWriter::truncate(uint64_t length)
|
||||||
{
|
{
|
||||||
if(fd == -1) {
|
if(_fd == -1) {
|
||||||
throw DL_ABORT_EX("File not opened.");
|
throw DL_ABORT_EX("File not opened.");
|
||||||
}
|
}
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
// Since mingw32's ftruncate cannot handle over 2GB files, we use SetEndOfFile
|
// Since mingw32's ftruncate cannot handle over 2GB files, we use SetEndOfFile
|
||||||
// instead.
|
// instead.
|
||||||
HANDLE handle = LongToHandle(_get_osfhandle(fd));
|
HANDLE handle = LongToHandle(_get_osfhandle(_fd));
|
||||||
seek(length);
|
seek(length);
|
||||||
if(SetEndOfFile(handle) == 0) {
|
if(SetEndOfFile(handle) == 0) {
|
||||||
throw DL_ABORT_EX(StringFormat("SetEndOfFile failed. cause: %s",
|
throw DL_ABORT_EX(StringFormat("SetEndOfFile failed. cause: %s",
|
||||||
GetLastError()).str());
|
GetLastError()).str());
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if(ftruncate(fd, length) == -1) {
|
if(ftruncate(_fd, length) == -1) {
|
||||||
throw DL_ABORT_EX(StringFormat("ftruncate failed. cause: %s",
|
throw DL_ABORT_EX(StringFormat("ftruncate failed. cause: %s",
|
||||||
strerror(errno)).str());
|
strerror(errno)).str());
|
||||||
}
|
}
|
||||||
|
@ -196,10 +196,10 @@ void AbstractDiskWriter::truncate(uint64_t length)
|
||||||
#ifdef HAVE_POSIX_FALLOCATE
|
#ifdef HAVE_POSIX_FALLOCATE
|
||||||
void AbstractDiskWriter::allocate(off_t offset, uint64_t length)
|
void AbstractDiskWriter::allocate(off_t offset, uint64_t length)
|
||||||
{
|
{
|
||||||
if(fd == -1) {
|
if(_fd == -1) {
|
||||||
throw DL_ABORT_EX("File not yet opened.");
|
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) {
|
if(r != 0) {
|
||||||
throw DL_ABORT_EX(StringFormat("posix_fallocate failed. cause: %s",
|
throw DL_ABORT_EX(StringFormat("posix_fallocate failed. cause: %s",
|
||||||
strerror(r)).str());
|
strerror(r)).str());
|
||||||
|
@ -217,8 +217,8 @@ void AbstractDiskWriter::enableDirectIO()
|
||||||
#ifdef ENABLE_DIRECT_IO
|
#ifdef ENABLE_DIRECT_IO
|
||||||
if(_directIOAllowed) {
|
if(_directIOAllowed) {
|
||||||
int flg;
|
int flg;
|
||||||
while((flg = fcntl(fd, F_GETFL)) == -1 && errno == EINTR);
|
while((flg = fcntl(_fd, F_GETFL)) == -1 && errno == EINTR);
|
||||||
while(fcntl(fd, F_SETFL, flg|O_DIRECT) == -1 && errno == EINTR);
|
while(fcntl(_fd, F_SETFL, flg|O_DIRECT) == -1 && errno == EINTR);
|
||||||
}
|
}
|
||||||
#endif // ENABLE_DIRECT_IO
|
#endif // ENABLE_DIRECT_IO
|
||||||
}
|
}
|
||||||
|
@ -227,8 +227,8 @@ void AbstractDiskWriter::disableDirectIO()
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_DIRECT_IO
|
#ifdef ENABLE_DIRECT_IO
|
||||||
int flg;
|
int flg;
|
||||||
while((flg = fcntl(fd, F_GETFL)) == -1 && errno == EINTR);
|
while((flg = fcntl(_fd, F_GETFL)) == -1 && errno == EINTR);
|
||||||
while(fcntl(fd, F_SETFL, flg&(~O_DIRECT)) == -1 && errno == EINTR);
|
while(fcntl(_fd, F_SETFL, flg&(~O_DIRECT)) == -1 && errno == EINTR);
|
||||||
#endif // ENABLE_DIRECT_IO
|
#endif // ENABLE_DIRECT_IO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,23 +43,22 @@ namespace aria2 {
|
||||||
class Logger;
|
class Logger;
|
||||||
|
|
||||||
class AbstractDiskWriter : public DiskWriter {
|
class AbstractDiskWriter : public DiskWriter {
|
||||||
protected:
|
private:
|
||||||
std::string _filename;
|
std::string _filename;
|
||||||
int fd;
|
int _fd;
|
||||||
|
|
||||||
bool _readOnly;
|
bool _readOnly;
|
||||||
|
|
||||||
bool _directIOAllowed;
|
bool _directIOAllowed;
|
||||||
|
|
||||||
Logger* logger;
|
Logger* _logger;
|
||||||
|
|
||||||
void createFile(int addFlags = 0);
|
|
||||||
|
|
||||||
private:
|
|
||||||
ssize_t writeDataInternal(const unsigned char* data, size_t len);
|
ssize_t writeDataInternal(const unsigned char* data, size_t len);
|
||||||
ssize_t readDataInternal(unsigned char* data, size_t len);
|
ssize_t readDataInternal(unsigned char* data, size_t len);
|
||||||
|
|
||||||
void seek(off_t offset);
|
void seek(off_t offset);
|
||||||
|
protected:
|
||||||
|
void createFile(int addFlags = 0);
|
||||||
public:
|
public:
|
||||||
AbstractDiskWriter(const std::string& filename);
|
AbstractDiskWriter(const std::string& filename);
|
||||||
virtual ~AbstractDiskWriter();
|
virtual ~AbstractDiskWriter();
|
||||||
|
|
Loading…
Reference in New Issue