From 8bef34f672815c3c9b4236d06fdee8dfd0bffbc2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 24 Nov 2013 01:52:23 +0000 Subject: Various joining fixes. --- src/lib/util.cc | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/lib/util.cc') diff --git a/src/lib/util.cc b/src/lib/util.cc index 7ae4f8b16..98dec58d7 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -91,6 +91,7 @@ using std::numeric_limits; using std::pair; using std::ofstream; using std::cout; +using std::streampos; using boost::shared_ptr; using boost::thread; using boost::lexical_cast; @@ -396,6 +397,11 @@ md5_digest (vector files, shared_ptr job) MD5_CTX md5_context; MD5_Init (&md5_context); + vector sizes; + for (size_t i = 0; i < files.size(); ++i) { + sizes.push_back (boost::filesystem::file_size (files[i])); + } + for (size_t i = 0; i < files.size(); ++i) { ifstream f (files[i].string().c_str(), std::ios::binary); if (!f.good ()) { @@ -403,18 +409,19 @@ md5_digest (vector files, shared_ptr job) } f.seekg (0, std::ios::end); - int bytes = f.tellg (); + streampos const bytes = f.tellg (); f.seekg (0, std::ios::beg); - while (bytes > 0) { - int const t = min (bytes, buffer_size); + streampos remaining = bytes; + while (remaining > 0) { + int const t = min (remaining, streampos (buffer_size)); f.read (buffer, t); MD5_Update (&md5_context, buffer, t); - bytes -= t; - } + remaining -= t; - if (job) { - job->set_progress (float (i) / files.size ()); + if (job) { + job->set_progress ((float (i) + 1 - float(remaining) / bytes) / files.size ()); + } } } -- cgit v1.2.3