@ -24,6 +24,7 @@
# include <stdio.h>
# include <stdint.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
# ifndef __ASSEMBLY__
@ -77,19 +78,56 @@ extern unsigned char environment;
int main ( int argc , char * * argv )
{
# ifdef ENV_IS_EMBEDDED
unsigned char pad = 0x00 ;
uint32_t crc ;
unsigned char * envptr = & environment ,
* dataptr = envptr + ENV_HEADER_SIZE ;
unsigned int datasize = ENV_SIZE ;
unsigned int eoe ;
if ( argv [ 1 ] & & ! strncmp ( argv [ 1 ] , " --binary " , 8 ) ) {
int ipad = 0xff ;
if ( argv [ 1 ] [ 8 ] = = ' = ' )
sscanf ( argv [ 1 ] + 9 , " %i " , & ipad ) ;
pad = ipad ;
}
if ( pad ) {
/* find the end of env */
for ( eoe = 0 ; eoe < datasize - 1 ; + + eoe )
if ( ! dataptr [ eoe ] & & ! dataptr [ eoe + 1 ] ) {
eoe + = 2 ;
break ;
}
if ( eoe < datasize - 1 )
memset ( dataptr + eoe , pad , datasize - eoe ) ;
}
crc = crc32 ( 0 , dataptr , datasize ) ;
/* Check if verbose mode is activated passing a parameter to the program */
if ( argc > 1 ) {
printf ( " CRC32 from offset %08X to %08X of environment = %08X \n " ,
( unsigned int ) ( dataptr - envptr ) ,
( unsigned int ) ( dataptr - envptr ) + datasize ,
crc ) ;
if ( ! strncmp ( argv [ 1 ] , " --binary " , 8 ) ) {
int le = ( argc > 2 ? ! strcmp ( argv [ 2 ] , " le " ) : 1 ) ;
size_t i , start , end , step ;
if ( le ) {
start = 0 ;
end = ENV_HEADER_SIZE ;
step = 1 ;
} else {
start = ENV_HEADER_SIZE - 1 ;
end = - 1 ;
step = - 1 ;
}
for ( i = start ; i ! = end ; i + = step )
printf ( " %c " , ( crc & ( 0xFF < < ( i * 8 ) ) ) > > ( i * 8 ) ) ;
fwrite ( dataptr , 1 , datasize , stdout ) ;
} else {
printf ( " CRC32 from offset %08X to %08X of environment = %08X \n " ,
( unsigned int ) ( dataptr - envptr ) ,
( unsigned int ) ( dataptr - envptr ) + datasize ,
crc ) ;
}
} else {
printf ( " 0x%08X \n " , crc ) ;
}