X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/82cd54f3ea9325bbd7958526f261ef6121896270..e0af17401fe72c1459dae34aa63a2933887fefac:/package/mtd/src/trx.c?ds=sidebyside diff --git a/package/mtd/src/trx.c b/package/mtd/src/trx.c index 5457a365b..7094ef62b 100644 --- a/package/mtd/src/trx.c +++ b/package/mtd/src/trx.c @@ -1,7 +1,7 @@ /* * trx.c * - * Copyright (C) 2005 Mike Baker + * Copyright (C) 2005 Mike Baker * Copyright (C) 2008 Felix Fietkau * * This program is free software; you can redistribute it and/or @@ -31,6 +31,7 @@ #include #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) { @@ -107,7 +75,6 @@ trx_fixup(int fd, const char *name) goto err; } - init_crc32(); scan = ptr + offsetof(struct trx_header, flag_version); trx->crc32 = crc32buf(scan, trx->len - (scan - ptr)); msync(ptr, sizeof(struct trx_header), MS_SYNC|MS_INVALIDATE);