diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2011-02-12 13:17:47 +0000 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2011-02-12 13:17:47 +0000 |
commit | e08740c7476ad87969b8068b4f4da49f9db946c9 (patch) | |
tree | 58338ed9287a95cca4323215c7878a8d01d1ac6b /tools/firmware-utils/src/trx2edips.c | |
parent | 8dbb2ee6f2eda1e9942f3c4b9d625fca0e646f9d (diff) | |
download | openwrt-e08740c7476ad87969b8068b4f4da49f9db946c9.tar.gz openwrt-e08740c7476ad87969b8068b4f4da49f9db946c9.tar.bz2 openwrt-e08740c7476ad87969b8068b4f4da49f9db946c9.zip |
brcm47xx: fix error when build firmware on x86_64 host (closes #7672)
SVN-Revision: 25472
Diffstat (limited to 'tools/firmware-utils/src/trx2edips.c')
-rw-r--r-- | tools/firmware-utils/src/trx2edips.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/tools/firmware-utils/src/trx2edips.c b/tools/firmware-utils/src/trx2edips.c index 9606bd8512..378be2789e 100644 --- a/tools/firmware-utils/src/trx2edips.c +++ b/tools/firmware-utils/src/trx2edips.c @@ -23,8 +23,8 @@ struct trx_header { -#define EDIMAX_PS16 0x36315350 -#define EDIMAX_HDR_LEN 0xc +#define EDIMAX_PS16 0x36315350 /* "PS16" */ +#define EDIMAX_HDR_LEN 0xc /**********************************************************************/ @@ -94,9 +94,9 @@ int main(int argc, char *argv[]) FILE *fpIn = NULL; FILE *fpOut = NULL; long nImgSize; - uint32_t sign = EDIMAX_PS16; /* signature for header */ - uint32_t start_addr = 0x80500000; /* start address but doesn't seems to be used... */ - uint32_t length; /* length of data, not used too ...*/ + uint32_t sign = EDIMAX_PS16; /* signature for header */ + uint32_t start_addr = 0x80500000; /* start address but doesn't seems to be used... */ + uint32_t length; /* length of data, not used too ...*/ size_t res; char *buf; @@ -113,16 +113,18 @@ int main(int argc, char *argv[]) fprintf(stderr, "Unable to open %s\n", argv[1]); return EXIT_FAILURE; } + /* compute the length of the file */ fseek(fpIn, 0, SEEK_END); length = ftell(fpIn); - + /* alloc enough memory to store the file */ buf = (char *)malloc(length); if (!buf) { fprintf(stderr, "malloc of buffers failed\n"); return EXIT_FAILURE; } - + rewind(fpIn); + /* read the whole file*/ res = fread(buf, 1, length, fpIn); p = (struct trx_header *)buf; @@ -140,11 +142,12 @@ int main(int argc, char *argv[]) } /* make the 3 partition beeing 12 bytes closer from the header */ memcpy(buf + p->offsets[2] - EDIMAX_HDR_LEN, buf + p->offsets[2], length - p->offsets[2]); + /* recompute the crc32 check */ p->crc32 = crc32buf((char *) &p->flag_version, length - offsetof(struct trx_header, flag_version)); - - fwrite(&sign, sizeof(long), 1, fpOut); - fwrite(&length, sizeof(long), 1, fpOut); - fwrite(&start_addr, sizeof(long), 1, fpOut); + /* write the modified file */ + fwrite(&sign, sizeof(uint32_t), 1, fpOut); + fwrite(&length, sizeof(uint32_t), 1, fpOut); + fwrite(&start_addr, sizeof(uint32_t), 1, fpOut); fwrite(buf, sizeof(char), length, fpOut); fclose(fpOut); } |