0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <stdlib.h>
0014 #include <stdio.h>
0015 #include <string.h>
0016 #include <inttypes.h>
0017 #include <tools/le_byteshift.h>
0018
0019 int main(int argc, char *argv[])
0020 {
0021 uint32_t olen;
0022 long ilen;
0023 FILE *f = NULL;
0024 int retval = 1;
0025
0026 if (argc < 2) {
0027 fprintf(stderr, "Usage: %s compressed_file\n", argv[0]);
0028 goto bail;
0029 }
0030
0031
0032
0033 f = fopen(argv[1], "r");
0034 if (!f) {
0035 perror(argv[1]);
0036 goto bail;
0037 }
0038
0039
0040 if (fseek(f, -4L, SEEK_END)) {
0041 perror(argv[1]);
0042 }
0043
0044 if (fread(&olen, sizeof(olen), 1, f) != 1) {
0045 perror(argv[1]);
0046 goto bail;
0047 }
0048
0049 ilen = ftell(f);
0050 olen = get_unaligned_le32(&olen);
0051
0052 printf(".section \".rodata..compressed\",\"a\",@progbits\n");
0053 printf(".globl z_input_len\n");
0054 printf("z_input_len = %lu\n", ilen);
0055 printf(".globl z_output_len\n");
0056 printf("z_output_len = %lu\n", (unsigned long)olen);
0057
0058 printf(".globl input_data, input_data_end\n");
0059 printf("input_data:\n");
0060 printf(".incbin \"%s\"\n", argv[1]);
0061 printf("input_data_end:\n");
0062
0063 printf(".section \".rodata\",\"a\",@progbits\n");
0064 printf(".globl input_len\n");
0065 printf("input_len:\n\t.long %lu\n", ilen);
0066 printf(".globl output_len\n");
0067 printf("output_len:\n\t.long %lu\n", (unsigned long)olen);
0068
0069 retval = 0;
0070 bail:
0071 if (f)
0072 fclose(f);
0073 return retval;
0074 }