summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-10-13 22:05:18 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-10-13 22:05:18 +0900
commitba87268d1ce4ec0fa1104d08c5fd01934e94d574 (patch)
tree1d7d90f40491af858d16c59c7ac8234444dd92a6
parent2f59ce0048a85f45b25e65a41aa4e445fbc7e1b0 (diff)
Simplified IteratableChunkChecksumValidator
-rw-r--r--src/IteratableChunkChecksumValidator.cc41
-rw-r--r--src/IteratableChunkChecksumValidator.h1
2 files changed, 9 insertions, 33 deletions
diff --git a/src/IteratableChunkChecksumValidator.cc b/src/IteratableChunkChecksumValidator.cc
index 81f236d6..f1aad5d8 100644
--- a/src/IteratableChunkChecksumValidator.cc
+++ b/src/IteratableChunkChecksumValidator.cc
@@ -53,9 +53,6 @@
namespace aria2 {
-#define BUFSIZE (256*1024)
-#define ALIGNMENT 512
-
IteratableChunkChecksumValidator::IteratableChunkChecksumValidator
(const SharedHandle<DownloadContext>& dctx,
const PieceStorageHandle& pieceStorage)
@@ -63,14 +60,10 @@ IteratableChunkChecksumValidator::IteratableChunkChecksumValidator
pieceStorage_(pieceStorage),
bitfield_(new BitfieldMan(dctx_->getPieceLength(),
dctx_->getTotalLength())),
- currentIndex_(0),
- buffer_(0)
+ currentIndex_(0)
{}
-IteratableChunkChecksumValidator::~IteratableChunkChecksumValidator()
-{
- delete [] buffer_;
-}
+IteratableChunkChecksumValidator::~IteratableChunkChecksumValidator() {}
void IteratableChunkChecksumValidator::validateChunk()
@@ -121,8 +114,6 @@ std::string IteratableChunkChecksumValidator::calculateActualChecksum()
void IteratableChunkChecksumValidator::init()
{
- delete [] buffer_;
- buffer_ = new unsigned char[BUFSIZE];
ctx_ = MessageDigest::create(dctx_->getPieceHashType());
bitfield_->clearAllBit();
currentIndex_ = 0;
@@ -130,37 +121,23 @@ void IteratableChunkChecksumValidator::init()
std::string IteratableChunkChecksumValidator::digest(off_t offset, size_t length)
{
+ unsigned char buf[4096];
ctx_->reset();
- off_t curoffset = offset/ALIGNMENT*ALIGNMENT;
off_t max = offset+length;
- off_t woffset;
- if(curoffset < offset) {
- woffset = offset-curoffset;
- } else {
- woffset = 0;
- }
- while(curoffset < max) {
- size_t r = pieceStorage_->getDiskAdaptor()->readData(buffer_, BUFSIZE,
- curoffset);
- if(r == 0 || r < static_cast<size_t>(woffset)) {
+ while(offset < max) {
+ size_t r = pieceStorage_->getDiskAdaptor()->readData
+ (buf, std::min(static_cast<off_t>(sizeof(buf)), max-offset), offset);
+ if(r == 0) {
throw DL_ABORT_EX
(fmt(EX_FILE_READ, dctx_->getBasePath().c_str(),
"data is too short"));
}
- size_t wlength;
- if(max < static_cast<off_t>(curoffset+r)) {
- wlength = max-curoffset-woffset;
- } else {
- wlength = r-woffset;
- }
- ctx_->update(buffer_+woffset, wlength);
- curoffset += r;
- woffset = 0;
+ ctx_->update(buf, r);
+ offset += r;
}
return ctx_->digest();
}
-
bool IteratableChunkChecksumValidator::finished() const
{
if(currentIndex_ >= dctx_->getNumPieces()) {
diff --git a/src/IteratableChunkChecksumValidator.h b/src/IteratableChunkChecksumValidator.h
index 841bf671..5e9bfef1 100644
--- a/src/IteratableChunkChecksumValidator.h
+++ b/src/IteratableChunkChecksumValidator.h
@@ -54,7 +54,6 @@ private:
SharedHandle<BitfieldMan> bitfield_;
size_t currentIndex_;
SharedHandle<MessageDigest> ctx_;
- unsigned char* buffer_;
std::string calculateActualChecksum();