lantiq: w303v has its rt2860 eep on the nor flash. tell compat-wireless how to use it
[openwrt.git] / tools / firmware-utils / src / lzma2eva.c
index 6424dde..0bc13fa 100644 (file)
 #include <stdlib.h>
 #include <zlib.h> /* crc32 */
 
-
-#define ARRAY_SIZE(x)  (sizeof(x) / sizeof((x)[0]))
-
 #define checksum_add32(csum, data) \
-  do { \
-    csum += (((data) >> 0)  & 0x000000FF); \
-    csum += (((data) >> 8)  & 0x000000FF); \
-    csum += (((data) >> 16) & 0x000000FF); \
-    csum += (((data) >> 24) & 0x000000FF); \
-  } while (0)
+  csum += ((uint8_t *)&data)[0]; \
+  csum += ((uint8_t *)&data)[1]; \
+  csum += ((uint8_t *)&data)[2]; \
+  csum += ((uint8_t *)&data)[3];
 
 void
 usage(void)
@@ -47,68 +42,10 @@ pexit(const char *msg)
   exit(1);
 }
 
-/* Read an 8bit value */
-static int fread_8(uint8_t *buf, FILE *fd)
-{
-  return (fread(buf, sizeof(*buf), 1, fd) == 1) ? 0 : -1;
-}
-
-/* Read a 32bit little endian value and convert to host endianness. */
-static int fread_le32(uint32_t *buf, FILE *fd)
-{
-  size_t count;
-  uint8_t tmp[4];
-  unsigned int i;
-
-  if (fread(tmp, sizeof(tmp), 1, fd) != 1)
-    return -1;
-  *buf = 0;
-  for (i = 0; i < ARRAY_SIZE(tmp); i++)
-    *buf |= (uint32_t)(tmp[i]) << (i * 8);
-
-  return 0;
-}
-
-/* Read a 64bit little endian value and convert to host endianness. */
-static int fread_le64(uint64_t *buf, FILE *fd)
-{
-  size_t count;
-  uint8_t tmp[8];
-  unsigned int i;
-
-  if (fread(tmp, sizeof(tmp), 1, fd) != 1)
-    return -1;
-  *buf = 0;
-  for (i = 0; i < ARRAY_SIZE(tmp); i++)
-    *buf |= (uint64_t)(tmp[i]) << (i * 8);
-
-  return 0;
-}
-
-/* Write an 8bit value */
-static int fwrite_8(uint8_t buf, FILE *fd)
-{
-  return (fwrite(&buf, sizeof(buf), 1, fd) == 1) ? 0 : -1;
-}
-
-/* Convert to little endian and write a 32bit value */
-static int fwrite_le32(uint32_t buf, FILE *fd)
-{
-  size_t count;
-  uint8_t tmp[4];
-  unsigned int i;
-
-  for (i = 0; i < ARRAY_SIZE(tmp); i++)
-    tmp[i] = buf >> (i * 8);
-  if (fwrite(tmp, sizeof(tmp), 1, fd) != 1)
-    return -1;
-
-  return 0;
-}
-
 int
 main(int argc, char *argv[])
 {
+
   const char *infile, *outfile;
   FILE *in, *out;
   static const uint8_t buf[4096];
@@ -130,6 +67,7 @@ main(int argc, char *argv[])
   uint32_t datasize32 = 0;
   uint32_t datacrc32 = crc32(0, 0, 0);
 
+  uint32_t zero = 0;
   uint32_t entry = 0;
 
   if (argc != 5)
@@ -149,43 +87,43 @@ main(int argc, char *argv[])
     pexit("fopen");
 
   /* read LZMA header */
-  if (fread_8(&properties, in))
+  if (1 != fread(&properties, sizeof properties, 1, in))
     pexit("fread");
-  if (fread_le32(&dictsize, in))
+  if (1 != fread(&dictsize, sizeof dictsize, 1, in))
     pexit("fread");
-  if (fread_le64(&datasize, in))
+  if (1 != fread(&datasize, sizeof datasize, 1, in))
     pexit("fread");
 
   /* write EVA header */
-  if (fwrite_le32(magic, out))
+  if (1 != fwrite(&magic, sizeof magic, 1, out))
     pexit("fwrite");
   if (fgetpos(out, &reclengthpos))
     pexit("fgetpos");
-  if (fwrite_le32(reclength, out))
+  if (1 != fwrite(&reclength, sizeof reclength, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(loadaddress, out))
+  if (1 != fwrite(&loadaddress, sizeof loadaddress, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(type, out))
+  if (1 != fwrite(&type, sizeof type, 1, out))
     pexit("fwrite");
 
   /* write EVA LZMA header */
   if (fgetpos(out, &compsizepos))
     pexit("fgetpos");
-  if (fwrite_le32(compsize, out))
+  if (1 != fwrite(&compsize, sizeof compsize, 1, out))
     pexit("fwrite");
   /* XXX check length */
   datasize32 = (uint32_t)datasize;
-  if (fwrite_le32(datasize32, out))
+  if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(datacrc32, out))
+  if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
     pexit("fwrite");
 
   /* write modified LZMA header */
-  if (fwrite_8(properties, out))
+  if (1 != fwrite(&properties, sizeof properties, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(dictsize, out))
+  if (1 != fwrite(&dictsize, sizeof dictsize, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(0, out))
+  if (1 != fwrite(&zero, 3, 1, out))
     pexit("fwrite");
 
   /* copy compressed data, calculate crc32 */
@@ -203,17 +141,17 @@ main(int argc, char *argv[])
   reclength = compsize + 24;
   if (fsetpos(out, &reclengthpos))
     pexit("fsetpos");
-  if (fwrite_le32(reclength, out))
+  if (1 != fwrite(&reclength, sizeof reclength, 1, out))
     pexit("fwrite");
 
   /* re-write EVA LZMA header including size and data crc */
   if (fsetpos(out, &compsizepos))
     pexit("fsetpos");
-  if (fwrite_le32(compsize, out))
+  if (1 != fwrite(&compsize, sizeof compsize, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(datasize32, out))
+  if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(datacrc32, out))
+  if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
     pexit("fwrite");
 
   /* calculate record checksum */
@@ -236,13 +174,13 @@ main(int argc, char *argv[])
     pexit("fseek");
 
   checksum = ~checksum + 1;
-  if (fwrite_le32(checksum, out))
+  if (1 != fwrite(&checksum, sizeof checksum, 1, out))
     pexit("fwrite");
 
   /* write entry record */
-  if (fwrite_le32(0, out))
+  if (1 != fwrite(&zero, sizeof zero, 1, out))
     pexit("fwrite");
-  if (fwrite_le32(entry, out))
+  if (1 != fwrite(&entry, sizeof entry, 1, out))
     pexit("fwrite");
 
   if (fclose(out))
This page took 0.032025 seconds and 4 git commands to generate.