summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2016-07-01 15:23:29 +0200
committerThomas Haller <thaller@redhat.com>2016-07-01 15:31:41 +0200
commit5b4581b361af47b5d8da7c47cd21265894ad62b2 (patch)
tree73e36806e3ab86c8619134e3aa3eee5e992cef30
parente5430a182cde94033931bbf6605b5388560c4e60 (diff)
downloadNetworkManager-5b4581b361af47b5d8da7c47cd21265894ad62b2.tar.gz
manager: preserve constness in NM_MANAGER_GET_PRIVATE() and add compile-time type check
-rw-r--r--src/nm-manager.c15
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)