diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2010-03-27 17:38:30 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2010-03-27 17:38:30 +0000 |
commit | 67584948974eebb93e87f30a417fc1bde5f73542 (patch) | |
tree | 0349fd2c1217b8842605ade74b436029f8c28fda /package/mtd/src | |
parent | 585198518e13b44120dcc30ac6f7707d6ddb2d7a (diff) | |
download | mtk-20170518-67584948974eebb93e87f30a417fc1bde5f73542.zip mtk-20170518-67584948974eebb93e87f30a417fc1bde5f73542.tar.gz mtk-20170518-67584948974eebb93e87f30a417fc1bde5f73542.tar.bz2 |
package/mtd: reuse existing crc32 stuff in the trx code
* patch by Bernhard Loos
* note: fixed compiler error on brcm47xx
SVN-Revision: 20523
Diffstat (limited to 'package/mtd/src')
-rw-r--r-- | package/mtd/src/crc32.h | 9 | ||||
-rw-r--r-- | package/mtd/src/trx.c | 34 |
2 files changed, 9 insertions, 34 deletions
diff --git a/package/mtd/src/crc32.h b/package/mtd/src/crc32.h index ee3145b..68f8ee4 100644 --- a/package/mtd/src/crc32.h +++ b/package/mtd/src/crc32.h @@ -7,7 +7,7 @@ extern const uint32_t crc32_table[256]; /* Return a 32-bit CRC of the contents of the buffer. */ - static inline uint32_t +static inline uint32_t crc32(uint32_t val, const void *ss, int len) { const unsigned char *s = ss; @@ -16,4 +16,11 @@ crc32(uint32_t val, const void *ss, int len) return val; } +static inline unsigned int crc32buf(char *buf, size_t len) +{ + return crc32(0xFFFFFFFF, buf, len); +} + + + #endif diff --git a/package/mtd/src/trx.c b/package/mtd/src/trx.c index 5457a36..f483175 100644 --- a/package/mtd/src/trx.c +++ b/package/mtd/src/trx.c @@ -31,6 +31,7 @@ #include <sys/ioctl.h> #include "mtd-api.h" #include "mtd.h" +#include "crc32.h" #define TRX_MAGIC 0x30524448 /* "HDR0" */ struct trx_header { @@ -41,39 +42,6 @@ struct trx_header { unsigned offsets[3]; /* Offsets of partitions from start of header */ }; -static unsigned long *crc32 = NULL; - -static void init_crc32() -{ - unsigned long crc; - unsigned long poly = 0xEDB88320L; - int n, bit; - - if (crc32) - return; - - crc32 = (unsigned long *) malloc(256 * sizeof(unsigned long)); - if (!crc32) { - perror("malloc"); - exit(1); - } - - for (n = 0; n < 256; n++) { - crc = (unsigned long) n; - for (bit = 0; bit < 8; bit++) - crc = (crc & 1) ? (poly ^ (crc >> 1)) : (crc >> 1); - crc32[n] = crc; - } -} - -static unsigned int crc32buf(char *buf, size_t len) -{ - unsigned int crc = 0xFFFFFFFF; - for (; len; len--, buf++) - crc = crc32[(crc ^ *buf) & 0xff] ^ (crc >> 8); - return crc; -} - int trx_fixup(int fd, const char *name) { |