On Sun, 30 Oct 2011 23:57:41 +0100
openwrt-comm...@openwrt.org wrote:

> Author: acinonyx
> Date: 2011-10-30 23:57:41 +0100 (Sun, 30 Oct 2011)
> New Revision: 28688

Just a few comments...

> --- trunk/tools/firmware-utils/src/mkedimaximg.c                              
> (rev 0)
> +++ trunk/tools/firmware-utils/src/mkedimaximg.c      2011-10-30 22:57:41 UTC 
> (rev 28688)

> +#if (__BYTE_ORDER == __LITTLE_ENDIAN)
> +#  define HOST_TO_LE16(x)    (x)
> +#  define HOST_TO_LE32(x)    (x)
> +#else
> +#  define HOST_TO_LE16(x)    bswap_16(x)
> +#  define HOST_TO_LE32(x)    bswap_32(x)
> +#endif
> +
> +struct header
> +{
> +    unsigned char sign[4];
> +    unsigned int start;
> +    unsigned int flash;
> +    unsigned char model[4];
> +    unsigned int size;
> +} __attribute__ ((packed));

> +static unsigned short fwcsum (struct buf *buf) {
> +    int i;
> +    unsigned short ret = 0;
> +
> +    for (i = 0; i < buf->size / 2; i++)
> +     ret -= ((unsigned short *) buf->start)[i];

It seems you need
ret -= LE16_TO_HOST(((unsigned short *) buf->start)[i]);
to be endianness safe.

> +    if (header.sign == NULL) {
> +     fprintf(stderr, "no signature specified\n");
> +     usage(EXIT_FAILURE);
> +    }
> +
> +    if (header.model == NULL) {
> +     fprintf(stderr, "no model specified\n");
> +     usage(EXIT_FAILURE);
> +    }

You are actually comparing arrays to NULL here. Seems an odd thing to do.
You probably want
if (!header.sign[0])
and
if (!header.model[0])
That ought to be good enough in this case.

-- 
Greetings, Michael.
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to