diff options
author | Beth Kon <eak@us.ibm.com> | 2009-07-31 13:49:14 -0400 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-08-10 13:05:48 -0500 |
commit | 09c0848e52d9f06160c0f3fd04fb4fc521370c2a (patch) | |
tree | 214b02b7f19eb5cd44aec7a64c1c485c5147bbdb /hw/smbios.c | |
parent | f14bfdf95283fc6401a4f701140838b91511f499 (diff) | |
download | hqemu-09c0848e52d9f06160c0f3fd04fb4fc521370c2a.zip hqemu-09c0848e52d9f06160c0f3fd04fb4fc521370c2a.tar.gz |
Add/Fix command-line checks for smbios options v2
- One type 4 table is required per cpu. Add a check for this.
- Fix check for smbios file.
Changes from v1:
- static designation of smbios_validate_table, and remove whitespace
Signed-off-by: Beth Kon <eak@us.ibm.com>
--
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Message-Id:
Diffstat (limited to 'hw/smbios.c')
-rw-r--r-- | hw/smbios.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/hw/smbios.c b/hw/smbios.c index ced90ce..e28beba 100644 --- a/hw/smbios.c +++ b/hw/smbios.c @@ -40,9 +40,20 @@ struct smbios_table { static uint8_t *smbios_entries; static size_t smbios_entries_len; +static int smbios_type4_count = 0; + +static void smbios_validate_table(void) +{ + if (smbios_type4_count && smbios_type4_count != smp_cpus) { + fprintf(stderr, + "Number of SMBIOS Type 4 tables must match cpu count.\n"); + exit(1); + } +} uint8_t *smbios_get_table(size_t *length) { + smbios_validate_table(); *length = smbios_entries_len; return smbios_entries; } @@ -173,8 +184,8 @@ int smbios_entry_add(const char *t) struct smbios_table *table; int size = get_image_size(buf); - if (size < sizeof(struct smbios_structure_header)) { - fprintf(stderr, "Cannot read smbios file %s", buf); + if (size == -1 || size < sizeof(struct smbios_structure_header)) { + fprintf(stderr, "Cannot read smbios file %s\n", buf); exit(1); } @@ -196,6 +207,9 @@ int smbios_entry_add(const char *t) header = (struct smbios_structure_header *)(table->data); smbios_check_collision(header->type, SMBIOS_TABLE_ENTRY); + if (header->type == 4) { + smbios_type4_count++; + } smbios_entries_len += sizeof(*table) + size; (*(uint16_t *)smbios_entries) = |