mirror of https://github.com/aria2/aria2
				
				
				
			2008-09-07 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Fixed the bug that exception is thrown when MultiDiskAdaptor::size() is called if the number of file entries are greater than max open files. * src/AbstractSingleDiskAdaptor.cc * src/AbstractSingleDiskAdaptor.h * src/DiskAdaptor.h * src/MultiDiskAdaptor.cc * src/MultiDiskAdaptor.h * test/MultiDiskAdaptorTest.ccpull/1/head
							parent
							
								
									5fb94a3af0
								
							
						
					
					
						commit
						390538d0b5
					
				
							
								
								
									
										11
									
								
								ChangeLog
								
								
								
								
							
							
						
						
									
										11
									
								
								ChangeLog
								
								
								
								
							|  | @ -1,3 +1,14 @@ | |||
| 2008-09-07  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com> | ||||
| 
 | ||||
| 	Fixed the bug that exception is thrown when MultiDiskAdaptor::size() is | ||||
| 	called if the number of file entries are greater than max open files. | ||||
| 	* src/AbstractSingleDiskAdaptor.cc | ||||
| 	* src/AbstractSingleDiskAdaptor.h | ||||
| 	* src/DiskAdaptor.h | ||||
| 	* src/MultiDiskAdaptor.cc | ||||
| 	* src/MultiDiskAdaptor.h | ||||
| 	* test/MultiDiskAdaptorTest.cc | ||||
| 
 | ||||
| 2008-09-07  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com> | ||||
| 
 | ||||
| 	Added a constuctor that receives struct timeval. | ||||
|  |  | |||
|  | @ -78,7 +78,7 @@ bool AbstractSingleDiskAdaptor::fileExists() | |||
|   return File(getFilePath()).exists(); | ||||
| } | ||||
| 
 | ||||
| uint64_t AbstractSingleDiskAdaptor::size() const | ||||
| uint64_t AbstractSingleDiskAdaptor::size() | ||||
| { | ||||
|   return diskWriter->size(); | ||||
| } | ||||
|  |  | |||
|  | @ -66,7 +66,7 @@ public: | |||
| 
 | ||||
|   virtual bool fileExists(); | ||||
| 
 | ||||
|   virtual uint64_t size() const; | ||||
|   virtual uint64_t size(); | ||||
| 
 | ||||
|   virtual void truncate(uint64_t length); | ||||
|    | ||||
|  |  | |||
|  | @ -68,7 +68,7 @@ public: | |||
| 
 | ||||
|   virtual std::string getFilePath() = 0; | ||||
| 
 | ||||
|   virtual uint64_t size() const = 0; | ||||
|   virtual uint64_t size() = 0; | ||||
| 
 | ||||
|   // optional behavior
 | ||||
|   virtual void truncate(uint64_t length) {} | ||||
|  |  | |||
|  | @ -411,11 +411,12 @@ bool MultiDiskAdaptor::fileExists() | |||
| } | ||||
| 
 | ||||
| // TODO call DiskWriter::openFile() before calling this function.
 | ||||
| uint64_t MultiDiskAdaptor::size() const | ||||
| uint64_t MultiDiskAdaptor::size() | ||||
| { | ||||
|   uint64_t size = 0; | ||||
|   for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(); | ||||
|       itr != diskWriterEntries.end(); ++itr) { | ||||
|     openIfNot(*itr, &DiskWriterEntry::openFile, _cachedTopDirPath); | ||||
|     size += (*itr)->size(); | ||||
|   } | ||||
|   return size; | ||||
|  |  | |||
|  | @ -147,7 +147,7 @@ public: | |||
|     return getTopDirPath(); | ||||
|   } | ||||
| 
 | ||||
|   virtual uint64_t size() const; | ||||
|   virtual uint64_t size(); | ||||
| 
 | ||||
|   virtual SharedHandle<FileAllocationIterator> fileAllocationIterator(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ class MultiDiskAdaptorTest:public CppUnit::TestFixture { | |||
|   CPPUNIT_TEST(testWriteData); | ||||
|   CPPUNIT_TEST(testReadData); | ||||
|   CPPUNIT_TEST(testCutTrailingGarbage); | ||||
|   CPPUNIT_TEST(testSize); | ||||
|   CPPUNIT_TEST_SUITE_END(); | ||||
| private: | ||||
|   SharedHandle<MultiDiskAdaptor> adaptor; | ||||
|  | @ -31,6 +32,7 @@ public: | |||
|   void testWriteData(); | ||||
|   void testReadData(); | ||||
|   void testCutTrailingGarbage(); | ||||
|   void testSize(); | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -167,4 +169,32 @@ void MultiDiskAdaptorTest::testCutTrailingGarbage() | |||
| 		       File(topDirPath+"/"+entries[1]->getPath()).size()); | ||||
| } | ||||
| 
 | ||||
| void MultiDiskAdaptorTest::testSize() | ||||
| { | ||||
|   std::string dir = "/tmp"; | ||||
|   std::string topDir = "."; | ||||
|   std::string topDirPath = dir+"/"+topDir; | ||||
|   std::string prefix = "aria2_MultiDiskAdaptorTest_testSize_"; | ||||
|   SharedHandle<FileEntry> entries[] = { | ||||
|     SharedHandle<FileEntry>(new FileEntry(prefix+"1", 1, 0)), | ||||
|     SharedHandle<FileEntry>(new FileEntry(prefix+"2", 1, 1)) | ||||
|   }; | ||||
|   for(size_t i = 0; i < arrayLength(entries); ++i) { | ||||
|     createFile(topDirPath+"/"+entries[i]->getPath(), | ||||
| 	       entries[i]->getLength()); | ||||
|   } | ||||
|   std::deque<SharedHandle<FileEntry> > fileEntries | ||||
|     (&entries[0], &entries[arrayLength(entries)]); | ||||
|    | ||||
|   MultiDiskAdaptor adaptor; | ||||
|   adaptor.setStoreDir(dir); | ||||
|   adaptor.setTopDir(topDir); | ||||
|   adaptor.setFileEntries(fileEntries); | ||||
|   adaptor.setMaxOpenFiles(1); | ||||
|    | ||||
|   adaptor.openFile(); | ||||
| 
 | ||||
|   CPPUNIT_ASSERT_EQUAL((uint64_t)2, adaptor.size()); | ||||
| } | ||||
| 
 | ||||
| } // namespace aria2
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Tatsuhiro Tsujikawa
						Tatsuhiro Tsujikawa