diff options
Diffstat (limited to 'cmd/mem.c')
| -rw-r--r-- | cmd/mem.c | 30 | 
1 files changed, 18 insertions, 12 deletions
| diff --git a/cmd/mem.c b/cmd/mem.c index 575893c18df..190e2b94a7d 100644 --- a/cmd/mem.c +++ b/cmd/mem.c @@ -53,7 +53,8 @@ static ulong	dp_last_length = 0x40;  static ulong	mm_last_addr, mm_last_size;  static	ulong	base_address = 0; -#ifdef CONFIG_MEM_SEARCH +#ifdef CONFIG_CMD_MEM_SEARCH +static ulong dp_last_ms_length;  static u8 search_buf[64];  static uint search_len;  #endif @@ -367,7 +368,7 @@ static int do_mem_cp(struct cmd_tbl *cmdtp, int flag, int argc,  	return 0;  } -#ifdef CONFIG_MEM_SEARCH +#ifdef CONFIG_CMD_MEM_SEARCH  static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  			 char *const argv[])  { @@ -377,6 +378,7 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  	ulong last_pos;		/* Offset of last match in 'size' units*/  	ulong last_addr;	/* Address of last displayed line */  	int limit = 10; +	int used_len;  	int count;  	int size;  	int i; @@ -384,12 +386,12 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  	/* We use the last specified parameters, unless new ones are entered */  	addr = dp_last_addr;  	size = dp_last_size; -	length = dp_last_length; +	length = dp_last_ms_length;  	if (argc < 3)  		return CMD_RET_USAGE; -	if ((!flag & CMD_FLAG_REPEAT)) { +	if (!(flag & CMD_FLAG_REPEAT)) {  		/*  		 * Check for a size specification.  		 * Defaults to long if no or incorrect specification. @@ -398,7 +400,8 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  		if (size < 0 && size != -2 /* string */)  			return 1; -		argc--; argv++; +		argc--; +		argv++;  		while (argc && *argv[0] == '-') {  			int ch = argv[0][1]; @@ -408,7 +411,8 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  				limit = simple_strtoul(argv[0] + 2, NULL, 16);  			else  				return CMD_RET_USAGE; -			argc--; argv++; +			argc--; +			argv++;  		}  		/* Address is specified since argc > 1 */ @@ -421,7 +425,7 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  		/* Read the bytes to search for */  		end = search_buf + sizeof(search_buf);  		for (i = 2, ptr = search_buf; i < argc && ptr < end; i++) { -			if (SUPPORT_64BIT_DATA && size == 8) { +			if (MEM_SUPPORT_64BIT_DATA && size == 8) {  				u64 val = simple_strtoull(argv[i], NULL, 16);  				*(u64 *)ptr = val; @@ -460,7 +464,8 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  	last_pos = 0;  	last_addr = 0;  	count = 0; -	for (offset = 0; offset <= bytes - search_len && count < limit; +	for (offset = 0; +	     offset < bytes && offset <= bytes - search_len && count < limit;  	     offset += size) {  		void *ptr = buf + offset; @@ -495,9 +500,10 @@ static int do_mem_search(struct cmd_tbl *cmdtp, int flag, int argc,  	unmap_sysmem(buf); -	dp_last_addr = addr + offset / size; +	used_len = offset / size; +	dp_last_addr = addr + used_len;  	dp_last_size = size; -	dp_last_length = length - offset / size; +	dp_last_ms_length = length < used_len ? 0 : length - used_len;  	return count ? 0 : CMD_RET_FAILURE;  } @@ -1337,13 +1343,13 @@ U_BOOT_CMD(  	"[.b, .w, .l" HELP_Q "] addr1 addr2 count"  ); -#ifdef CONFIG_MEM_SEARCH +#ifdef CONFIG_CMD_MEM_SEARCH  /**************************************************/  U_BOOT_CMD(  	ms,	255,	1,	do_mem_search,  	"memory search",  	"[.b, .w, .l" HELP_Q ", .s] [-q | -<n>] address #-of-objects <value>..." -	"  -q = quiet, -l<val> = match limit" : +	"  -q = quiet, -l<val> = match limit"  );  #endif | 
