From 96150f1aeacf55d311c41ffe12d9e754b1cda001 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 26 Feb 2011 21:48:31 +0200 Subject: Add ability to redownload update files if file checksum incorrect. --- src/gui/updatewindow.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/gui/updatewindow.cpp') diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 132f8bcfc..f4281cff1 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -635,7 +635,8 @@ void UpdaterWindow::logic() std::ifstream temp( (mUpdatesDir + "/" + mCurrentFile).c_str()); - if (!temp.is_open()) + if (!temp.is_open() || !validateFile(mUpdatesDir + "/" + + mCurrentFile, mCurrentChecksum)) { temp.close(); download(); @@ -671,3 +672,14 @@ void UpdaterWindow::logic() break; } } + +bool UpdaterWindow::validateFile(std::string filePath, long hash) +{ + FILE *file = fopen(filePath.c_str(), "rb"); + if (!file) + return false; + + unsigned long adler = Net::Download::fadler32(file); + fclose(file); + return adler == hash; +} -- cgit v1.2.3-60-g2f50