From f065794eebf73413be2db8989b24c397c696245a Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 30 May 2016 13:26:42 +0200 Subject: [PATCH] dns: embed private data in NMDnsManager struct Make NMDnsManager an opaque type and embed the private data directly in struct _NMDnsManager. (cherry picked from commit 7d808e523b8a1704c31801521447611d7a952878) --- src/dns-manager/nm-dns-manager.c | 59 ++++++++++++++++++++------------ src/dns-manager/nm-dns-manager.h | 13 ++----- 2 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/dns-manager/nm-dns-manager.c b/src/dns-manager/nm-dns-manager.c index d40b17e591..07fcc22122 100644 --- a/src/dns-manager/nm-dns-manager.c +++ b/src/dns-manager/nm-dns-manager.c @@ -61,10 +61,6 @@ #define DOMAIN_IS_VALID(domain) (*(domain)) #endif -G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT) - -#define NM_DNS_MANAGER_GET_PRIVATE(o) ((o)->priv) - #define HASH_LEN 20 #ifndef RESOLVCONF_PATH @@ -79,7 +75,19 @@ G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT) #define PLUGIN_RATELIMIT_BURST 5 #define PLUGIN_RATELIMIT_DELAY 300 -NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager); +enum { + CONFIG_CHANGED, + + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL] = { 0 }; + +typedef enum { + SR_SUCCESS, + SR_NOTFOUND, + SR_ERROR +} SpawnResult; /*********************************************************************************************/ @@ -105,7 +113,7 @@ NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager); /*********************************************************************************************/ -typedef struct _NMDnsManagerPrivate { +typedef struct { GPtrArray *configs; NMDnsIPConfigData *best_conf4, *best_conf6; gboolean need_sort; @@ -130,20 +138,33 @@ typedef struct _NMDnsManagerPrivate { } plugin_ratelimit; } NMDnsManagerPrivate; -enum { - CONFIG_CHANGED, - - LAST_SIGNAL +struct _NMDnsManager { + GObject parent; + NMDnsManagerPrivate _priv; }; -typedef enum { - SR_SUCCESS, - SR_NOTFOUND, - SR_ERROR -} SpawnResult; +struct _NMDnsManagerClass { + GObjectClass parent; +}; -static guint signals[LAST_SIGNAL] = { 0 }; +G_DEFINE_TYPE (NMDnsManager, nm_dns_manager, G_TYPE_OBJECT) +NM_DEFINE_SINGLETON_INSTANCE (NMDnsManager); + +#define NM_DNS_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 NMDnsManager *_self2 = (_self); \ + \ + nm_assert (NM_IS_DNS_MANAGER (_self)); \ + &_self->_priv; \ + }) + +/*****************************************************************************/ typedef struct { GPtrArray *nameservers; @@ -1609,9 +1630,7 @@ config_changed_cb (NMConfig *config, static void nm_dns_manager_init (NMDnsManager *self) { - NMDnsManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self, NM_TYPE_DNS_MANAGER, NMDnsManagerPrivate); - - self->priv = priv; + NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self); _LOGT ("creating..."); @@ -1685,8 +1704,6 @@ nm_dns_manager_class_init (NMDnsManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (object_class, sizeof (NMDnsManagerPrivate)); - /* virtual methods */ object_class->dispose = dispose; object_class->finalize = finalize; diff --git a/src/dns-manager/nm-dns-manager.h b/src/dns-manager/nm-dns-manager.h index 4dda1bbed9..50f050e544 100644 --- a/src/dns-manager/nm-dns-manager.h +++ b/src/dns-manager/nm-dns-manager.h @@ -56,17 +56,8 @@ typedef struct { #define NM_DNS_MANAGER_CONFIG_CHANGED "config-changed" -struct _NMDnsManagerPrivate; - -typedef struct { - GObject parent; - /* private */ - struct _NMDnsManagerPrivate *priv; -} NMDnsManager; - -typedef struct { - GObjectClass parent; -} NMDnsManagerClass; +typedef struct _NMDnsManager NMDnsManager; +typedef struct _NMDnsManagerClass NMDnsManagerClass; GType nm_dns_manager_get_type (void);