From a6d96480176417478350e97338451554b5450cba Mon Sep 17 00:00:00 2001 From: Stefan Tauner Date: Wed, 26 Dec 2012 19:51:23 +0000 Subject: Add general programmer sanity checks And remove the completely unused vendor field. Corresponding to flashrom svn r1630. Signed-off-by: Stefan Tauner Acked-by: Carl-Daniel Hailfinger --- flashrom.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'flashrom.c') diff --git a/flashrom.c b/flashrom.c index dae54f08..a55dcd8e 100644 --- a/flashrom.c +++ b/flashrom.c @@ -1557,8 +1557,9 @@ void print_banner(void) int selfcheck(void) { - int ret = 0; const struct flashchip *chip; + int i; + int ret = 0; /* Safety check. Instead of aborting after the first error, check * if more errors exist. @@ -1567,6 +1568,32 @@ int selfcheck(void) msg_gerr("Programmer table miscompilation!\n"); ret = 1; } + for (i = 0; i < PROGRAMMER_INVALID; i++) { + const struct programmer_entry p = programmer_table[i]; + if (p.name == NULL) { + msg_gerr("All programmers need a valid name, but the one with index %d does not!\n", i); + ret = 1; + /* This might hide other problems with this programmer, but allows for better error + * messages below without jumping through hoops. */ + continue; + } + if (p.init == NULL) { + msg_gerr("Programmer %s does not have a valid init function!\n", p.name); + ret = 1; + } + if (p.delay == NULL) { + msg_gerr("Programmer %s does not have a valid delay function!\n", p.name); + ret = 1; + } + if (p.map_flash_region == NULL) { + msg_gerr("Programmer %s does not have a valid map_flash_region function!\n", p.name); + ret = 1; + } + if (p.unmap_flash_region == NULL) { + msg_gerr("Programmer %s does not have a valid unmap_flash_region function!\n", p.name); + ret = 1; + } + } /* It would be favorable if we could also check for correct termination * of the following arrays, but we don't know their sizes in here... * For 'flashchips' we check the first element to be non-null. In the -- cgit v1.2.3