src/gfxinit.cpp
changeset 8133 3ab8eaf85ca0
parent 8131 160939e24ed3
child 8213 7bdd7593eb9b
equal deleted inserted replaced
8132:f4c7a8e4f25a 8133:3ab8eaf85ca0
    18 #include "gfx_func.h"
    18 #include "gfx_func.h"
    19 #include <string.h>
    19 #include <string.h>
    20 
    20 
    21 struct MD5File {
    21 struct MD5File {
    22 	const char * filename;     ///< filename
    22 	const char * filename;     ///< filename
    23 	md5_byte_t hash[16];       ///< md5 sum of the file
    23 	uint8 hash[16];            ///< md5 sum of the file
    24 };
    24 };
    25 
    25 
    26 struct FileList {
    26 struct FileList {
    27 	MD5File basic[2];     ///< GRF files that always have to be loaded
    27 	MD5File basic[2];     ///< GRF files that always have to be loaded
    28 	MD5File landscape[3]; ///< Landscape specific grf files
    28 	MD5File landscape[3]; ///< Landscape specific grf files
   106 {
   106 {
   107 	size_t size;
   107 	size_t size;
   108 	FILE *f = FioFOpenFile(file.filename, "rb", DATA_DIR, &size);
   108 	FILE *f = FioFOpenFile(file.filename, "rb", DATA_DIR, &size);
   109 
   109 
   110 	if (f != NULL) {
   110 	if (f != NULL) {
   111 		md5_state_t filemd5state;
   111 		Md5 checksum;
   112 		md5_byte_t buffer[1024];
   112 		uint8 buffer[1024];
   113 		md5_byte_t digest[16];
   113 		uint8 digest[16];
   114 		size_t len;
   114 		size_t len;
   115 
   115 
   116 		md5_init(&filemd5state);
       
   117 		while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) {
   116 		while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) {
   118 			size -= len;
   117 			size -= len;
   119 			md5_append(&filemd5state, buffer, len);
   118 			checksum.Append(buffer, len);
   120 		}
   119 		}
   121 
   120 
   122 		FioFCloseFile(f);
   121 		FioFCloseFile(f);
   123 
   122 
   124 		md5_finish(&filemd5state, digest);
   123 		checksum.Finish(digest);
   125 		return memcmp(file.hash, digest, sizeof(file.hash)) == 0;
   124 		return memcmp(file.hash, digest, sizeof(file.hash)) == 0;
   126 	} else { // file not found
   125 	} else { // file not found
   127 		return false;
   126 		return false;
   128 	}
   127 	}
   129 }
   128 }