summaryrefslogtreecommitdiff
path: root/src/BitfieldMan.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-11 07:54:03 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-02-11 07:54:03 +0000
commit0fc900c0acb07320441e2265e6fcd89e80db28b3 (patch)
treee846b8e0d718ec6829a215e7a74dd264f638844e /src/BitfieldMan.cc
parenta8376a5c4bbdcdae7243f1fbdeb07106a35838db (diff)
2009-02-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed the bug that adding 0 length filter to BitfieldMan filters 1 block. It should not filter anything. * src/BitfieldMan.cc * src/ConsoleStatCalc.cc * test/BitfieldManTest.cc
Diffstat (limited to 'src/BitfieldMan.cc')
-rw-r--r--src/BitfieldMan.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc
index 7940bf25..7421b016 100644
--- a/src/BitfieldMan.cc
+++ b/src/BitfieldMan.cc
@@ -33,10 +33,12 @@
*/
/* copyright --> */
#include "BitfieldMan.h"
+
+#include <cstring>
+
#include "Randomizer.h"
#include "Util.h"
#include "array_fun.h"
-#include <cstring>
namespace aria2 {
@@ -609,10 +611,12 @@ void BitfieldMan::addFilter(uint64_t offset, uint64_t length) {
filterBitfield = new unsigned char[bitfieldLength];
memset(filterBitfield, 0, bitfieldLength);
}
- size_t startBlock = offset/blockLength;
- size_t endBlock = (offset+length-1)/blockLength;
- for(size_t i = startBlock; i <= endBlock && i < blocks; i++) {
- setFilterBit(i);
+ if(length > 0) {
+ size_t startBlock = offset/blockLength;
+ size_t endBlock = (offset+length-1)/blockLength;
+ for(size_t i = startBlock; i <= endBlock && i < blocks; i++) {
+ setFilterBit(i);
+ }
}
updateCache();
}