cmd: rework "license" command
The previous commit ("add a new command to show .config contents") improves the basic infrastructure of "embed a compressed file into the U-Boot image, and print it by a command". The same pattern for the "license" command. This commit reworks the command to improve the following: [1] Improve log style Kbuild style log GZIP cmd/license_data.gz CHK cmd/license_data_gz.h UPD cmd/license_data_gz.h CHK cmd/license_data_size.h UPD cmd/license_data_size.h instead of the bare Make log: cat ./Licenses/gpl-2.0.txt | gzip -9 -c | \ tools/bin2header license_gzip > ./include/license.h [2] Collect related code into the "cmd" directory Prior to this commit, the license.h was created by tools/Makefile, placed under the "include" directory, included from cmd/license.c, and deleted by the top-level Makefile. It is not a good idea to scatter related code. [3] Drop the fixed-malloc size LICENSE_MAX Just allocate the minimum required size of buffer because we know the size of the original gpl-2.0.txt. [4] Fix more issues Terminate the buffer with zero to prevent puts() from over-running. Add "static" to do_license. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
61304dbec3
commit
d726f225f5
2
Makefile
2
Makefile
@ -1425,7 +1425,7 @@ CLEAN_DIRS += $(MODVERDIR) \
|
|||||||
$(foreach d, spl tpl, $(patsubst %,$d/%, \
|
$(foreach d, spl tpl, $(patsubst %,$d/%, \
|
||||||
$(filter-out include, $(shell ls -1 $d 2>/dev/null))))
|
$(filter-out include, $(shell ls -1 $d 2>/dev/null))))
|
||||||
|
|
||||||
CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h include/license.h \
|
CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \
|
||||||
boot* u-boot* MLO* SPL System.map
|
boot* u-boot* MLO* SPL System.map
|
||||||
|
|
||||||
# Directories & files removed with 'make mrproper'
|
# Directories & files removed with 'make mrproper'
|
||||||
|
3
cmd/.gitignore
vendored
3
cmd/.gitignore
vendored
@ -1,3 +1,6 @@
|
|||||||
config_data.gz
|
config_data.gz
|
||||||
config_data_gz.h
|
config_data_gz.h
|
||||||
config_data_size.h
|
config_data_size.h
|
||||||
|
license_data.gz
|
||||||
|
license_data_gz.h
|
||||||
|
license_data_size.h
|
||||||
|
@ -154,6 +154,7 @@ config CMD_CPU
|
|||||||
|
|
||||||
config CMD_LICENSE
|
config CMD_LICENSE
|
||||||
bool "license"
|
bool "license"
|
||||||
|
select BUILD_BIN2C
|
||||||
help
|
help
|
||||||
Print GPL license text
|
Print GPL license text
|
||||||
|
|
||||||
|
15
cmd/Makefile
15
cmd/Makefile
@ -187,3 +187,18 @@ $(obj)/config_data_gz.h: $(obj)/config_data.gz FORCE
|
|||||||
targets += config_data_size.h
|
targets += config_data_size.h
|
||||||
$(obj)/config_data_size.h: $(KCONFIG_CONFIG) FORCE
|
$(obj)/config_data_size.h: $(KCONFIG_CONFIG) FORCE
|
||||||
$(call filechk,data_size)
|
$(call filechk,data_size)
|
||||||
|
|
||||||
|
# "license" command
|
||||||
|
$(obj)/license.o: $(obj)/license_data_gz.h $(obj)/license_data_size.h
|
||||||
|
|
||||||
|
targets += license_data.gz
|
||||||
|
$(obj)/license_data.gz: $(srctree)/Licenses/gpl-2.0.txt FORCE
|
||||||
|
$(call if_changed,gzip)
|
||||||
|
|
||||||
|
targets += license_data_gz.h
|
||||||
|
$(obj)/license_data_gz.h: $(obj)/license_data.gz FORCE
|
||||||
|
$(call filechk,data_gz)
|
||||||
|
|
||||||
|
targets += license_data_size.h
|
||||||
|
$(obj)/license_data_size.h: $(srctree)/Licenses/gpl-2.0.txt FORCE
|
||||||
|
$(call filechk,data_size)
|
||||||
|
@ -6,31 +6,36 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
|
||||||
/* Licenses/gpl-2.0.txt is currently 18092 bytes in size */
|
|
||||||
#define LICENSE_MAX 20480
|
|
||||||
|
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <license.h>
|
|
||||||
|
|
||||||
int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
#include "license_data_gz.h"
|
||||||
|
#include "license_data_size.h"
|
||||||
|
|
||||||
|
static int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
||||||
{
|
{
|
||||||
char *dst = malloc(LICENSE_MAX);
|
char *dst;
|
||||||
unsigned long len = LICENSE_MAX;
|
unsigned long len = data_size;
|
||||||
|
int ret = CMD_RET_SUCCESS;
|
||||||
|
|
||||||
|
dst = malloc(data_size + 1);
|
||||||
if (!dst)
|
if (!dst)
|
||||||
return -1;
|
return CMD_RET_FAILURE;
|
||||||
|
|
||||||
if (gunzip(dst, LICENSE_MAX, license_gzip, &len) != 0) {
|
ret = gunzip(dst, data_size, (unsigned char *)data_gz, &len);
|
||||||
|
if (ret) {
|
||||||
printf("Error uncompressing license text\n");
|
printf("Error uncompressing license text\n");
|
||||||
free(dst);
|
ret = CMD_RET_FAILURE;
|
||||||
return -1;
|
goto free;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dst[data_size] = 0;
|
||||||
puts(dst);
|
puts(dst);
|
||||||
|
|
||||||
|
free:
|
||||||
free(dst);
|
free(dst);
|
||||||
|
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
U_BOOT_CMD(
|
U_BOOT_CMD(
|
||||||
|
1
include/.gitignore
vendored
1
include/.gitignore
vendored
@ -2,4 +2,3 @@
|
|||||||
/bmp_logo.h
|
/bmp_logo.h
|
||||||
/bmp_logo_data.h
|
/bmp_logo_data.h
|
||||||
/config.h
|
/config.h
|
||||||
/license.h
|
|
||||||
|
@ -32,7 +32,6 @@ CONFIG_BUILD_ENVCRC ?= $(ENVCRC-y)
|
|||||||
|
|
||||||
hostprogs-$(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER) += atmel_pmecc_params
|
hostprogs-$(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER) += atmel_pmecc_params
|
||||||
|
|
||||||
hostprogs-$(CONFIG_CMD_LICENSE) += bin2header
|
|
||||||
hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo
|
hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo
|
||||||
hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo
|
hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo
|
||||||
HOSTCFLAGS_bmp_logo.o := -pedantic
|
HOSTCFLAGS_bmp_logo.o := -pedantic
|
||||||
@ -233,10 +232,6 @@ endif
|
|||||||
|
|
||||||
endif # !LOGO_BMP
|
endif # !LOGO_BMP
|
||||||
|
|
||||||
# Generated gziped GPL-2.0 license text
|
|
||||||
LICENSE_H = $(objtree)/include/license.h
|
|
||||||
LICENSE-$(CONFIG_CMD_LICENSE) += $(LICENSE_H)
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use native tools and options
|
# Use native tools and options
|
||||||
# Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
|
# Define __KERNEL_STRICT_NAMES to prevent typedef overlaps
|
||||||
@ -251,7 +246,7 @@ HOST_EXTRACFLAGS += -include $(srctree)/include/libfdt_env.h \
|
|||||||
-D__KERNEL_STRICT_NAMES \
|
-D__KERNEL_STRICT_NAMES \
|
||||||
-D_GNU_SOURCE
|
-D_GNU_SOURCE
|
||||||
|
|
||||||
__build: $(LOGO-y) $(LICENSE-y)
|
__build: $(LOGO-y)
|
||||||
|
|
||||||
$(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP)
|
$(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP)
|
||||||
$(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
|
$(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@
|
||||||
@ -259,10 +254,6 @@ $(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP)
|
|||||||
$(LOGO_DATA_H): $(obj)/bmp_logo $(LOGO_BMP)
|
$(LOGO_DATA_H): $(obj)/bmp_logo $(LOGO_BMP)
|
||||||
$(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
|
$(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
|
||||||
|
|
||||||
$(LICENSE_H): $(obj)/bin2header $(srctree)/Licenses/gpl-2.0.txt
|
|
||||||
cat $(srctree)/Licenses/gpl-2.0.txt | gzip -9 -c | \
|
|
||||||
$(obj)/bin2header license_gzip > $(LICENSE_H)
|
|
||||||
|
|
||||||
# Let clean descend into subdirs
|
# Let clean descend into subdirs
|
||||||
subdir- += env
|
subdir- += env
|
||||||
|
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/* bin2header.c - program to convert binary file into a C structure
|
|
||||||
* definition to be included in a header file.
|
|
||||||
*
|
|
||||||
* (C) Copyright 2008 by Harald Welte <laforge@openmoko.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: GPL-2.0+
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
if (argc < 2) {
|
|
||||||
fprintf(stderr, "%s needs one argument: the structure name\n",
|
|
||||||
argv[0]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("/* bin2header output - automatically generated */\n");
|
|
||||||
printf("unsigned char %s[] = {\n", argv[1]);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
int i, nread;
|
|
||||||
unsigned char buf[10];
|
|
||||||
nread = read(0, buf, sizeof(buf));
|
|
||||||
if (nread <= 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
printf("\t");
|
|
||||||
for (i = 0; i < nread - 1; i++)
|
|
||||||
printf("0x%02x, ", buf[i]);
|
|
||||||
|
|
||||||
printf("0x%02x,\n", buf[nread-1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("};\n");
|
|
||||||
|
|
||||||
exit(0);
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user