mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-02-20 09:14:44 +02:00
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
This commit is contained in:
parent
c460c800ba
commit
60d74152dd
@ -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…
x
Reference in New Issue
Block a user