diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-08-07 01:43:24 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2011-08-07 01:43:24 +0900 |
| commit | e2d682e0c6f786856946133bc34e2ae5e9ddbd8f (patch) | |
| tree | afe90016f311ba9e873aa6503a15b90a9dfd9201 /src/bencode2.cc | |
| parent | 4220c2aadcc84894e838636ed952a876eb24d1fa (diff) | |
bencode2::decodeFromFile is now first read torrent metainfo file into
memory before parsing it.
Diffstat (limited to 'src/bencode2.cc')
| -rw-r--r-- | src/bencode2.cc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/bencode2.cc b/src/bencode2.cc index 0e24bfcf..181309a8 100644 --- a/src/bencode2.cc +++ b/src/bencode2.cc @@ -34,12 +34,12 @@ /* copyright --> */ #include "bencode2.h" -#include <fstream> #include <sstream> #include "fmt.h" #include "DlAbortEx.h" #include "error_code.h" +#include "BufferedFile.h" namespace aria2 { @@ -220,9 +220,12 @@ SharedHandle<ValueBase> decode(const unsigned char* data, size_t length, size_t& SharedHandle<ValueBase> decodeFromFile(const std::string& filename) { - std::ifstream f(filename.c_str(), std::ios::binary); - if(f) { - return decode(f); + BufferedFile fp(filename, BufferedFile::READ); + if(fp) { + std::stringstream ss; + fp.transfer(ss); + fp.close(); + return decode(ss); } else { throw DL_ABORT_EX2 (fmt("Bencode decoding failed: Cannot open file '%s'.", |
