From 37bd27f28a868c287faf361864a16e77b8d9246f Mon Sep 17 00:00:00 2001 From: Jani Nikula <jani.nikula@intel.com> Date: Fri, 20 Oct 2017 16:24:50 +0300 Subject: [PATCH] tools/intel_vbt_decode: add --describe option MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Print description of the form <bdb-version>-<vbt-signature> that could be used for e.g. filenames. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- tools/intel_vbt_decode.c | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c index 00faca426..d7cbc436c 100644 --- a/tools/intel_vbt_decode.c +++ b/tools/intel_vbt_decode.c @@ -25,6 +25,7 @@ * */ +#include <ctype.h> #include <errno.h> #include <fcntl.h> #include <getopt.h> @@ -1662,6 +1663,33 @@ static bool dump_section(struct context *context, int section_id) return true; } +/* print a description of the VBT of the form <bdb-version>-<vbt-signature> */ +static void print_description(struct context *context) +{ + const struct vbt_header *vbt = context->vbt; + const struct bdb_header *bdb = context->bdb; + char *desc = strndup((char *)vbt->signature, sizeof(vbt->signature)); + char *p; + + for (p = desc + strlen(desc) - 1; p >= desc && isspace(*p); p--) + *p = '\0'; + + for (p = desc; *p; p++) { + if (!isalnum(*p)) + *p = '-'; + else + *p = tolower(*p); + } + + p = desc; + if (strncmp(p, "-vbt-", 5) == 0) + p += 5; + + printf("%d-%s\n", bdb->version, p); + + free (desc); +} + static void dump_headers(struct context *context) { const struct vbt_header *vbt = context->vbt; @@ -1725,6 +1753,7 @@ enum opt { OPT_BLOCK, OPT_USAGE, OPT_HEADER, + OPT_DESCRIBE, }; static void usage(const char *toolname) @@ -1737,6 +1766,7 @@ static void usage(const char *toolname) " [--hexdump]" " [--block=<block_no>]" " [--header]" + " [--describe]" " [--help]\n"); } @@ -1757,7 +1787,7 @@ int main(int argc, char **argv) }; char *endp; int block_number = -1; - bool header_only = false; + bool header_only = false, describe = false; static struct option options[] = { { "file", required_argument, NULL, OPT_FILE }, @@ -1767,6 +1797,7 @@ int main(int argc, char **argv) { "hexdump", no_argument, NULL, OPT_HEXDUMP }, { "block", required_argument, NULL, OPT_BLOCK }, { "header", no_argument, NULL, OPT_HEADER }, + { "describe", no_argument, NULL, OPT_DESCRIBE }, { "help", no_argument, NULL, OPT_USAGE }, { 0 } }; @@ -1810,6 +1841,9 @@ int main(int argc, char **argv) case OPT_HEADER: header_only = true; break; + case OPT_DESCRIBE: + describe = true; + break; case OPT_END: break; case OPT_USAGE: /* fall-through */ @@ -1913,7 +1947,9 @@ int main(int argc, char **argv) context.panel_type = 0; } - if (header_only) { + if (describe) { + print_description(&context); + } else if (header_only) { dump_headers(&context); } else if (block_number != -1) { /* dump specific section only */ -- GitLab