mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-25 01:58:13 +01:00 
			
		
		
		
	stdlib.h is the header for malloc since at least c89/c90.
Previously this would fail to build on OpenBSD and fallback to the wrong
header:
In file included from u-boot/tools/file2include.c:21:
u-boot/include/malloc.h:875:5: error: function-like macro
      'CONFIG_IS_ENABLED' is not defined
Signed-off-by: Jonathan Gray <jsg@jsg.id.au>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
		
	
			
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0+
 | |
| /*
 | |
|  * Convert a file image to a C define
 | |
|  *
 | |
|  * Copyright (c) 2017 Heinrich Schuchardt <xypron.glpk@gmx.de>
 | |
|  *
 | |
|  * For testing EFI disk management we need an in memory image of
 | |
|  * a disk.
 | |
|  *
 | |
|  * The tool file2include converts a file to a C include. The file
 | |
|  * is separated into strings of 8 bytes. Only the non-zero strings
 | |
|  * are written to the include. The output format has been designed
 | |
|  * to maintain readability.
 | |
|  *
 | |
|  * As the disk image needed for testing contains mostly zeroes a high
 | |
|  * compression ratio can be attained.
 | |
|  */
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| /* Size of the blocks written to the compressed file */
 | |
| #define BLOCK_SIZE 8
 | |
| 
 | |
| int main(int argc, char *argv[])
 | |
| {
 | |
| 	FILE *file;
 | |
| 	int ret;
 | |
| 	unsigned char *buf;
 | |
| 	size_t count, i, j;
 | |
| 
 | |
| 	/* Provide usage help */
 | |
| 	if (argc != 2) {
 | |
| 		printf("Usage:\n%s FILENAME\n", argv[0]);
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	/* Open file */
 | |
| 	file = fopen(argv[1], "r");
 | |
| 	if (!file) {
 | |
| 		perror("fopen");
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	/* Get file length */
 | |
| 	ret = fseek(file, 0, SEEK_END);
 | |
| 	if (ret < 0) {
 | |
| 		perror("fseek");
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	count = ftell(file);
 | |
| 	if (!count) {
 | |
| 		fprintf(stderr, "File %s has length 0\n", argv[1]);
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	rewind(file);
 | |
| 	/* Read file */
 | |
| 	buf = malloc(count);
 | |
| 	if (!buf) {
 | |
| 		perror("calloc");
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	count = fread(buf, 1, count, file);
 | |
| 
 | |
| 	/* Generate output */
 | |
| 	printf("/* SPDX-License-Identifier: GPL-2.0+ */\n");
 | |
| 	printf("/*\n");
 | |
| 	printf(" *  Non-zero %u byte strings of a disk image\n", BLOCK_SIZE);
 | |
| 	printf(" *\n");
 | |
| 	printf(" *  Generated with tools/file2include\n");
 | |
| 	printf(" */\n\n");
 | |
| 	printf("#define EFI_ST_DISK_IMG { 0x%08zx, { \\\n", count);
 | |
| 
 | |
| 	for (i = 0; i < count; i += BLOCK_SIZE) {
 | |
| 		int c = 0;
 | |
| 
 | |
| 		for (j = i; j < i + BLOCK_SIZE && j < count; ++j) {
 | |
| 			if (buf[j])
 | |
| 				c = 1;
 | |
| 		}
 | |
| 		if (!c)
 | |
| 			continue;
 | |
| 		printf("\t{0x%08zx, \"", i);
 | |
| 		for (j = i; j < i + BLOCK_SIZE && j < count; ++j)
 | |
| 			printf("\\x%02x", buf[j]);
 | |
| 		printf("\"}, /* ");
 | |
| 		for (j = i; j < i + BLOCK_SIZE && j < count; ++j) {
 | |
| 			if (buf[j] != '*' && buf[j] >= 0x20 && buf[j] <= 0x7e)
 | |
| 				printf("%c", buf[j]);
 | |
| 			else
 | |
| 				printf(".");
 | |
| 		}
 | |
| 		printf(" */ \\\n");
 | |
| 	}
 | |
| 	printf("\t{0, NULL} } }\n");
 | |
| 
 | |
| 	/* Release resources */
 | |
| 	free(buf);
 | |
| 	ret = fclose(file);
 | |
| 	if (ret) {
 | |
| 		perror("fclose");
 | |
| 		return EXIT_FAILURE;
 | |
| 	}
 | |
| 	return EXIT_SUCCESS;
 | |
| }
 |