mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	firmware-utils/wndr3700: allow to specify image magic via command line
SVN-Revision: 24980
This commit is contained in:
		
							parent
							
								
									3c43d6fb30
								
							
						
					
					
						commit
						e116785f27
					
				@ -37,7 +37,10 @@
 | 
			
		||||
 | 
			
		||||
#define BPB 8 /* bits/byte */
 | 
			
		||||
 | 
			
		||||
#define WNDR3700_MAGIC_LEN	4
 | 
			
		||||
 | 
			
		||||
static uint32_t crc32[1<<BPB];
 | 
			
		||||
static char *magic = "3700";
 | 
			
		||||
 | 
			
		||||
static void init_crc32()
 | 
			
		||||
{
 | 
			
		||||
@ -64,7 +67,7 @@ static uint32_t crc32buf(unsigned char *buf, size_t len)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct header {
 | 
			
		||||
    uint32_t magic;
 | 
			
		||||
    unsigned char magic[WNDR3700_MAGIC_LEN];
 | 
			
		||||
    uint32_t crc;
 | 
			
		||||
    unsigned char stuff[56];
 | 
			
		||||
};
 | 
			
		||||
@ -74,7 +77,7 @@ static void usage(const char *) __attribute__ (( __noreturn__ ));
 | 
			
		||||
static void usage(const char *mess)
 | 
			
		||||
{
 | 
			
		||||
	fprintf(stderr, "Error: %s\n", mess);
 | 
			
		||||
	fprintf(stderr, "Usage: wndr3700 input_file output_file\n");
 | 
			
		||||
	fprintf(stderr, "Usage: wndr3700 input_file output_file [magic]\n");
 | 
			
		||||
	fprintf(stderr, "\n");
 | 
			
		||||
	exit(1);
 | 
			
		||||
}
 | 
			
		||||
@ -90,9 +93,17 @@ int main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	// verify parameters
 | 
			
		||||
 | 
			
		||||
	if (argc != 3)
 | 
			
		||||
	if (argc < 3)
 | 
			
		||||
		usage("wrong number of arguments");
 | 
			
		||||
 | 
			
		||||
	if (argc > 3)
 | 
			
		||||
		magic = argv[3];
 | 
			
		||||
 | 
			
		||||
	if (strlen(magic) != WNDR3700_MAGIC_LEN) {
 | 
			
		||||
		fprintf(stderr, "Invalid magic: '%s'\n", magic);
 | 
			
		||||
		exit(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// mmap input_file
 | 
			
		||||
	if ((fd = open(argv[1], O_RDONLY))  < 0
 | 
			
		||||
	|| (len = lseek(fd, 0, SEEK_END)) < 0
 | 
			
		||||
@ -110,7 +121,7 @@ int main(int argc, char **argv)
 | 
			
		||||
        // preload header
 | 
			
		||||
        memcpy(&header, input_file, sizeof(header));
 | 
			
		||||
 | 
			
		||||
        header.magic = htonl(0x33373030); /* 3700 in ascii */
 | 
			
		||||
	memcpy(header.magic, magic, WNDR3700_MAGIC_LEN);
 | 
			
		||||
	header.crc = 0;
 | 
			
		||||
 | 
			
		||||
	// create a firmware image in memory and copy the input_file to it
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user