diff options
| -rw-r--r-- | common/cmd_nand.c | 23 | 
1 files changed, 16 insertions, 7 deletions
| diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 886212aa0..a66f569a4 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -42,6 +42,7 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)  	int i;  	u_char *datbuf, *oobbuf, *p;  	static loff_t last; +	int ret = 0;  	if (repeat)  		off = last + nand->writesize; @@ -49,11 +50,17 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)  	last = off;  	datbuf = memalign(ARCH_DMA_MINALIGN, nand->writesize); -	oobbuf = memalign(ARCH_DMA_MINALIGN, nand->oobsize); -	if (!datbuf || !oobbuf) { +	if (!datbuf) {  		puts("No memory for page buffer\n");  		return 1;  	} + +	oobbuf = memalign(ARCH_DMA_MINALIGN, nand->oobsize); +	if (!oobbuf) { +		puts("No memory for page buffer\n"); +		ret = 1; +		goto free_dat; +	}  	off &= ~(nand->writesize - 1);  	loff_t addr = (loff_t) off;  	struct mtd_oob_ops ops; @@ -66,9 +73,8 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)  	i = mtd_read_oob(nand, addr, &ops);  	if (i < 0) {  		printf("Error (%d) reading page %08lx\n", i, off); -		free(datbuf); -		free(oobbuf); -		return 1; +		ret = 1; +		goto free_all;  	}  	printf("Page %08lx dump:\n", off);  	i = nand->writesize >> 4; @@ -91,10 +97,13 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)  		       p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);  		p += 8;  	} -	free(datbuf); + +free_all:  	free(oobbuf); +free_dat: +	free(datbuf); -	return 0; +	return ret;  }  /* ------------------------------------------------------------------------- */ |