77 uint32_t calc_crc32 = 0; |
77 uint32_t calc_crc32 = 0; |
78 char data_block = 0; |
78 char data_block = 0; |
79 |
79 |
80 while(!feof(file_buffer)){ |
80 while(!feof(file_buffer)){ |
81 if (fread(&data_block, sizeof(data_block), 1, file_buffer)) |
81 if (fread(&data_block, sizeof(data_block), 1, file_buffer)) |
82 calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(char), calc_crc32); |
82 calc_crc32 = GenerateCRC32Sum(&data_block, sizeof(data_block), calc_crc32); |
83 } |
83 } |
84 |
84 |
85 /* Compare crc result with a magic number. */ |
85 /* Compare crc result with a magic number. */ |
86 return (calc_crc32 == magic_number) ? 1 : 0; |
86 return (calc_crc32 == magic_number) ? 1 : 0; |
87 } |
87 } |
88 |
88 |
89 /* Compare current hash with hash from file byte by byte. */ |
89 /* Compare current hash with hash from file byte by byte. */ |
90 int CheckFilehash(void) |
90 int CheckFilehash(void) |
91 { |
91 { |
92 int k; |
92 unsigned int k; |
93 int offset = sizeof(retain_info.retain_size); |
93 int offset = sizeof(retain_info.retain_size); |
94 |
94 |
95 rewind(retain_buffer); |
95 rewind(retain_buffer); |
96 fseek(retain_buffer, offset , SEEK_SET); |
96 fseek(retain_buffer, offset , SEEK_SET); |
97 |
97 |
100 if (size != retain_info.hash_size) |
100 if (size != retain_info.hash_size) |
101 return 0; |
101 return 0; |
102 |
102 |
103 for(k = 0; k < retain_info.hash_size; k++){ |
103 for(k = 0; k < retain_info.hash_size; k++){ |
104 uint8_t file_digit; |
104 uint8_t file_digit; |
105 fread(&file_digit, sizeof(char), 1, retain_buffer); |
105 fread(&file_digit, sizeof(file_digit), 1, retain_buffer); |
106 if (file_digit != *(retain_info.hash+k)) |
106 if (file_digit != *(retain_info.hash+k)) |
107 return 0; |
107 return 0; |
108 } |
108 } |
109 |
109 |
110 return 1; |
110 return 1; |
111 } |
111 } |
112 |
112 |
113 void InitRetain(void) |
113 void InitRetain(void) |
114 { |
114 { |
115 int i; |
115 unsigned int i; |
116 |
116 |
117 /* Generate CRC32 lookup table. */ |
117 /* Generate CRC32 lookup table. */ |
118 GenerateCRC32Table(); |
118 GenerateCRC32Table(); |
119 |
119 |
120 /* Get retain size in bytes */ |
120 /* Get retain size in bytes */ |
247 if (!retain_buffer) |
247 if (!retain_buffer) |
248 return; |
248 return; |
249 |
249 |
250 /* Add retain data CRC to the end of buffer file. */ |
250 /* Add retain data CRC to the end of buffer file. */ |
251 fseek(retain_buffer, 0, SEEK_END); |
251 fseek(retain_buffer, 0, SEEK_END); |
252 fwrite(&retain_crc, sizeof(uint32_t), 1, retain_buffer); |
252 fwrite(&retain_crc, sizeof(retain_crc), 1, retain_buffer); |
253 |
253 |
254 /* Sync file buffer and close file. */ |
254 /* Sync file buffer and close file. */ |
255 #ifdef __WIN32 |
255 #ifdef __WIN32 |
256 fflush(retain_buffer); |
256 fflush(retain_buffer); |
257 #else |
257 #else |