aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils/src/lzma2eva.c
diff options
context:
space:
mode:
authorPetr Štetiar <ynezz@true.cz>2021-07-05 11:54:26 +0200
committerRafał Miłecki <rafal@milecki.pl>2021-10-05 16:20:10 +0200
commit8cc9a74a3f6bf363645efda6db417f8dadd3d844 (patch)
tree68f1648a077df8e49328f087eccaf94c2e47d1e8 /tools/firmware-utils/src/lzma2eva.c
parentf82c93b93c0a021921ac7a30ba6e7a090c7ddd1c (diff)
downloadupstream-8cc9a74a3f6bf363645efda6db417f8dadd3d844.tar.gz
upstream-8cc9a74a3f6bf363645efda6db417f8dadd3d844.tar.bz2
upstream-8cc9a74a3f6bf363645efda6db417f8dadd3d844.zip
firmware-utils: update to version 2021-10-05
Includes following changes: db65821f006c cmake: fix missing install target 3a0cfc856991 Add initial GitLab CI support 8f47adea6f87 Add missing includes for byte swap operations fbafae9f8037 Convert to CMake based project Additionaly moves source code into separate Git project repository and converts the package build to utilize CMake. Signed-off-by: Petr Štetiar <ynezz@true.cz> [rmilecki: rebase, update to the latest repo git & rm -r src] Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'tools/firmware-utils/src/lzma2eva.c')
-rw-r--r--tools/firmware-utils/src/lzma2eva.c177
1 files changed, 0 insertions, 177 deletions
diff --git a/tools/firmware-utils/src/lzma2eva.c b/tools/firmware-utils/src/lzma2eva.c
deleted file mode 100644
index f72ec74c19..0000000000
--- a/tools/firmware-utils/src/lzma2eva.c
+++ /dev/null
@@ -1,177 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- lzma2eva - convert lzma-compressed file to AVM EVA bootloader format
- Copyright (C) 2007 Enrik Berkhan <Enrik.Berkhan@inka.de>
-*/
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <zlib.h> /* crc32 */
-
-#define checksum_add32(csum, data) \
- csum += ((uint8_t *)&data)[0]; \
- csum += ((uint8_t *)&data)[1]; \
- csum += ((uint8_t *)&data)[2]; \
- csum += ((uint8_t *)&data)[3];
-
-void
-usage(void)
-{
- fprintf(stderr, "usage: lzma2eva <loadadddr> <entry> <lzmafile> <evafile>\n");
- exit(1);
-}
-
-void
-pexit(const char *msg)
-{
- perror(msg);
- exit(1);
-}
-
-int
-main(int argc, char *argv[])
-{
-
- const char *infile, *outfile;
- FILE *in, *out;
- static uint8_t buf[4096];
- size_t elems;
-
- uint8_t properties;
- uint32_t dictsize;
- uint64_t datasize;
-
- uint32_t magic = 0xfeed1281L;
- uint32_t reclength = 0;
- fpos_t reclengthpos;
- uint32_t loadaddress = 0;
- uint32_t type = 0x075a0201L; /* might be 7Z 2.1? */
- uint32_t checksum = 0;
-
- uint32_t compsize = 0;
- fpos_t compsizepos;
- uint32_t datasize32 = 0;
- uint32_t datacrc32 = crc32(0, 0, 0);
-
- uint32_t zero = 0;
- uint32_t entry = 0;
-
- if (argc != 5)
- usage();
-
- /* "parse" command line */
- loadaddress = strtoul(argv[1], 0, 0);
- entry = strtoul(argv[2], 0, 0);
- infile = argv[3];
- outfile = argv[4];
-
- in = fopen(infile, "rb");
- if (!in)
- pexit("fopen");
- out = fopen(outfile, "w+b");
- if (!out)
- pexit("fopen");
-
- /* read LZMA header */
- if (1 != fread(&properties, sizeof properties, 1, in))
- pexit("fread");
- if (1 != fread(&dictsize, sizeof dictsize, 1, in))
- pexit("fread");
- if (1 != fread(&datasize, sizeof datasize, 1, in))
- pexit("fread");
-
- /* write EVA header */
- if (1 != fwrite(&magic, sizeof magic, 1, out))
- pexit("fwrite");
- if (fgetpos(out, &reclengthpos))
- pexit("fgetpos");
- if (1 != fwrite(&reclength, sizeof reclength, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&loadaddress, sizeof loadaddress, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&type, sizeof type, 1, out))
- pexit("fwrite");
-
- /* write EVA LZMA header */
- if (fgetpos(out, &compsizepos))
- pexit("fgetpos");
- if (1 != fwrite(&compsize, sizeof compsize, 1, out))
- pexit("fwrite");
- /* XXX check length */
- datasize32 = (uint32_t)datasize;
- if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
- pexit("fwrite");
-
- /* write modified LZMA header */
- if (1 != fwrite(&properties, sizeof properties, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&dictsize, sizeof dictsize, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&zero, 3, 1, out))
- pexit("fwrite");
-
- /* copy compressed data, calculate crc32 */
- while (0 < (elems = fread(&buf, sizeof buf[0], sizeof buf, in))) {
- compsize += elems;
- if (elems != fwrite(&buf, sizeof buf[0], elems, out))
- pexit("fwrite");
- datacrc32 = crc32(datacrc32, buf, elems);
- }
- if (ferror(in))
- pexit("fread");
- fclose(in);
-
- /* re-write record length */
- reclength = compsize + 24;
- if (fsetpos(out, &reclengthpos))
- pexit("fsetpos");
- 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 (1 != fwrite(&compsize, sizeof compsize, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
- pexit("fwrite");
-
- /* calculate record checksum */
- checksum += reclength;
- checksum += loadaddress;
- checksum_add32(checksum, type);
- checksum_add32(checksum, compsize);
- checksum_add32(checksum, datasize32);
- checksum_add32(checksum, datacrc32);
- if (fseek(out, 0, SEEK_CUR))
- pexit("fseek");
- while (0 < (elems = fread(&buf, sizeof buf[0], sizeof buf, out))) {
- size_t i;
- for (i = 0; i < elems; ++i)
- checksum += buf[i];
- }
- if (ferror(out))
- pexit("fread");
- if (fseek(out, 0, SEEK_CUR))
- pexit("fseek");
-
- checksum = ~checksum + 1;
- if (1 != fwrite(&checksum, sizeof checksum, 1, out))
- pexit("fwrite");
-
- /* write entry record */
- if (1 != fwrite(&zero, sizeof zero, 1, out))
- pexit("fwrite");
- if (1 != fwrite(&entry, sizeof entry, 1, out))
- pexit("fwrite");
-
- if (fclose(out))
- pexit("fclose");
-
- return 0;
-}