mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-09 13:12:37 -05:00
rolo: simplify parsing scramble header in load_firmware()
The standard load_firmware() function is used on targets which use the "scramble -add" method for generating Rockbox binaries. While it tries to be a bit more generic and allows the CRC/data offsets to be placed anywhere in the file, there are no targets which actually need this flexibility, because they are all using plain old "scramble -add". So we can actually simplify load_firmware() and remove defines from the target headers. All the targets used CRC offset = 0 and data offset = 8, except for a few which I assume never supported ROLO or were never tested -- eg. samsungyh820: the CRC and data offsets cannot both be 0. The actual motivation for this is removing the calls to lseek(), which can help make bootloaders a tiny bit smaller, as lseek is typically not used anywhere else in bootloaders. Change-Id: Ic2d01e5b75a32e88363f085e3e839146a0710bf4
This commit is contained in:
parent
7dc8d754a2
commit
b0a8cacd1d
92 changed files with 4 additions and 532 deletions
|
|
@ -58,16 +58,15 @@ static int load_firmware_filename(unsigned char* buf,
|
|||
goto end;
|
||||
}
|
||||
|
||||
lseek(fd, FIRMWARE_OFFSET_FILE_CRC, SEEK_SET);
|
||||
|
||||
if (read(fd, &chksum, 4) < 4)
|
||||
/* read 32-bit checksum followed by 4-byte model name,
|
||||
* this is the "scramble -add" header written by tools/scramble */
|
||||
if (read(fd, buf, 8) < 8)
|
||||
{
|
||||
ret = EREAD_CHKSUM_FAILED;
|
||||
goto end;
|
||||
}
|
||||
chksum = betoh32(chksum); /* Rockbox checksums are big-endian */
|
||||
|
||||
lseek(fd, FIRMWARE_OFFSET_FILE_DATA, SEEK_SET);
|
||||
chksum = load_be32(buf); /* Rockbox checksums are big-endian */
|
||||
|
||||
if (read(fd, buf, len) < len)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue