revert r18760 since it prevents people from building working eva images
SVN-Revision: 20437
This commit is contained in:
parent
4ea6e1c968
commit
5d2105af23
1 changed files with 26 additions and 88 deletions
|
@ -22,16 +22,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <zlib.h> /* crc32 */
|
#include <zlib.h> /* crc32 */
|
||||||
|
|
||||||
|
|
||||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
|
||||||
|
|
||||||
#define checksum_add32(csum, data) \
|
#define checksum_add32(csum, data) \
|
||||||
do { \
|
csum += ((uint8_t *)&data)[0]; \
|
||||||
csum += (((data) >> 0) & 0x000000FF); \
|
csum += ((uint8_t *)&data)[1]; \
|
||||||
csum += (((data) >> 8) & 0x000000FF); \
|
csum += ((uint8_t *)&data)[2]; \
|
||||||
csum += (((data) >> 16) & 0x000000FF); \
|
csum += ((uint8_t *)&data)[3];
|
||||||
csum += (((data) >> 24) & 0x000000FF); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
void
|
void
|
||||||
usage(void)
|
usage(void)
|
||||||
|
@ -47,68 +42,10 @@ pexit(const char *msg)
|
||||||
exit(1);
|
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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
||||||
const char *infile, *outfile;
|
const char *infile, *outfile;
|
||||||
FILE *in, *out;
|
FILE *in, *out;
|
||||||
static const uint8_t buf[4096];
|
static const uint8_t buf[4096];
|
||||||
|
@ -130,6 +67,7 @@ main(int argc, char *argv[])
|
||||||
uint32_t datasize32 = 0;
|
uint32_t datasize32 = 0;
|
||||||
uint32_t datacrc32 = crc32(0, 0, 0);
|
uint32_t datacrc32 = crc32(0, 0, 0);
|
||||||
|
|
||||||
|
uint32_t zero = 0;
|
||||||
uint32_t entry = 0;
|
uint32_t entry = 0;
|
||||||
|
|
||||||
if (argc != 5)
|
if (argc != 5)
|
||||||
|
@ -149,43 +87,43 @@ main(int argc, char *argv[])
|
||||||
pexit("fopen");
|
pexit("fopen");
|
||||||
|
|
||||||
/* read LZMA header */
|
/* read LZMA header */
|
||||||
if (fread_8(&properties, in))
|
if (1 != fread(&properties, sizeof properties, 1, in))
|
||||||
pexit("fread");
|
pexit("fread");
|
||||||
if (fread_le32(&dictsize, in))
|
if (1 != fread(&dictsize, sizeof dictsize, 1, in))
|
||||||
pexit("fread");
|
pexit("fread");
|
||||||
if (fread_le64(&datasize, in))
|
if (1 != fread(&datasize, sizeof datasize, 1, in))
|
||||||
pexit("fread");
|
pexit("fread");
|
||||||
|
|
||||||
/* write EVA header */
|
/* write EVA header */
|
||||||
if (fwrite_le32(magic, out))
|
if (1 != fwrite(&magic, sizeof magic, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fgetpos(out, &reclengthpos))
|
if (fgetpos(out, &reclengthpos))
|
||||||
pexit("fgetpos");
|
pexit("fgetpos");
|
||||||
if (fwrite_le32(reclength, out))
|
if (1 != fwrite(&reclength, sizeof reclength, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(loadaddress, out))
|
if (1 != fwrite(&loadaddress, sizeof loadaddress, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(type, out))
|
if (1 != fwrite(&type, sizeof type, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* write EVA LZMA header */
|
/* write EVA LZMA header */
|
||||||
if (fgetpos(out, &compsizepos))
|
if (fgetpos(out, &compsizepos))
|
||||||
pexit("fgetpos");
|
pexit("fgetpos");
|
||||||
if (fwrite_le32(compsize, out))
|
if (1 != fwrite(&compsize, sizeof compsize, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
/* XXX check length */
|
/* XXX check length */
|
||||||
datasize32 = (uint32_t)datasize;
|
datasize32 = (uint32_t)datasize;
|
||||||
if (fwrite_le32(datasize32, out))
|
if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(datacrc32, out))
|
if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* write modified LZMA header */
|
/* write modified LZMA header */
|
||||||
if (fwrite_8(properties, out))
|
if (1 != fwrite(&properties, sizeof properties, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(dictsize, out))
|
if (1 != fwrite(&dictsize, sizeof dictsize, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(0, out))
|
if (1 != fwrite(&zero, 3, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* copy compressed data, calculate crc32 */
|
/* copy compressed data, calculate crc32 */
|
||||||
|
@ -203,17 +141,17 @@ main(int argc, char *argv[])
|
||||||
reclength = compsize + 24;
|
reclength = compsize + 24;
|
||||||
if (fsetpos(out, &reclengthpos))
|
if (fsetpos(out, &reclengthpos))
|
||||||
pexit("fsetpos");
|
pexit("fsetpos");
|
||||||
if (fwrite_le32(reclength, out))
|
if (1 != fwrite(&reclength, sizeof reclength, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* re-write EVA LZMA header including size and data crc */
|
/* re-write EVA LZMA header including size and data crc */
|
||||||
if (fsetpos(out, &compsizepos))
|
if (fsetpos(out, &compsizepos))
|
||||||
pexit("fsetpos");
|
pexit("fsetpos");
|
||||||
if (fwrite_le32(compsize, out))
|
if (1 != fwrite(&compsize, sizeof compsize, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(datasize32, out))
|
if (1 != fwrite(&datasize32, sizeof datasize32, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(datacrc32, out))
|
if (1 != fwrite(&datacrc32, sizeof datacrc32, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* calculate record checksum */
|
/* calculate record checksum */
|
||||||
|
@ -236,13 +174,13 @@ main(int argc, char *argv[])
|
||||||
pexit("fseek");
|
pexit("fseek");
|
||||||
|
|
||||||
checksum = ~checksum + 1;
|
checksum = ~checksum + 1;
|
||||||
if (fwrite_le32(checksum, out))
|
if (1 != fwrite(&checksum, sizeof checksum, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
/* write entry record */
|
/* write entry record */
|
||||||
if (fwrite_le32(0, out))
|
if (1 != fwrite(&zero, sizeof zero, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
if (fwrite_le32(entry, out))
|
if (1 != fwrite(&entry, sizeof entry, 1, out))
|
||||||
pexit("fwrite");
|
pexit("fwrite");
|
||||||
|
|
||||||
if (fclose(out))
|
if (fclose(out))
|
||||||
|
|
Loading…
Reference in a new issue