9
0
Fork 0

commands/crc: assert newline after output with big offsets

This fixes

	barebox@Very long board name:/ crc32 -f /dev/mem 0x83f00000+0xfff
	CRC32 for /dev/mem 0x83fff000 ... 0x83fffffe ==> 0xa080584bbarebox@Very long board name:/

The problem here was that the return value of
lseek(fd, 0x83f00000, SEEK_SET) (which is 0x83f00000) was casted to an
int (which is -2081423360), returned to do_crc and interpreted as
error there without yielding another error message.

This also makes

	crc32 -f /dev/mem 0xffffffff+0x1

die on a NULL pointer exception instead of reporting:

	lseek: No error

:-)

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Uwe Kleine-König 2012-06-27 11:08:33 +02:00 committed by Sascha Hauer
parent 2f6b1f7690
commit b78e5fe9f3
1 changed files with 5 additions and 2 deletions

View File

@ -47,9 +47,12 @@ static int file_crc(char* filename, ulong start, ulong size, ulong *crc,
}
if (start > 0) {
ret = lseek(fd, start, SEEK_SET);
if (ret == -1) {
off_t lseek_ret;
errno = 0;
lseek_ret = lseek(fd, start, SEEK_SET);
if (lseek_ret == (off_t)-1 && errno) {
perror("lseek");
ret = -1;
goto out;
}
}