dissect: add DISSECT_IMAGE_DISCARD_ANY mask

This makes the code to set arg_flags much more readable.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2016-12-07 15:26:11 -05:00
parent 58abb66f4b
commit 971e2ef0cb
2 changed files with 13 additions and 6 deletions

View File

@ -95,21 +95,25 @@ static int parse_argv(int argc, char *argv[]) {
arg_flags |= DISSECT_IMAGE_READ_ONLY; arg_flags |= DISSECT_IMAGE_READ_ONLY;
break; break;
case ARG_DISCARD: case ARG_DISCARD: {
DissectImageFlags flags;
if (streq(optarg, "disabled")) if (streq(optarg, "disabled"))
arg_flags &= ~(DISSECT_IMAGE_DISCARD_ON_LOOP|DISSECT_IMAGE_DISCARD|DISSECT_IMAGE_DISCARD_ON_CRYPTO); flags = 0;
else if (streq(optarg, "loop")) else if (streq(optarg, "loop"))
arg_flags = (arg_flags & ~(DISSECT_IMAGE_DISCARD|DISSECT_IMAGE_DISCARD_ON_CRYPTO)) | DISSECT_IMAGE_DISCARD_ON_LOOP; flags = DISSECT_IMAGE_DISCARD_ON_LOOP;
else if (streq(optarg, "all")) else if (streq(optarg, "all"))
arg_flags = (arg_flags & ~(DISSECT_IMAGE_DISCARD_ON_CRYPTO)) | DISSECT_IMAGE_DISCARD_ON_LOOP | DISSECT_IMAGE_DISCARD; flags = DISSECT_IMAGE_DISCARD_ON_LOOP | DISSECT_IMAGE_DISCARD;
else if (streq(optarg, "crypt")) else if (streq(optarg, "crypt"))
arg_flags |= DISSECT_IMAGE_DISCARD_ON_LOOP | DISSECT_IMAGE_DISCARD | DISSECT_IMAGE_DISCARD_ON_CRYPTO; flags = DISSECT_IMAGE_DISCARD_ANY;
else { else {
log_error("Unknown --discard= parameter: %s", optarg); log_error("Unknown --discard= parameter: %s", optarg);
return -EINVAL; return -EINVAL;
} }
arg_flags = (arg_flags & ~DISSECT_IMAGE_DISCARD_ANY) | flags;
break; break;
}
case ARG_ROOT_HASH: { case ARG_ROOT_HASH: {
void *p; void *p;

View File

@ -61,9 +61,12 @@ static inline int PARTITION_VERITY_OF(int p) {
typedef enum DissectImageFlags { typedef enum DissectImageFlags {
DISSECT_IMAGE_READ_ONLY = 1, DISSECT_IMAGE_READ_ONLY = 1,
DISSECT_IMAGE_DISCARD_ON_LOOP = 2, /* Turn on "discard" if on loop device and file system supports it */ DISSECT_IMAGE_DISCARD_ON_LOOP = 2, /* Turn on "discard" if on a loop device and file system supports it */
DISSECT_IMAGE_DISCARD = 4, /* Turn on "discard" if file system supports it, on all block devices */ DISSECT_IMAGE_DISCARD = 4, /* Turn on "discard" if file system supports it, on all block devices */
DISSECT_IMAGE_DISCARD_ON_CRYPTO = 8, /* Turn on "discard" also on crypto devices */ DISSECT_IMAGE_DISCARD_ON_CRYPTO = 8, /* Turn on "discard" also on crypto devices */
DISSECT_IMAGE_DISCARD_ANY = DISSECT_IMAGE_DISCARD_ON_LOOP |
DISSECT_IMAGE_DISCARD |
DISSECT_IMAGE_DISCARD_ON_CRYPTO,
} DissectImageFlags; } DissectImageFlags;
struct DissectedImage { struct DissectedImage {