oseama: support extracting entity to stdout
authorRafał Miłecki <rafal@milecki.pl>
Fri, 26 Nov 2021 16:17:08 +0000 (17:17 +0100)
committerRafał Miłecki <rafal@milecki.pl>
Thu, 2 Dec 2021 07:33:30 +0000 (08:33 +0100)
This allows using oseama in a pipe. It's very useful for writing data to
flash using e.g.
oseama extract firmware.bin -e 0 | mtd write - firmware

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
src/oseama.c

index d3eb9b91f2d1434025cba0e9485cf4f08a077815..f68d7d0501f6cb5eaa2a3dd6f4ab14adb6276efb 100644 (file)
@@ -525,10 +525,6 @@ static int oseama_extract(int argc, char **argv) {
                fprintf(stderr, "No entity specified\n");
                err = -EINVAL;
                goto out;
-       } else if (!out_path) {
-               fprintf(stderr, "No output file specified\n");
-               err = -EINVAL;
-               goto out;
        }
 
        seama = oseama_open(seama_path, "r");
@@ -538,11 +534,15 @@ static int oseama_extract(int argc, char **argv) {
                goto out;
        }
 
-       out = fopen(out_path, "w");
-       if (!out) {
-               fprintf(stderr, "Couldn't open %s\n", out_path);
-               err = -EACCES;
-               goto err_close_seama;
+       if (out_path) {
+               out = fopen(out_path, "w");
+               if (!out) {
+                       fprintf(stderr, "Couldn't open %s\n", out_path);
+                       err = -EACCES;
+                       goto err_close_seama;
+               }
+       } else {
+               out = stdout;
        }
 
        bytes = fread(&hdr, 1, sizeof(hdr), seama);
@@ -558,7 +558,8 @@ static int oseama_extract(int argc, char **argv) {
        oseama_extract_entity(seama, out);
 
 err_close_out:
-       fclose(out);
+       if (out != stdout)
+               fclose(out);
 err_close_seama:
        oseama_close(seama);
 out: