From d359a9a1e7cc7a53926c8308e3e7866d2239403b Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 22 Feb 2023 09:01:59 +0100 Subject: [PATCH] glib-aux: improve NM_FLAGS_{SET,UNSET,ASSIGN,ASSIGN_MASK}() macros - add unused code which triggers a compiler check about compatible enum values. --- src/libnm-glib-aux/nm-macros-internal.h | 43 +++++++++++++++---------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/src/libnm-glib-aux/nm-macros-internal.h b/src/libnm-glib-aux/nm-macros-internal.h index 0534ee5d9b..10380bcdb9 100644 --- a/src/libnm-glib-aux/nm-macros-internal.h +++ b/src/libnm-glib-aux/nm-macros-internal.h @@ -1023,34 +1023,43 @@ nm_g_variant_equal(GVariant *a, GVariant *b) #define NM_FLAGS_SET(flags, val) \ ({ \ const typeof(flags) _flags = (flags); \ - const typeof(flags) _val = (val); \ + typeof(_flags) _val = (val); \ \ - _flags | _val; \ + (void) (FALSE && (flags) == (val)); \ + \ + (_flags | _val); \ }) #define NM_FLAGS_UNSET(flags, val) \ ({ \ const typeof(flags) _flags = (flags); \ - const typeof(flags) _val = (val); \ + typeof(_flags) _val = (val); \ \ - _flags & (~_val); \ + (void) (FALSE && (flags) == (val)); \ + \ + (_flags & (~_val)); \ }) -#define NM_FLAGS_ASSIGN(flags, val, assign) \ - ({ \ - const typeof(flags) _flags = (flags); \ - const typeof(flags) _val = (val); \ - \ - (assign) ? _flags | (_val) : _flags & (~_val); \ +#define NM_FLAGS_ASSIGN(flags, val, assign) \ + ({ \ + const typeof(flags) _flags = (flags); \ + typeof(_flags) _val = (val); \ + \ + (void) (FALSE && (flags) == (val)); \ + \ + (assign) ? (_flags | _val) : (_flags & (~_val)); \ }) -#define NM_FLAGS_ASSIGN_MASK(flags, mask, val) \ - ({ \ - const typeof(flags) _flags = (flags); \ - const typeof(flags) _mask = (mask); \ - const typeof(flags) _val = (val); \ - \ - ((_flags & ~_mask) | (_mask & _val)); \ +#define NM_FLAGS_ASSIGN_MASK(flags, mask, val) \ + ({ \ + const typeof(flags) _flags = (flags); \ + typeof(_flags) _mask = (mask); \ + typeof(_flags) _val = (val); \ + \ + (void) (FALSE && (flags) == (val)); \ + (void) (FALSE && (flags) == (mask)); \ + \ + ((_flags & (~_mask)) | (_val & _mask)); \ }) /*****************************************************************************/