aboutsummaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
authorGabor Juhos <juhosg@openwrt.org>2010-03-27 17:38:30 +0000
committerGabor Juhos <juhosg@openwrt.org>2010-03-27 17:38:30 +0000
commit9da0228c9e8067c2e199bb2ce8c8f1043a92f067 (patch)
tree6d283dec915f7aa958689cf98efbe6b46a3b4f18 /package
parent567def1d7f82ef990e678998fe33a0c02f61edc5 (diff)
downloadupstream-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')
-rw-r--r--package/mtd/src/crc32.h9
-rw-r--r--package/mtd/src/trx.c34
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)
{