diff options
author | Thomas Haller <thaller@redhat.com> | 2016-07-01 15:23:29 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-07-01 15:31:41 +0200 |
commit | 5b4581b361af47b5d8da7c47cd21265894ad62b2 (patch) | |
tree | 73e36806e3ab86c8619134e3aa3eee5e992cef30 | |
parent | e5430a182cde94033931bbf6605b5388560c4e60 (diff) | |
download | NetworkManager-5b4581b361af47b5d8da7c47cd21265894ad62b2.tar.gz |
manager: preserve constness in NM_MANAGER_GET_PRIVATE() and add compile-time type check
-rw-r--r-- | src/nm-manager.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index ab1a5744b7..b3576b02fd 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -147,14 +147,25 @@ typedef struct { struct _NMManager { NMExportedObject parent; - NMManagerPrivate priv; + NMManagerPrivate _priv; }; typedef struct { NMExportedObjectClass parent; } NMManagerClass; -#define NM_MANAGER_GET_PRIVATE(o) ({ nm_assert (NM_IS_MANAGER (o)); &((o)->priv); }) +#define NM_MANAGER_GET_PRIVATE(self) \ + ({ \ + /* preserve the const-ness of self. Unfortunately, that + * way, @self cannot be a void pointer */ \ + typeof (self) _self = (self); \ + \ + /* Get compiler error if variable is of wrong type */ \ + _nm_unused const NMManager *_self2 = (_self); \ + \ + nm_assert (NM_IS_MANAGER (_self)); \ + &_self->_priv; \ + }) G_DEFINE_TYPE (NMManager, nm_manager, NM_TYPE_EXPORTED_OBJECT) |