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 | 9da0228c9e8067c2e199bb2ce8c8f1043a92f067 (patch) | |
tree | 6d283dec915f7aa958689cf98efbe6b46a3b4f18 /package/mtd | |
parent | 567def1d7f82ef990e678998fe33a0c02f61edc5 (diff) | |
download | upstream-9da0228c9e8067c2e199bb2ce8c8f1043a92f067.tar.gz upstream-9da0228c9e8067c2e199bb2ce8c8f1043a92f067.tar.bz2 upstream-9da0228c9e8067c2e199bb2ce8c8f1043a92f067.zip |
package/mtd: reuse existing crc32 stuff in the trx code
* patch by Bernhard Loos
* note: fixed compiler error on brcm47xx
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20523 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/mtd')
-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 ee3145bc15..68f8ee4feb 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 5457a365bb..f48317589c 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) { |