mirror of https://github.com/aria2/aria2
2008-11-17 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Rewritten ByteArrayDiskWriter::size() using seekg() and tellg(). Removed const qualifier from DiskWriter::size(). * src/AbstractDiskWriter.cc * src/AbstractDiskWriter.h * src/ByteArrayDiskWriter.cc * src/ByteArrayDiskWriter.h * src/DiskWriter.h * test/ByteArrayDiskWriterTest.ccpull/1/head
parent
644f707519
commit
b0029fa4bf
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2008-11-17 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Rewritten ByteArrayDiskWriter::size() using seekg() and tellg().
|
||||
Removed const qualifier from DiskWriter::size().
|
||||
* src/AbstractDiskWriter.cc
|
||||
* src/AbstractDiskWriter.h
|
||||
* src/ByteArrayDiskWriter.cc
|
||||
* src/ByteArrayDiskWriter.h
|
||||
* src/DiskWriter.h
|
||||
* test/ByteArrayDiskWriterTest.cc
|
||||
|
||||
2008-11-17 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Fixed the bug that causes segmentation fault/bus error during executing
|
||||
|
|
|
@ -185,7 +185,7 @@ void AbstractDiskWriter::truncate(uint64_t length)
|
|||
}
|
||||
|
||||
// TODO the file descriptor fd must be opened before calling this function.
|
||||
uint64_t AbstractDiskWriter::size() const
|
||||
uint64_t AbstractDiskWriter::size()
|
||||
{
|
||||
if(fd == -1) {
|
||||
throw DlAbortEx("File not opened.");
|
||||
|
|
|
@ -72,7 +72,7 @@ public:
|
|||
|
||||
virtual void truncate(uint64_t length);
|
||||
|
||||
virtual uint64_t size() const;
|
||||
virtual uint64_t size();
|
||||
|
||||
virtual void enableDirectIO();
|
||||
|
||||
|
|
|
@ -66,9 +66,10 @@ void ByteArrayDiskWriter::openExistingFile(const std::string& filename,
|
|||
|
||||
void ByteArrayDiskWriter::writeData(const unsigned char* data, size_t dataLength, off_t position)
|
||||
{
|
||||
if(size() < (uint64_t)position) {
|
||||
buf.seekp(size(), std::ios::beg);
|
||||
for(uint64_t i = size(); i < (uint64_t)position; ++i) {
|
||||
uint64_t length = size();
|
||||
if(length < (uint64_t)position) {
|
||||
buf.seekp(length, std::ios::beg);
|
||||
for(uint64_t i = length; i < (uint64_t)position; ++i) {
|
||||
buf.put('\0');
|
||||
}
|
||||
} else {
|
||||
|
@ -85,4 +86,11 @@ ssize_t ByteArrayDiskWriter::readData(unsigned char* data, size_t len, off_t pos
|
|||
return buf.gcount();
|
||||
}
|
||||
|
||||
uint64_t ByteArrayDiskWriter::size()
|
||||
{
|
||||
buf.seekg(0, std::ios::end);
|
||||
buf.clear();
|
||||
return buf.tellg();
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -63,10 +63,7 @@ public:
|
|||
// Not implemented yet
|
||||
virtual void truncate(uint64_t length) {}
|
||||
|
||||
virtual uint64_t size() const
|
||||
{
|
||||
return buf.str().size();
|
||||
}
|
||||
virtual uint64_t size();
|
||||
|
||||
virtual void enableDirectIO() {}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
virtual void truncate(uint64_t length) = 0;
|
||||
|
||||
// Returns file length
|
||||
virtual uint64_t size() const = 0;
|
||||
virtual uint64_t size() = 0;
|
||||
|
||||
virtual void enableDirectIO() = 0;
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ void ByteArrayDiskWriterTest::testWriteAndRead() {
|
|||
buf[c] = '\0';
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("ello World !!"), std::string(buf));
|
||||
CPPUNIT_ASSERT_EQUAL((uint64_t)14, bw.size());
|
||||
}
|
||||
|
||||
void ByteArrayDiskWriterTest::testWriteAndRead2() {
|
||||
|
@ -58,6 +59,7 @@ void ByteArrayDiskWriterTest::testWriteAndRead2() {
|
|||
buf[c] = '\0';
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("Hello From Mars"), std::string(buf));
|
||||
CPPUNIT_ASSERT_EQUAL((uint64_t)15, bw.size());
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
Loading…
Reference in New Issue