summaryrefslogtreecommitdiff
path: root/src/bencode2.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-08-07 01:43:24 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-08-07 01:43:24 +0900
commite2d682e0c6f786856946133bc34e2ae5e9ddbd8f (patch)
treeafe90016f311ba9e873aa6503a15b90a9dfd9201 /src/bencode2.cc
parent4220c2aadcc84894e838636ed952a876eb24d1fa (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.cc11
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'.",