Dont't stop if CRC-32 placeholder pattern is detected while not at end of file.

This commit is contained in:
Renaud 2021-07-14 16:21:26 +08:00
parent a9daade2fe
commit 9617178f41
1 changed files with 13 additions and 4 deletions

View File

@ -7,7 +7,7 @@
/* /*
** POLY32 is 0x04C11DB7 ** POLY32 is 0x04C11DB7
** Intialisation 0xFFFFFFFF ** Initialisation 0xFFFFFFFF
** High bit first (left shift) ** High bit first (left shift)
** 32 bit word input, little endian ** 32 bit word input, little endian
** crc = CRC32( crc, word) ** crc = CRC32( crc, word)
@ -162,7 +162,9 @@ static uint32_t check_word( uint32_t crc, unsigned char buf[ 4]) {
} }
int sign_file( char *filename) { static const unsigned mark = 0xDEC0ADDE ; /* DEADC0DE placeholder value */
static int sign_file( char *filename) {
FILE *fin, *fout ; FILE *fin, *fout ;
int cnt, filesize, outsize ; int cnt, filesize, outsize ;
uint32_t crc ; uint32_t crc ;
@ -186,8 +188,15 @@ int sign_file( char *filename) {
filesize = 0 ; filesize = 0 ;
while( !feof( fin)) { while( !feof( fin)) {
cnt = fread( buf, 1, sizeof buf, fin) ; cnt = fread( buf, 1, sizeof buf, fin) ;
if( *((unsigned *) buf) == 0xDEC0ADDE) /* DEADC0DE Placeholder */ while( cnt == 4 && *((unsigned *) buf) == mark) {
break ; /* DEADC0DE placeholder at EOF */
cnt = fread( buf, 1, sizeof buf, fin) ;
if( cnt != 0) {
filesize += 4 ;
crc = check_word( crc, (unsigned char *) &mark) ;
fwrite( &mark, 1, 4, fout) ;
}
}
filesize += cnt ; filesize += cnt ;
if( cnt != 4) { if( cnt != 4) {