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