]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dissect: add DISSECT_IMAGE_DISCARD_ANY mask
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 7 Dec 2016 20:26:11 +0000 (15:26 -0500)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 7 Dec 2016 20:26:11 +0000 (15:26 -0500)
This makes the code to set arg_flags much more readable.

src/dissect/dissect.c
src/shared/dissect-image.h

index e3c96b7407b08c413c84dbdd09fdd4e60c4dd09d..f2f1e135ec7c461c6c7ff99f2d298c475f9d58f7 100644 (file)
@@ -95,21 +95,25 @@ static int parse_argv(int argc, char *argv[]) {
                         arg_flags |= DISSECT_IMAGE_READ_ONLY;
                         break;
 
-                case ARG_DISCARD:
+                case ARG_DISCARD: {
+                        DissectImageFlags flags;
+
                         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"))
-                                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"))
-                                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"))
-                                arg_flags |= DISSECT_IMAGE_DISCARD_ON_LOOP | DISSECT_IMAGE_DISCARD | DISSECT_IMAGE_DISCARD_ON_CRYPTO;
+                                flags = DISSECT_IMAGE_DISCARD_ANY;
                         else {
                                 log_error("Unknown --discard= parameter: %s", optarg);
                                 return -EINVAL;
                         }
+                        arg_flags = (arg_flags & ~DISSECT_IMAGE_DISCARD_ANY) | flags;
 
                         break;
+                }
 
                 case ARG_ROOT_HASH: {
                         void *p;
index 902c8d4a3774f52dbdafc09dfe2b5490eb88d4da..175ddd8ea0c48f7a21968c71944d323413a2d2c5 100644 (file)
@@ -61,9 +61,12 @@ static inline int PARTITION_VERITY_OF(int p) {
 
 typedef enum DissectImageFlags {
         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 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_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;
 
 struct DissectedImage {