[Pkg-owncloud-commits] [owncloud-client] 77/175: Improved implementation efficiency of checksum calculation.
Sandro Knauß
hefee-guest at moszumanska.debian.org
Sat Aug 8 10:36:29 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 64ce0cd7a212fcda54a80e32c3d76cfd3b8db548
Author: Klaas Freitag <freitag at owncloud.com>
Date: Wed May 20 21:42:08 2015 +0200
Improved implementation efficiency of checksum calculation.
Based on Oliviers suggestions the file read routine now reuses
one buffer to read the entire file.
Other cleanups.
---
src/libsync/filesystem.cpp | 51 ++++++++++++++++++---------------------
src/libsync/filesystem.h | 9 +++----
test/testtranschecksumvalidator.h | 15 +++++-------
3 files changed, 34 insertions(+), 41 deletions(-)
diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp
index c1c20d7..b3fb526 100644
--- a/src/libsync/filesystem.cpp
+++ b/src/libsync/filesystem.cpp
@@ -11,7 +11,6 @@
* for more details.
*/
-#include "config.h"
#include "filesystem.h"
#include "utility.h"
@@ -20,8 +19,6 @@
#include <QCoreApplication>
#include <QDebug>
#include <QCryptographicHash>
-#include <QFuture>
-#include <qtconcurrentrun.h>
#ifdef ZLIB_FOUND
#include <zlib.h>
@@ -402,57 +399,57 @@ QString FileSystem::fileSystemForPath(const QString & path)
}
#endif
-QByteArray FileSystem::calcMd5( const QString& filename )
+#define BUFSIZE 1024*1024*10
+
+static QByteArray readToCrypto( const QString& filename, QCryptographicHash::Algorithm algo )
{
+ const qint64 bufSize = BUFSIZE;
+ QByteArray buf(bufSize,0);
QByteArray arr;
-
- QCryptographicHash crypto( QCryptographicHash::Md5 );
+ QCryptographicHash crypto( algo );
QFile file(filename);
if (file.open(QIODevice::ReadOnly)) {
- QByteArray data;
+ qint64 size;
while (!file.atEnd()) {
- data = file.read(1024*1024*10);
- crypto.addData(data);
+ size = file.read( buf.data(), bufSize );
+ if( size > 0 ) {
+ crypto.addData(buf.data(), size);
+ }
}
arr = crypto.result().toHex();
}
return arr;
}
-QByteArray FileSystem::calcSha1( const QString& filename )
+QByteArray FileSystem::calcMd5( const QString& filename )
{
- QByteArray arr;
-
- QCryptographicHash crypto( QCryptographicHash::Sha1 );
+ return readToCrypto( filename, QCryptographicHash::Md5 );
+}
- QFile file(filename);
- if (file.open(QIODevice::ReadOnly)) {
- QByteArray data;
- while (!file.atEnd()) {
- data = file.read(1024*1024*10);
- crypto.addData(data);
- }
- arr = crypto.result().toHex();
- }
- return arr;
+QByteArray FileSystem::calcSha1( const QString& filename )
+{
+ return readToCrypto( filename, QCryptographicHash::Sha1 );
}
#ifdef ZLIB_FOUND
QByteArray FileSystem::calcAdler32( const QString& filename )
{
unsigned int adler = adler32(0L, Z_NULL, 0);
+ const qint64 bufSize = BUFSIZE;
+ QByteArray buf(bufSize, 0);
QFile file(filename);
if (file.open(QIODevice::ReadOnly)) {
- QByteArray data;
+ qint64 size;
while (!file.atEnd()) {
- data = file.read(1024*1024*10);
- adler = adler32(adler, (const Bytef*) data.data(), data.size());
+ size = file.read(buf.data(), bufSize);
+ if( size > 0 )
+ adler = adler32(adler, (const Bytef*) buf.data(), size);
}
}
- return QString::number( adler, 16 ).toUtf8();
+ return QByteArray::number( adler, 16 );
}
#endif
diff --git a/src/libsync/filesystem.h b/src/libsync/filesystem.h
index 6e9b45c..9e314a1 100644
--- a/src/libsync/filesystem.h
+++ b/src/libsync/filesystem.h
@@ -13,8 +13,11 @@
#pragma once
+#include "config.h"
+
#include <QString>
#include <ctime>
+#include <QCryptographicHash>
#include <owncloudlib.h>
@@ -123,12 +126,8 @@ QString fileSystemForPath(const QString & path);
QByteArray calcMd5( const QString& fileName );
QByteArray calcSha1( const QString& fileName );
-QByteArray calcAdler32( const QString& fileName );
-
#ifdef ZLIB_FOUND
-QByteArray calcAdler32Worker( const QString& filename );
+QByteArray calcAdler32( const QString& fileName );
#endif
-QByteArray calcSha1Worker( const QString& filename );
-QByteArray calcMd5Worker( const QString& filename );
}}
diff --git a/test/testtranschecksumvalidator.h b/test/testtranschecksumvalidator.h
index c43dd90..58aa52d 100644
--- a/test/testtranschecksumvalidator.h
+++ b/test/testtranschecksumvalidator.h
@@ -72,24 +72,24 @@ using namespace OCC;
void testUploadChecksummingAdler() {
- TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile);
+ TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
vali->setChecksumType("Adler32");
connect(vali, SIGNAL(validated()), this, SLOT(slotUpValidated()));
- _expected = "Adler32:"+FileSystem::calcAdler32( _testfile );
+ QString testfile = _testfile;
+ _expected = "Adler32:"+FileSystem::calcAdler32( testfile );
qDebug() << "XX Expected Checksum: " << _expected;
vali->uploadValidation(_item);
usleep(5000);
_loop.processEvents();
- vali->deleteLater();
}
void testUploadChecksummingMd5() {
- TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile);
+ TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
vali->setChecksumType( OCC::checkSumMD5C );
connect(vali, SIGNAL(validated()), this, SLOT(slotUpValidated()));
@@ -100,12 +100,11 @@ using namespace OCC;
usleep(2000);
_loop.processEvents();
- vali->deleteLater();
}
void testUploadChecksummingSha1() {
- TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile);
+ TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
vali->setChecksumType( OCC::checkSumSHA1C );
connect(vali, SIGNAL(validated()), this, SLOT(slotUpValidated()));
@@ -117,7 +116,6 @@ using namespace OCC;
usleep(2000);
_loop.processEvents();
- vali->deleteLater();
}
void testDownloadChecksummingAdler() {
@@ -127,7 +125,7 @@ using namespace OCC;
adler.append(FileSystem::calcAdler32( _testfile ));
_successDown = false;
- TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile);
+ TransmissionChecksumValidator *vali = new TransmissionChecksumValidator(_testfile, this);
connect(vali, SIGNAL(validated()), this, SLOT(slotDownValidated()));
connect(vali, SIGNAL(validationFailed(QString)), this, SLOT(slotDownError(QString)));
vali->downloadValidation(adler);
@@ -151,7 +149,6 @@ using namespace OCC;
_loop.processEvents();
QVERIFY(_errorSeen);
- vali->deleteLater();
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list