diff options
| author | Rafał Miłecki | 2021-11-27 15:31:04 +0000 |
|---|---|---|
| committer | Rafał Miłecki | 2021-12-02 07:33:30 +0000 |
| commit | 56e8e19151743c923f48604c457850cf8eb52076 (patch) | |
| tree | 93ac12b8d5742aa02b93734fbe952929550c5314 | |
| parent | a37ccaff50e50cf3553d4bc7852a3e389e85535d (diff) | |
| download | firmware-utils-56e8e19151743c923f48604c457850cf8eb52076.tar.gz | |
otrx: support TRX from stdin when extracting
It allows e.g.
dd if=firmware.chk skip=1 bs=58 | otrx extract - -1 kernel.bin
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
| -rw-r--r-- | src/otrx.c | 9 |
1 files changed, 4 insertions, 5 deletions
@@ -558,7 +558,7 @@ static void otrx_extract_parse_options(int argc, char **argv) { } } -static int otrx_extract_copy(FILE *trx, size_t offset, size_t length, char *out_path) { +static int otrx_extract_copy(struct otrx_ctx *otrx, size_t length, char *out_path) { FILE *out; size_t bytes; uint8_t *buf; @@ -578,8 +578,7 @@ static int otrx_extract_copy(FILE *trx, size_t offset, size_t length, char *out_ goto err_close; } - fseek(trx, offset, SEEK_SET); - bytes = fread(buf, 1, length, trx); + bytes = fread(buf, 1, length, otrx->fp); if (bytes != length) { fprintf(stderr, "Couldn't read %zu B of data from %s\n", length, trx_path); err = -ENOMEM; @@ -631,9 +630,9 @@ static int otrx_extract(int argc, char **argv) { if (!part->offset && partition[part->idx]) printf("TRX doesn't contain partition %d, can't extract %s\n", part->idx + 1, partition[part->idx]); if (!part->offset || !partition[part->idx]) - continue; + otrx_skip(otrx.fp, part->length); else - otrx_extract_copy(otrx.fp, trx_offset + part->offset, part->length, partition[part->idx]); + otrx_extract_copy(&otrx, part->length, partition[part->idx]); } otrx_close(otrx.fp); |