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:
Masahiro Yamada 2017-01-30 11:12:08 +09:00 committed by Tom Rini
parent 61304dbec3
commit d726f225f5
8 changed files with 39 additions and 66 deletions

View File

@ -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
View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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
View File

@ -2,4 +2,3 @@
/bmp_logo.h /bmp_logo.h
/bmp_logo_data.h /bmp_logo_data.h
/config.h /config.h
/license.h

View File

@ -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

View File

@ -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);
}