|
@@ -162,7 +162,7 @@ int au_check_cksum_valid(int idx, long nbytes)
|
|
|
int au_check_header_valid(int idx, long nbytes)
|
|
|
{
|
|
|
image_header_t *hdr;
|
|
|
- unsigned long checksum;
|
|
|
+ unsigned long checksum, fsize;
|
|
|
|
|
|
hdr = (image_header_t *)LOAD_ADDR;
|
|
|
/* check the easy ones first */
|
|
@@ -205,7 +205,7 @@ int au_check_header_valid(int idx, long nbytes)
|
|
|
return -1;
|
|
|
}
|
|
|
if ((idx == IDX_ROOTFS) &&
|
|
|
- ( (hdr->ih_type != IH_TYPE_RAMDISK) || (hdr->ih_type != IH_TYPE_FILESYSTEM) )
|
|
|
+ ( (hdr->ih_type != IH_TYPE_RAMDISK) && (hdr->ih_type != IH_TYPE_FILESYSTEM) )
|
|
|
) {
|
|
|
printf ("Image %s wrong type\n", aufile[idx]);
|
|
|
ausize[idx] = 0;
|
|
@@ -213,8 +213,10 @@ int au_check_header_valid(int idx, long nbytes)
|
|
|
}
|
|
|
/* recycle checksum */
|
|
|
checksum = ntohl(hdr->ih_size);
|
|
|
- /* for kernel and app the image header must also fit into flash */
|
|
|
- if (idx != IDX_FIRMWARE)
|
|
|
+
|
|
|
+ fsize = checksum + sizeof(*hdr);
|
|
|
+ /* for kernel and ramdisk the image header must also fit into flash */
|
|
|
+ if (idx == IDX_KERNEL || hdr->ih_type == IH_TYPE_RAMDISK)
|
|
|
checksum += sizeof(*hdr);
|
|
|
|
|
|
/* check the size does not exceed space in flash. HUSH scripts */
|
|
@@ -224,7 +226,7 @@ int au_check_header_valid(int idx, long nbytes)
|
|
|
return -1;
|
|
|
}
|
|
|
/* Update with the real filesize */
|
|
|
- ausize[idx] = (idx == IDX_FIRMWARE ? checksum + sizeof(*hdr) : checksum);
|
|
|
+ ausize[idx] = fsize;
|
|
|
|
|
|
return checksum; /* return size to be written to flash */
|
|
|
}
|