mirror of https://github.com/aria2/aria2
parent
64b1fefb78
commit
a82f08765e
|
@ -310,6 +310,7 @@ ssize_t AbstractDiskWriter::readDataInternal(unsigned char* data, size_t len,
|
||||||
|
|
||||||
void AbstractDiskWriter::seek(int64_t offset)
|
void AbstractDiskWriter::seek(int64_t offset)
|
||||||
{
|
{
|
||||||
|
assert(offset >= 0);
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
LARGE_INTEGER fileLength;
|
LARGE_INTEGER fileLength;
|
||||||
fileLength.QuadPart = offset;
|
fileLength.QuadPart = offset;
|
||||||
|
|
|
@ -43,7 +43,7 @@ GrowSegment::GrowSegment(const std::shared_ptr<Piece>& piece):
|
||||||
|
|
||||||
GrowSegment::~GrowSegment() {}
|
GrowSegment::~GrowSegment() {}
|
||||||
|
|
||||||
void GrowSegment::updateWrittenLength(int32_t bytes)
|
void GrowSegment::updateWrittenLength(int64_t bytes)
|
||||||
{
|
{
|
||||||
writtenLength_ += bytes;
|
writtenLength_ += bytes;
|
||||||
piece_->reconfigure(writtenLength_);
|
piece_->reconfigure(writtenLength_);
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace aria2 {
|
||||||
class GrowSegment:public Segment {
|
class GrowSegment:public Segment {
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Piece> piece_;
|
std::shared_ptr<Piece> piece_;
|
||||||
int32_t writtenLength_;
|
int64_t writtenLength_;
|
||||||
public:
|
public:
|
||||||
GrowSegment(const std::shared_ptr<Piece>& piece);
|
GrowSegment(const std::shared_ptr<Piece>& piece);
|
||||||
|
|
||||||
|
@ -68,25 +68,25 @@ public:
|
||||||
return writtenLength_;
|
return writtenLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getLength() const CXX11_OVERRIDE
|
virtual int64_t getLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getSegmentLength() const CXX11_OVERRIDE
|
virtual int64_t getSegmentLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getWrittenLength() const CXX11_OVERRIDE
|
virtual int64_t getWrittenLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return writtenLength_;
|
return writtenLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE;
|
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE;
|
||||||
|
|
||||||
virtual bool updateHash
|
virtual bool updateHash
|
||||||
(int32_t begin,
|
(int64_t begin,
|
||||||
const unsigned char* data,
|
const unsigned char* data,
|
||||||
size_t dataLength) CXX11_OVERRIDE
|
size_t dataLength) CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,16 +71,16 @@ int64_t PiecedSegment::getPositionToWrite() const
|
||||||
return getPosition()+writtenLength_;
|
return getPosition()+writtenLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t PiecedSegment::getLength() const
|
int64_t PiecedSegment::getLength() const
|
||||||
{
|
{
|
||||||
return piece_->getLength();
|
return piece_->getLength();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PiecedSegment::updateWrittenLength(int32_t bytes)
|
void PiecedSegment::updateWrittenLength(int64_t bytes)
|
||||||
{
|
{
|
||||||
int32_t newWrittenLength = writtenLength_+bytes;
|
auto newWrittenLength = writtenLength_+bytes;
|
||||||
assert(newWrittenLength <= piece_->getLength());
|
assert(newWrittenLength <= piece_->getLength());
|
||||||
for(size_t i = writtenLength_/piece_->getBlockLength(),
|
for(auto i = writtenLength_/piece_->getBlockLength(),
|
||||||
end = newWrittenLength/piece_->getBlockLength(); i < end; ++i) {
|
end = newWrittenLength/piece_->getBlockLength(); i < end; ++i) {
|
||||||
piece_->completeBlock(i);
|
piece_->completeBlock(i);
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ void PiecedSegment::updateWrittenLength(int32_t bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PiecedSegment::updateHash
|
bool PiecedSegment::updateHash
|
||||||
(int32_t begin,
|
(int64_t begin,
|
||||||
const unsigned char* data,
|
const unsigned char* data,
|
||||||
size_t dataLength)
|
size_t dataLength)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,7 +47,7 @@ private:
|
||||||
* The last piece likely have shorter length than the other length.
|
* The last piece likely have shorter length than the other length.
|
||||||
*/
|
*/
|
||||||
int32_t pieceLength_;
|
int32_t pieceLength_;
|
||||||
int32_t writtenLength_;
|
int64_t writtenLength_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PiecedSegment(int32_t pieceLength, const std::shared_ptr<Piece>& piece);
|
PiecedSegment(int32_t pieceLength, const std::shared_ptr<Piece>& piece);
|
||||||
|
@ -62,23 +62,23 @@ public:
|
||||||
|
|
||||||
virtual int64_t getPositionToWrite() const CXX11_OVERRIDE;
|
virtual int64_t getPositionToWrite() const CXX11_OVERRIDE;
|
||||||
|
|
||||||
virtual int32_t getLength() const CXX11_OVERRIDE;
|
virtual int64_t getLength() const CXX11_OVERRIDE;
|
||||||
|
|
||||||
virtual int32_t getSegmentLength() const CXX11_OVERRIDE
|
virtual int64_t getSegmentLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return pieceLength_;
|
return pieceLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getWrittenLength() const CXX11_OVERRIDE
|
virtual int64_t getWrittenLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return writtenLength_;
|
return writtenLength_;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE;
|
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE;
|
||||||
|
|
||||||
// `begin' is a offset inside this segment.
|
// `begin' is a offset inside this segment.
|
||||||
virtual bool updateHash
|
virtual bool updateHash
|
||||||
(int32_t begin,
|
(int64_t begin,
|
||||||
const unsigned char* data,
|
const unsigned char* data,
|
||||||
size_t dataLength) CXX11_OVERRIDE;
|
size_t dataLength) CXX11_OVERRIDE;
|
||||||
|
|
||||||
|
|
|
@ -58,17 +58,17 @@ public:
|
||||||
|
|
||||||
virtual int64_t getPositionToWrite() const = 0;
|
virtual int64_t getPositionToWrite() const = 0;
|
||||||
|
|
||||||
virtual int32_t getLength() const = 0;
|
virtual int64_t getLength() const = 0;
|
||||||
|
|
||||||
virtual int32_t getSegmentLength() const = 0;
|
virtual int64_t getSegmentLength() const = 0;
|
||||||
|
|
||||||
virtual int32_t getWrittenLength() const = 0;
|
virtual int64_t getWrittenLength() const = 0;
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) = 0;
|
virtual void updateWrittenLength(int64_t bytes) = 0;
|
||||||
|
|
||||||
// `begin' is a offset inside this segment.
|
// `begin' is a offset inside this segment.
|
||||||
virtual bool updateHash
|
virtual bool updateHash
|
||||||
(int32_t begin,
|
(int64_t begin,
|
||||||
const unsigned char* data,
|
const unsigned char* data,
|
||||||
size_t dataLength) = 0;
|
size_t dataLength) = 0;
|
||||||
|
|
||||||
|
|
|
@ -156,8 +156,8 @@ std::shared_ptr<Segment> SegmentMan::checkoutSegment
|
||||||
}
|
}
|
||||||
std::shared_ptr<SegmentEntry> entry(new SegmentEntry(cuid, segment));
|
std::shared_ptr<SegmentEntry> entry(new SegmentEntry(cuid, segment));
|
||||||
usedSegmentEntries_.push_back(entry);
|
usedSegmentEntries_.push_back(entry);
|
||||||
A2_LOG_DEBUG(fmt("index=%lu, length=%d, segmentLength=%d,"
|
A2_LOG_DEBUG(fmt("index=%lu, length=%" PRId64 ", segmentLength=%" PRId64 ","
|
||||||
" writtenLength=%d",
|
" writtenLength=%" PRId64,
|
||||||
static_cast<unsigned long>(segment->getIndex()),
|
static_cast<unsigned long>(segment->getIndex()),
|
||||||
segment->getLength(),
|
segment->getLength(),
|
||||||
segment->getSegmentLength(),
|
segment->getSegmentLength(),
|
||||||
|
@ -166,8 +166,8 @@ std::shared_ptr<Segment> SegmentMan::checkoutSegment
|
||||||
if(piece->getLength() > 0) {
|
if(piece->getLength() > 0) {
|
||||||
auto positr = segmentWrittenLengthMemo_.find(segment->getIndex());
|
auto positr = segmentWrittenLengthMemo_.find(segment->getIndex());
|
||||||
if(positr != segmentWrittenLengthMemo_.end()) {
|
if(positr != segmentWrittenLengthMemo_.end()) {
|
||||||
const int32_t writtenLength = (*positr).second;
|
const auto writtenLength = (*positr).second;
|
||||||
A2_LOG_DEBUG(fmt("writtenLength(in memo)=%d, writtenLength=%d",
|
A2_LOG_DEBUG(fmt("writtenLength(in memo)=%" PRId64 ", writtenLength=%" PRId64,
|
||||||
writtenLength, segment->getWrittenLength()));
|
writtenLength, segment->getWrittenLength()));
|
||||||
// If the difference between cached writtenLength and segment's
|
// If the difference between cached writtenLength and segment's
|
||||||
// writtenLength is less than one block, we assume that these
|
// writtenLength is less than one block, we assume that these
|
||||||
|
@ -296,7 +296,7 @@ void SegmentMan::cancelSegmentInternal
|
||||||
piece->setUsedBySegment(false);
|
piece->setUsedBySegment(false);
|
||||||
pieceStorage_->cancelPiece(piece, cuid);
|
pieceStorage_->cancelPiece(piece, cuid);
|
||||||
segmentWrittenLengthMemo_[segment->getIndex()] = segment->getWrittenLength();
|
segmentWrittenLengthMemo_[segment->getIndex()] = segment->getWrittenLength();
|
||||||
A2_LOG_DEBUG(fmt("Memorized segment index=%lu, writtenLength=%d",
|
A2_LOG_DEBUG(fmt("Memorized segment index=%lu, writtenLength=%" PRId64,
|
||||||
static_cast<unsigned long>(segment->getIndex()),
|
static_cast<unsigned long>(segment->getIndex()),
|
||||||
segment->getWrittenLength()));
|
segment->getWrittenLength()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ private:
|
||||||
|
|
||||||
// Remember writtenLength for each segment. The key is an index of a
|
// Remember writtenLength for each segment. The key is an index of a
|
||||||
// segment. The value is writtenLength for that segment.
|
// segment. The value is writtenLength for that segment.
|
||||||
std::map<size_t, int32_t> segmentWrittenLengthMemo_;
|
std::map<size_t, int64_t> segmentWrittenLengthMemo_;
|
||||||
|
|
||||||
// Used for calculating download speed.
|
// Used for calculating download speed.
|
||||||
std::vector<std::shared_ptr<PeerStat> > peerStats_;
|
std::vector<std::shared_ptr<PeerStat> > peerStats_;
|
||||||
|
|
|
@ -28,7 +28,7 @@ class GZipDecodingStreamFilterTest:public CppUnit::TestFixture {
|
||||||
public:
|
public:
|
||||||
MockSegment2():positionToWrite_(0) {}
|
MockSegment2():positionToWrite_(0) {}
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE
|
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
positionToWrite_ += bytes;
|
positionToWrite_ += bytes;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,9 +36,9 @@ void GrowSegmentTest::testClear()
|
||||||
{
|
{
|
||||||
GrowSegment segment(std::shared_ptr<Piece>(new Piece()));
|
GrowSegment segment(std::shared_ptr<Piece>(new Piece()));
|
||||||
segment.updateWrittenLength(32*1024);
|
segment.updateWrittenLength(32*1024);
|
||||||
CPPUNIT_ASSERT_EQUAL(32*1024, segment.getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)32*1024, segment.getWrittenLength());
|
||||||
segment.clear(nullptr);
|
segment.clear(nullptr);
|
||||||
CPPUNIT_ASSERT_EQUAL(0, segment.getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, segment.getWrittenLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -29,26 +29,26 @@ public:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getLength() const CXX11_OVERRIDE
|
virtual int64_t getLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getSegmentLength() const CXX11_OVERRIDE
|
virtual int64_t getSegmentLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getWrittenLength() const CXX11_OVERRIDE
|
virtual int64_t getWrittenLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE {}
|
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE {}
|
||||||
|
|
||||||
// `begin' is a offset inside this segment.
|
// `begin' is a offset inside this segment.
|
||||||
virtual bool updateHash
|
virtual bool updateHash
|
||||||
(int32_t begin, const unsigned char* data, size_t dataLength) CXX11_OVERRIDE
|
(int64_t begin, const unsigned char* data, size_t dataLength) CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,9 +66,9 @@ void SegmentManTest::testNullBitfield()
|
||||||
std::shared_ptr<Segment> segment = segmentMan.getSegment(1, minSplitSize);
|
std::shared_ptr<Segment> segment = segmentMan.getSegment(1, minSplitSize);
|
||||||
CPPUNIT_ASSERT(segment);
|
CPPUNIT_ASSERT(segment);
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getIndex());
|
CPPUNIT_ASSERT_EQUAL((size_t)0, segment->getIndex());
|
||||||
CPPUNIT_ASSERT_EQUAL(0, segment->getLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, segment->getLength());
|
||||||
CPPUNIT_ASSERT_EQUAL(0, segment->getSegmentLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, segment->getSegmentLength());
|
||||||
CPPUNIT_ASSERT_EQUAL(0, segment->getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, segment->getWrittenLength());
|
||||||
|
|
||||||
std::shared_ptr<Segment> segment2 = segmentMan.getSegment(2, minSplitSize);
|
std::shared_ptr<Segment> segment2 = segmentMan.getSegment(2, minSplitSize);
|
||||||
CPPUNIT_ASSERT(!segment2);
|
CPPUNIT_ASSERT(!segment2);
|
||||||
|
|
|
@ -32,7 +32,7 @@ void SegmentTest::testUpdateWrittenLength()
|
||||||
{
|
{
|
||||||
std::shared_ptr<Piece> p(new Piece(0, 16*1024*10));
|
std::shared_ptr<Piece> p(new Piece(0, 16*1024*10));
|
||||||
PiecedSegment s(16*1024*10, p);
|
PiecedSegment s(16*1024*10, p);
|
||||||
CPPUNIT_ASSERT_EQUAL(0, s.getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, s.getWrittenLength());
|
||||||
|
|
||||||
s.updateWrittenLength(16*1024);
|
s.updateWrittenLength(16*1024);
|
||||||
CPPUNIT_ASSERT(p->hasBlock(0));
|
CPPUNIT_ASSERT(p->hasBlock(0));
|
||||||
|
@ -67,9 +67,9 @@ void SegmentTest::testClear()
|
||||||
std::shared_ptr<Piece> p(new Piece(0, 16*1024*10));
|
std::shared_ptr<Piece> p(new Piece(0, 16*1024*10));
|
||||||
PiecedSegment s(16*1024*10, p);
|
PiecedSegment s(16*1024*10, p);
|
||||||
s.updateWrittenLength(16*1024*10);
|
s.updateWrittenLength(16*1024*10);
|
||||||
CPPUNIT_ASSERT_EQUAL(16*1024*10, s.getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)16*1024*10, s.getWrittenLength());
|
||||||
s.clear(nullptr);
|
s.clear(nullptr);
|
||||||
CPPUNIT_ASSERT_EQUAL(0, s.getWrittenLength());
|
CPPUNIT_ASSERT_EQUAL((int64_t)0, s.getWrittenLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -22,23 +22,23 @@ class SinkStreamFilterTest:public CppUnit::TestFixture {
|
||||||
public:
|
public:
|
||||||
MockSegment2(int32_t length):length(length), writtenLength(0) {}
|
MockSegment2(int32_t length):length(length), writtenLength(0) {}
|
||||||
|
|
||||||
virtual int32_t getLength() const CXX11_OVERRIDE
|
virtual int64_t getLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int32_t getWrittenLength() const CXX11_OVERRIDE
|
virtual int64_t getWrittenLength() const CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
return writtenLength;
|
return writtenLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void updateWrittenLength(int32_t bytes) CXX11_OVERRIDE
|
virtual void updateWrittenLength(int64_t bytes) CXX11_OVERRIDE
|
||||||
{
|
{
|
||||||
writtenLength += bytes;
|
writtenLength += bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t length;
|
int64_t length;
|
||||||
int32_t writtenLength;
|
int64_t writtenLength;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::shared_ptr<SinkStreamFilter> filter_;
|
std::shared_ptr<SinkStreamFilter> filter_;
|
||||||
|
|
Loading…
Reference in New Issue