[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