package/mtd: reuse existing crc32 stuff in the trx code

* patch by Bernhard Loos
 * note: fixed compiler error on brcm47xx

SVN-Revision: 20523
master
Gabor Juhos 15 years ago
parent 585198518e
commit 6758494897
  1. 9
      package/mtd/src/crc32.h
  2. 34
      package/mtd/src/trx.c

@ -7,7 +7,7 @@ extern const uint32_t crc32_table[256];
/* Return a 32-bit CRC of the contents of the buffer. */ /* 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) crc32(uint32_t val, const void *ss, int len)
{ {
const unsigned char *s = ss; const unsigned char *s = ss;
@ -16,4 +16,11 @@ crc32(uint32_t val, const void *ss, int len)
return val; return val;
} }
static inline unsigned int crc32buf(char *buf, size_t len)
{
return crc32(0xFFFFFFFF, buf, len);
}
#endif #endif

@ -31,6 +31,7 @@
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include "mtd-api.h" #include "mtd-api.h"
#include "mtd.h" #include "mtd.h"
#include "crc32.h"
#define TRX_MAGIC 0x30524448 /* "HDR0" */ #define TRX_MAGIC 0x30524448 /* "HDR0" */
struct trx_header { struct trx_header {
@ -41,39 +42,6 @@ struct trx_header {
unsigned offsets[3]; /* Offsets of partitions from start of 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 int
trx_fixup(int fd, const char *name) trx_fixup(int fd, const char *name)
{ {

Loading…
Cancel
Save