change the way we get CRC for a list of files since folder scans don't sort the same on different platforms

This commit is contained in:
Mark Vejvoda 2010-04-29 00:34:43 +00:00
parent 50341e9db6
commit ff32f34bfe
3 changed files with 71 additions and 1 deletions

View File

@ -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 <string>
#include <map>
#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<string,int32> 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

View File

@ -252,7 +252,10 @@ void findAll(const string &path, vector<string> &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;
}

View File

@ -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<string,int32>::iterator iterMap = fileList.begin();
iterMap != fileList.end(); iterMap++)
{
addFileToSum(iterMap->first);
}
}
return sum;
}
}}//end namespace