vpd: Add vpd_get_int() function
Change-Id: I1c1b5710a5236fe4a3bdda1fc978393e636e9817
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/45773
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
diff --git a/src/drivers/vpd/vpd.c b/src/drivers/vpd/vpd.c
index c332a6e..d3ff370 100644
--- a/src/drivers/vpd/vpd.c
+++ b/src/drivers/vpd/vpd.c
@@ -3,10 +3,12 @@
#include <assert.h>
#include <console/console.h>
#include <cbmem.h>
+#include <ctype.h>
#include <fmap.h>
#include <program_loading.h>
#include <string.h>
#include <timestamp.h>
+#include <types.h>
#include "vpd.h"
#include "vpd_decode.h"
@@ -274,4 +276,25 @@
return false;
}
+/*
+ * Find value of integer type by vpd key.
+ *
+ * Expects to find a decimal string, trailing chars are ignored.
+ * Returns true if the key is found and the value is not too long and
+ * starts with a decimal digit. Leaves `val` untouched if unsuccessful.
+ */
+bool vpd_get_int(const char *const key, const enum vpd_region region, int *const val)
+{
+ char value[11];
+
+ if (!vpd_gets(key, value, sizeof(value), region))
+ return false;
+
+ if (!isdigit(*value))
+ return false;
+
+ *val = (int)atol(value);
+ return true;
+}
+
ROMSTAGE_CBMEM_INIT_HOOK(cbmem_add_cros_vpd)