diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2022-05-13 19:07:36 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-05-13 19:07:36 +0000 |
commit | 79677f8b4928e1cda39b8f561001769b955fa2a0 (patch) | |
tree | 4faf1016872a5f76ada790bc54f42c95643d1a82 /libsparse | |
parent | ec76b5cb4efb342e20b7b05dd016e4daec2d6f2b (diff) | |
parent | 6150b00b6025918da8c28e5c2f929ecdf480a9d6 (diff) | |
download | core-79677f8b4928e1cda39b8f561001769b955fa2a0.tar.gz |
Merge "img2simg: Add support for converting holes to "don't care" chunks"
Diffstat (limited to 'libsparse')
-rw-r--r-- | libsparse/img2simg.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/libsparse/img2simg.cpp b/libsparse/img2simg.cpp index 3e24cc014..51580f706 100644 --- a/libsparse/img2simg.cpp +++ b/libsparse/img2simg.cpp @@ -38,24 +38,41 @@ #endif void usage() { - fprintf(stderr, "Usage: img2simg <raw_image_file> <sparse_image_file> [<block_size>]\n"); + fprintf(stderr, "Usage: img2simg [-s] <raw_image_file> <sparse_image_file> [<block_size>]\n"); } int main(int argc, char* argv[]) { + char *arg_in; + char *arg_out; + enum sparse_read_mode mode = SPARSE_READ_MODE_NORMAL; + int extra; int in; + int opt; int out; int ret; struct sparse_file* s; unsigned int block_size = 4096; off64_t len; - if (argc < 3 || argc > 4) { + while ((opt = getopt(argc, argv, "s")) != -1) { + switch (opt) { + case 's': + mode = SPARSE_READ_MODE_HOLE; + break; + default: + usage(); + exit(-1); + } + } + + extra = argc - optind; + if (extra < 2 || extra > 3) { usage(); exit(-1); } - if (argc == 4) { - block_size = atoi(argv[3]); + if (extra == 3) { + block_size = atoi(argv[optind + 2]); } if (block_size < 1024 || block_size % 4 != 0) { @@ -63,22 +80,24 @@ int main(int argc, char* argv[]) { exit(-1); } - if (strcmp(argv[1], "-") == 0) { + arg_in = argv[optind]; + if (strcmp(arg_in, "-") == 0) { in = STDIN_FILENO; } else { - in = open(argv[1], O_RDONLY | O_BINARY); + in = open(arg_in, O_RDONLY | O_BINARY); if (in < 0) { - fprintf(stderr, "Cannot open input file %s\n", argv[1]); + fprintf(stderr, "Cannot open input file %s\n", arg_in); exit(-1); } } - if (strcmp(argv[2], "-") == 0) { + arg_out = argv[optind + 1]; + if (strcmp(arg_out, "-") == 0) { out = STDOUT_FILENO; } else { - out = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0664); + out = open(arg_out, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY, 0664); if (out < 0) { - fprintf(stderr, "Cannot open output file %s\n", argv[2]); + fprintf(stderr, "Cannot open output file %s\n", arg_out); exit(-1); } } @@ -93,7 +112,7 @@ int main(int argc, char* argv[]) { } sparse_file_verbose(s); - ret = sparse_file_read(s, in, SPARSE_READ_MODE_NORMAL, false); + ret = sparse_file_read(s, in, mode, false); if (ret) { fprintf(stderr, "Failed to read file\n"); exit(-1); |