diff options
-rw-r--r-- | src/bios_reader/bios_reader.c | 4 | ||||
-rw-r--r-- | src/i830_bios.h | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/bios_reader/bios_reader.c b/src/bios_reader/bios_reader.c index 328cacf2..27ec7694 100644 --- a/src/bios_reader/bios_reader.c +++ b/src/bios_reader/bios_reader.c @@ -170,6 +170,7 @@ static void dump_general_definitions(void) struct child_device_config *child; int i; char child_id[11]; + int child_device_num; block = find_section(BDB_GENERAL_DEFINITIONS); @@ -188,7 +189,8 @@ static void dump_general_definitions(void) printf("\tBoot display type: 0x%02x%02x\n", defs->boot_display[1], defs->boot_display[0]); printf("\tTV data block present: %s\n", YESNO(tv_present)); - for (i = 0; i < 4; i++) { + child_device_num = (block->size - sizeof(*defs)) / sizeof(*child); + for (i = 0; i < child_device_num; i++) { child = &defs->devices[i]; if (!child->device_type) { printf("\tChild device %d not present\n", i); diff --git a/src/i830_bios.h b/src/i830_bios.h index 1f1f1aa2..8a3025e7 100644 --- a/src/i830_bios.h +++ b/src/i830_bios.h @@ -228,7 +228,7 @@ struct bdb_general_definitions { * TV and LVDS are missing, so be careful when interpreting * [4] and [5]. */ - struct child_device_config devices[6]; + struct child_device_config devices[0]; /* may be another device block here on some platforms */ } __attribute__((packed)); |