浏览代码

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
Tatsuhiro Tsujikawa 17 年之前
父节点
当前提交
b0029fa4bf
共有 7 个文件被更改,包括 28 次插入10 次删除
  1. 11 0
      ChangeLog
  2. 1 1
      src/AbstractDiskWriter.cc
  3. 1 1
      src/AbstractDiskWriter.h
  4. 11 3
      src/ByteArrayDiskWriter.cc
  5. 1 4
      src/ByteArrayDiskWriter.h
  6. 1 1
      src/DiskWriter.h
  7. 2 0
      test/ByteArrayDiskWriterTest.cc

+ 11 - 0
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

+ 1 - 1
src/AbstractDiskWriter.cc

@@ -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.");

+ 1 - 1
src/AbstractDiskWriter.h

@@ -72,7 +72,7 @@ public:
 
   virtual void truncate(uint64_t length);
 
-  virtual uint64_t size() const;
+  virtual uint64_t size();
   
   virtual void enableDirectIO();
 

+ 11 - 3
src/ByteArrayDiskWriter.cc

@@ -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

+ 1 - 4
src/ByteArrayDiskWriter.h

@@ -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() {}
 

+ 1 - 1
src/DiskWriter.h

@@ -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;
 

+ 2 - 0
test/ByteArrayDiskWriterTest.cc

@@ -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