From ff32f34bfe6ce6d9d51ad217fc5bbf1b5a1cfd69 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Thu, 29 Apr 2010 00:34:43 +0000 Subject: [PATCH] change the way we get CRC for a list of files since folder scans don't sort the same on different platforms --- source/shared_lib/include/util/checksum.h | 52 +++++++++++++++++++ .../sources/platform/sdl/platform_util.cpp | 5 +- source/shared_lib/sources/util/checksum.cpp | 15 ++++++ 3 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 source/shared_lib/include/util/checksum.h diff --git a/source/shared_lib/include/util/checksum.h b/source/shared_lib/include/util/checksum.h new file mode 100644 index 000000000..c2b8d6cb9 --- /dev/null +++ b/source/shared_lib/include/util/checksum.h @@ -0,0 +1,52 @@ +// ============================================================== +// This file is part of Glest Shared Library (www.glest.org) +// +// Copyright (C) 2001-2008 Martiņo Figueroa +// +// You can redistribute this code and/or modify it under +// the terms of the GNU General Public License as published +// by the Free Software Foundation; either version 2 of the +// License, or (at your option) any later version +// ============================================================== + +#ifndef _SHARED_UTIL_CHECKSUM_H_ +#define _SHARED_UTIL_CHECKSUM_H_ + +#include +#include + +#include "types.h" + +using std::string; +using Shared::Platform::int32; +using Shared::Platform::int8; + +namespace Shared{ namespace Util{ + +// ===================================================== +// class Checksum +// ===================================================== + +class Checksum{ +private: + int32 sum; + int32 r; + int32 c1; + int32 c2; + std::map fileList; + + void addFileToSum(const string &path); + +public: + Checksum(); + + int32 getSum(); + + void addByte(int8 value); + void addString(const string &value); + void addFile(const string &path); +}; + +}}//end namespace + +#endif diff --git a/source/shared_lib/sources/platform/sdl/platform_util.cpp b/source/shared_lib/sources/platform/sdl/platform_util.cpp index 179f8519c..ff8feecf8 100644 --- a/source/shared_lib/sources/platform/sdl/platform_util.cpp +++ b/source/shared_lib/sources/platform/sdl/platform_util.cpp @@ -252,7 +252,10 @@ void findAll(const string &path, vector &results, bool cutExtension, boo bool isdir(const char *path) { struct stat stats; - bool ret = stat (path, &stats) == 0 && S_ISDIR (stats.st_mode); + + bool ret = stat (path, &stats) == 0 && S_ISDIR(stats.st_mode); + if(ret == false) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] NOT a path [%s]\n",__FILE__,__FUNCTION__,__LINE__,path); + return ret; } diff --git a/source/shared_lib/sources/util/checksum.cpp b/source/shared_lib/sources/util/checksum.cpp index 7bed0a6a7..22dff2556 100644 --- a/source/shared_lib/sources/util/checksum.cpp +++ b/source/shared_lib/sources/util/checksum.cpp @@ -46,6 +46,10 @@ void Checksum::addString(const string &value){ } void Checksum::addFile(const string &path){ + fileList[path] = 0; +} + +void Checksum::addFileToSum(const string &path){ FILE* file= fopen(path.c_str(), "rb"); @@ -67,4 +71,15 @@ void Checksum::addFile(const string &path){ fclose(file); } +int32 Checksum::getSum() { + if(fileList.size() > 0) { + for(std::map::iterator iterMap = fileList.begin(); + iterMap != fileList.end(); iterMap++) + { + addFileToSum(iterMap->first); + } + } + return sum; +} + }}//end namespace