Skip to content

Commit

Permalink
dmidecode: New option --oem-string
Browse files Browse the repository at this point in the history
Add a new option to extract OEM strings, like we already have for
many other strings.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
  • Loading branch information
jdelvare committed May 23, 2017
1 parent 77ac1e2 commit bd871c1
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
15 changes: 15 additions & 0 deletions dmidecode.c
Original file line number Diff line number Diff line change
Expand Up @@ -4555,6 +4555,21 @@ static void dmi_table_string(const struct dmi_header *h, const u8 *data, u16 ver
int key;
u8 offset = opt.string->offset;

if (opt.string->type == 11) /* OEM strings */
{
if (h->length < 5 || offset > data[4])
{
fprintf(stderr, "No OEM string number %u\n", offset);
return;
}

if (offset)
printf("%s\n", dmi_string(h, offset));
else
printf("%u\n", data[4]); /* count */
return;
}

if (offset >= h->length)
return;

Expand Down
40 changes: 40 additions & 0 deletions dmiopt.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/

#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <getopt.h>
Expand Down Expand Up @@ -171,6 +172,10 @@ static const struct string_keyword opt_string_keyword[] = {
{ "processor-frequency", 4, 0x16 }, /* dmi_processor_frequency() */
};

/* This is a template, 3rd field is set at runtime. */
static struct string_keyword opt_oem_string_keyword =
{ NULL, 11, 0x00 };

static void print_opt_string_list(void)
{
unsigned int i;
Expand Down Expand Up @@ -206,6 +211,34 @@ static int parse_opt_string(const char *arg)
return -1;
}

static int parse_opt_oem_string(const char *arg)
{
unsigned long val;
char *next;

if (opt.string)
{
fprintf(stderr, "Only one string can be specified\n");
return -1;
}

/* Return the number of OEM strings */
if (strcmp(arg, "count") == 0)
goto done;

val = strtoul(arg, &next, 10);
if (next == arg || val == 0x00 || val > 0xff)
{
fprintf(stderr, "Invalid OEM string number: %s\n", arg);
return -1;
}

opt_oem_string_keyword.offset = val;
done:
opt.string = &opt_oem_string_keyword;
return 0;
}


/*
* Command line options handling
Expand All @@ -225,6 +258,7 @@ int parse_command_line(int argc, char * const argv[])
{ "dump", no_argument, NULL, 'u' },
{ "dump-bin", required_argument, NULL, 'B' },
{ "from-dump", required_argument, NULL, 'F' },
{ "oem-string", required_argument, NULL, 'O' },
{ "no-sysfs", no_argument, NULL, 'S' },
{ "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0 }
Expand Down Expand Up @@ -255,6 +289,11 @@ int parse_command_line(int argc, char * const argv[])
return -1;
opt.flags |= FLAG_QUIET;
break;
case 'O':
if (parse_opt_oem_string(optarg) < 0)
return -1;
opt.flags |= FLAG_QUIET;
break;
case 't':
opt.type = parse_opt_type(opt.type, optarg);
if (opt.type == NULL)
Expand Down Expand Up @@ -315,6 +354,7 @@ void print_help(void)
" --dump-bin FILE Dump the DMI data to a binary file\n"
" --from-dump FILE Read the DMI data from a binary file\n"
" --no-sysfs Do not attempt to read DMI data from sysfs files\n"
" --oem-string N Only display the value of the given OEM string\n"
" -V, --version Display the version and exit\n";

printf("%s", help);
Expand Down
7 changes: 6 additions & 1 deletion man/dmidecode.8
Original file line number Diff line number Diff line change
Expand Up @@ -134,13 +134,18 @@ Read the DMI data from a binary file previously generated using
Do not attempt to read DMI data from sysfs files. This is mainly useful for
debugging.
.TP
.BR " " " " "--oem-string N"
Only display the value of the \s-1OEM\s0 string number \fBN\fR. The first
\s-1OEM\s0 string has number 1. With special value "count", return the
number of OEM strings instead.
.TP
.BR "-h" ", " "--help"
Display usage information and exit
.TP
.BR "-V" ", " "--version"
Display the version and exit
.P
Options --string, --type and --dump-bin
Options --string, --type, --dump-bin and --oem-string
determine the output format and are mutually exclusive.
.P
Please note in case of
Expand Down

0 comments on commit bd871c1

Please sign in to comment.