This commit is contained in:
parent
737dda2960
commit
37230435aa
@ -528,7 +528,7 @@ xtchain_build()
|
||||
for EXEC in dlltool ld objdump; do
|
||||
ln -sf ../${GENERIC}/bin/${EXEC}-wrapper ${BINDIR}/bin/${ARCH}-w64-mingw32-${EXEC}
|
||||
done
|
||||
for EXEC in exetool windres xtcspecc; do
|
||||
for EXEC in bin2c exetool windres xtcspecc; do
|
||||
if [ ! -e ${BINDIR}/bin/${EXEC} ]; then
|
||||
gcc ${WRKDIR}/tools/${EXEC}.c -o ${BINDIR}/bin/${EXEC}
|
||||
fi
|
||||
|
74
tools/bin2c.c
Normal file
74
tools/bin2c.c
Normal file
@ -0,0 +1,74 @@
|
||||
/**
|
||||
* PROJECT: XTchain
|
||||
* LICENSE: See COPYING.md in the top level directory
|
||||
* FILE: tools/bin2c.c
|
||||
* DESCRIPTION: Binary to C converter
|
||||
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
|
||||
*/
|
||||
|
||||
#include "xtchain.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
/* Check for proper number of arguments */
|
||||
if(argc != 4)
|
||||
{
|
||||
printf("Usage: %s <input binary> <output file> <structure name>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Open the input binary file in binary mode */
|
||||
FILE *inputFile = fopen(argv[1], "rb");
|
||||
if(inputFile == NULL)
|
||||
{
|
||||
printf("Error: unable to open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Open the destination source code file in text mode */
|
||||
FILE *outputFile = fopen(argv[2], "w");
|
||||
if(outputFile == NULL)
|
||||
{
|
||||
printf("Error: unable to open file %s\n", argv[2]);
|
||||
fclose(inputFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Get the size of the binary file */
|
||||
fseek(inputFile, 0, SEEK_END);
|
||||
long binSize = ftell(inputFile);
|
||||
rewind(inputFile);
|
||||
|
||||
/* Allocate memory for the binary data */
|
||||
unsigned char *binData = (unsigned char *)malloc(binSize);
|
||||
if(binData == NULL)
|
||||
{
|
||||
printf("Error: unable to allocate memory for binary data\n");
|
||||
fclose(inputFile);
|
||||
fclose(outputFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Read the binary data into memory */
|
||||
fread(binData, sizeof(unsigned char), binSize, inputFile);
|
||||
|
||||
/* Write the C structure to the header file */
|
||||
fprintf(outputFile, "unsigned char %s[] = {", argv[3]);
|
||||
for(int i = 0; i < binSize; i++)
|
||||
{
|
||||
fprintf(outputFile, "0x%02X", binData[i]);
|
||||
if(i < binSize - 1)
|
||||
{
|
||||
fprintf(outputFile, ",");
|
||||
}
|
||||
}
|
||||
fprintf(outputFile, "};\nunsigned int %s_size = %ld;\n", argv[3], binSize);
|
||||
free(binData);
|
||||
|
||||
/* Close all open files */
|
||||
fclose(inputFile);
|
||||
fclose(outputFile);
|
||||
|
||||
printf("Binary data converted to C structure successfully.\n");
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user