summaryrefslogtreecommitdiffstats
path: root/cli_classic.c
diff options
context:
space:
mode:
authorEdward O'Callaghan <quasisec@google.com>2021-12-13 12:46:12 +1100
committerEdward O'Callaghan <quasisec@chromium.org>2022-01-27 04:48:13 +0000
commit55aa056c7404e0912ed2e56b682512df7a0cca77 (patch)
tree061ee0a28f94076721f9ae2f5d3a6938bc6c2d97 /cli_classic.c
parent103b139cf76f9fb0934335ed49bddd5762f86843 (diff)
downloadflashrom-55aa056c7404e0912ed2e56b682512df7a0cca77.tar.gz
flashrom-55aa056c7404e0912ed2e56b682512df7a0cca77.tar.bz2
flashrom-55aa056c7404e0912ed2e56b682512df7a0cca77.zip
flashrom.c: Move do_*() helpers into cli_classic.c
These helpers are only used by the CLI logic and so we localise them here to move towards cli_classic being a pure libflashrom user. BUG=b:208132085 TEST=`make` Change-Id: If1112155e2421e0178fd73f847cbb80868387433 Signed-off-by: Edward O'Callaghan <quasisec@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/60070 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Diffstat (limited to 'cli_classic.c')
-rw-r--r--cli_classic.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/cli_classic.c b/cli_classic.c
index 3cd78d408..8c337eb22 100644
--- a/cli_classic.c
+++ b/cli_classic.c
@@ -154,6 +154,103 @@ static int parse_wp_range(unsigned int *start, unsigned int *len)
return 0;
}
+static int do_read(struct flashctx *const flash, const char *const filename)
+{
+ int ret;
+
+ unsigned long size = flash->chip->total_size * 1024;
+ unsigned char *buf = calloc(size, sizeof(unsigned char));
+ if (!buf) {
+ msg_gerr("Memory allocation failed!\n");
+ return 1;
+ }
+
+ ret = flashrom_image_read(flash, buf, size);
+ if (ret > 0)
+ goto free_out;
+
+ if (write_buf_to_include_args(flash, buf)) {
+ ret = 1;
+ goto free_out;
+ }
+ if (filename)
+ ret = write_buf_to_file(buf, size, filename);
+
+free_out:
+ free(buf);
+ return ret;
+}
+
+static int do_extract(struct flashctx *const flash)
+{
+ prepare_layout_for_extraction(flash);
+ return do_read(flash, NULL);
+}
+
+static int do_write(struct flashctx *const flash, const char *const filename, const char *const referencefile)
+{
+ const size_t flash_size = flash->chip->total_size * 1024;
+ int ret = 1;
+
+ uint8_t *const newcontents = malloc(flash_size);
+ uint8_t *const refcontents = referencefile ? malloc(flash_size) : NULL;
+
+ if (!newcontents || (referencefile && !refcontents)) {
+ msg_gerr("Out of memory!\n");
+ goto _free_ret;
+ }
+
+ /* Read '-w' argument first... */
+ if (read_buf_from_file(newcontents, flash_size, filename))
+ goto _free_ret;
+ /*
+ * ... then update newcontents with contents from files provided to '-i'
+ * args if needed.
+ */
+ if (read_buf_from_include_args(flash, newcontents))
+ goto _free_ret;
+
+ if (referencefile) {
+ if (read_buf_from_file(refcontents, flash_size, referencefile))
+ goto _free_ret;
+ }
+
+ ret = flashrom_image_write(flash, newcontents, flash_size, refcontents);
+
+_free_ret:
+ free(refcontents);
+ free(newcontents);
+ return ret;
+}
+
+static int do_verify(struct flashctx *const flash, const char *const filename)
+{
+ const size_t flash_size = flash->chip->total_size * 1024;
+ int ret = 1;
+
+ uint8_t *const newcontents = malloc(flash_size);
+ if (!newcontents) {
+ msg_gerr("Out of memory!\n");
+ goto _free_ret;
+ }
+
+ /* Read '-v' argument first... */
+ if (read_buf_from_file(newcontents, flash_size, filename))
+ goto _free_ret;
+ /*
+ * ... then update newcontents with contents from files provided to '-i'
+ * args if needed.
+ */
+ if (read_buf_from_include_args(flash, newcontents))
+ goto _free_ret;
+
+ ret = flashrom_image_verify(flash, newcontents, flash_size);
+
+_free_ret:
+ free(newcontents);
+ return ret;
+}
+
int main(int argc, char *argv[])
{
const struct flashchip *chip = NULL;