1#include <stdio.h>
2#include <stdlib.h>
3
4int main(int argc, char *argv[]) {
5 if (argc < 3) {
6 fprintf(stderr, "Usage: %s <input_file> <array_name>\n", argv[0]);
7 return 1;
8 }
9
10 const char *filename = argv[1];
11 const char *array_name = argv[2];
12
13 FILE *f = fopen(filename, "rb");
14 if (!f) {
15 perror("fopen");
16 return 1;
17 }
18
19 fseek(f, 0, SEEK_END);
20 long size = ftell(f);
21 rewind(f);
22
23 unsigned char *buffer = malloc(size);
24 if (!buffer) {
25 perror("malloc");
26 fclose(f);
27 return 1;
28 }
29
30 if (fread(buffer, 1, size, f) != (size_t)size) {
31 perror("fread");
32 free(buffer);
33 fclose(f);
34 return 1;
35 }
36
37 // Generate include guard
38 printf("#ifndef %s_H\n", array_name);
39 printf("#define %s_H\n\n", array_name);
40
41 printf("unsigned char %s[] = {\n", array_name);
42 for (long i = 0; i < size; i++) {
43 if (i % 12 == 0) printf("\t");
44 printf("0x%02x", buffer[i]);
45 if (i != size - 1) printf(", ");
46 if ((i + 1) % 12 == 0) printf("\n");
47 }
48 if (size % 12 != 0) printf("\n");
49 printf("};\n");
50 printf("unsigned int %s_len = %ld;\n", array_name, size);
51
52 printf("\n#endif // %s_H\n", array_name);
53
54 free(buffer);
55 fclose(f);
56 return 0;
57}