[Add] Added checksum. Also fized InputStreamWrapper it could not find size_t..
This commit is contained in:
parent
f6645cd911
commit
bfde44079c
@ -46,6 +46,7 @@ HEADERS += ../src/Actor/Player.h \
|
|||||||
../src/System/Filesystem/InputFileStream.h \
|
../src/System/Filesystem/InputFileStream.h \
|
||||||
../src/System/Filesystem/FilePackageManager.h \
|
../src/System/Filesystem/FilePackageManager.h \
|
||||||
../src/System/Filesystem/InputStreamWrapper.h \
|
../src/System/Filesystem/InputStreamWrapper.h \
|
||||||
|
../src/System/Checksum.h \
|
||||||
../src/Texture/Texture.h \
|
../src/Texture/Texture.h \
|
||||||
../src/Sound/Music.h \
|
../src/Sound/Music.h \
|
||||||
../src/TMXParser/base64.h \
|
../src/TMXParser/base64.h \
|
||||||
@ -101,6 +102,7 @@ SOURCES += ../src/Actor/Player.cpp \
|
|||||||
../src/System/Filesystem/InputFileStream.cpp \
|
../src/System/Filesystem/InputFileStream.cpp \
|
||||||
../src/System/Filesystem/FilePackageManager.cpp \
|
../src/System/Filesystem/FilePackageManager.cpp \
|
||||||
../src/System/Filesystem/InputStreamWrapper.cpp \
|
../src/System/Filesystem/InputStreamWrapper.cpp \
|
||||||
|
../src/System/Checksum.cpp \
|
||||||
../src/Texture/Texture.cpp \
|
../src/Texture/Texture.cpp \
|
||||||
../src/Sound/Music.cpp \
|
../src/Sound/Music.cpp \
|
||||||
../src/Actor/NPC.cpp \
|
../src/Actor/NPC.cpp \
|
||||||
|
68
src/System/Checksum.cpp
Normal file
68
src/System/Checksum.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#include "Checksum.h"
|
||||||
|
#include "Filesystem/InputStreamWrapper.h"
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
using namespace saracraft;
|
||||||
|
|
||||||
|
unsigned int Checksum::CountChecksumForFile(const char* filename) {
|
||||||
|
unsigned int chksum = 0;
|
||||||
|
int filesize = 0;
|
||||||
|
bool success = CountChecksumForFileImpl(&chksum, &filesize, filename);
|
||||||
|
if(success) {
|
||||||
|
return chksum;
|
||||||
|
} else {
|
||||||
|
assert(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Checksum::DoesChecksumAndSizeMatchFile(unsigned int checksum, int filesize, const char* filename) {
|
||||||
|
unsigned int chksum = 0;
|
||||||
|
int size = 0;
|
||||||
|
bool success = CountChecksumForFileImpl(&chksum, &size, filename);
|
||||||
|
if(success) {
|
||||||
|
if(chksum == checksum && filesize == size)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Checksum::CountChecksumForFileImpl(unsigned int* checksum, int* filesize, const char* filename) {
|
||||||
|
assert(filename != NULL);
|
||||||
|
|
||||||
|
filesystem::FB_FILE* f = filesystem::fb_fopen(filename, "rb");
|
||||||
|
if(f == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int size = filesystem::fb_fsize(f);
|
||||||
|
|
||||||
|
char* buf = new char[size];
|
||||||
|
|
||||||
|
bool success = true;
|
||||||
|
int got = filesystem::fb_fread(buf, size, 1, f);
|
||||||
|
if(got != 1) {
|
||||||
|
success = false;
|
||||||
|
} else {
|
||||||
|
success = true;
|
||||||
|
*filesize = size;
|
||||||
|
unsigned int hashCode = 1327341033;
|
||||||
|
int hashmult = 0;
|
||||||
|
for(int i = 0; i < size; i++) {
|
||||||
|
if((i % 73) == 0)
|
||||||
|
hashCode += (buf[i] << hashmult);
|
||||||
|
else
|
||||||
|
hashCode ^= (buf[i] << hashmult);
|
||||||
|
hashmult+=4;
|
||||||
|
if(hashmult > 23) hashmult -= 23;
|
||||||
|
}
|
||||||
|
delete [] buf;
|
||||||
|
filesystem::fb_fclose(f);
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
12
src/System/Checksum.h
Normal file
12
src/System/Checksum.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class Checksum {
|
||||||
|
public:
|
||||||
|
static unsigned int CountChecksumForFile(const char* filename);
|
||||||
|
static bool DoesChecksumAndSizeMatchFile(unsigned int checksum,
|
||||||
|
int filesize, const char* filename);
|
||||||
|
private:
|
||||||
|
static bool CountChecksumForFileImpl(unsigned int* checksum,
|
||||||
|
int* filesize, const char* filename);
|
||||||
|
};
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <cstring>
|
||||||
namespace saracraft {
|
namespace saracraft {
|
||||||
namespace filesystem {
|
namespace filesystem {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user