u-boot/cmd/license.c
Masahiro Yamada d726f225f5 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>
2017-02-08 15:56:28 -05:00

46 lines
790 B
C

/*
* (C) Copyright 2007 by OpenMoko, Inc.
* Author: Harald Welte <laforge@openmoko.org>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <command.h>
#include <malloc.h>
#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;
unsigned long len = data_size;
int ret = CMD_RET_SUCCESS;
dst = malloc(data_size + 1);
if (!dst)
return CMD_RET_FAILURE;
ret = gunzip(dst, data_size, (unsigned char *)data_gz, &len);
if (ret) {
printf("Error uncompressing license text\n");
ret = CMD_RET_FAILURE;
goto free;
}
dst[data_size] = 0;
puts(dst);
free:
free(dst);
return ret;
}
U_BOOT_CMD(
license, 1, 1, do_license,
"print GPL license text",
""
);