diff options
author | Thomas Haller <thaller@redhat.com> | 2016-05-11 18:12:02 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2016-05-12 10:24:36 +0200 |
commit | b4095a51011db5c58f147af05d3704169588bed4 (patch) | |
tree | e70ccaa0d26c0b9aac934e5e78d53931a7a27391 /src/nm-auth-subject.c | |
parent | 7aac2c8a1032519d6437f986527c3c8fca9075b2 (diff) | |
download | NetworkManager-b4095a51011db5c58f147af05d3704169588bed4.tar.gz |
auth: embed private data NMAuthSubjectPrivate in NMAuthSubject struct
... and make the structs NMAuthSubject and NMAuthSubjectClass
opaque types.
I don't want to do this for all our types, only for a few prominent
GObject instances that we create a lot and that are really not expected
to ever be subclassed.
NMAuthSubject is such a candidate. It is really a very simple object
containing a few information bits about the authentication request.
It is not ever expected to be extended/inherited or become more
complex. No need to do a full-fledged private-data implementation.
Diffstat (limited to 'src/nm-auth-subject.c')
-rw-r--r-- | src/nm-auth-subject.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/nm-auth-subject.c b/src/nm-auth-subject.c index 86b873f0f2..eb496b28cb 100644 --- a/src/nm-auth-subject.c +++ b/src/nm-auth-subject.c @@ -37,10 +37,6 @@ #include "nm-enum-types.h" #include "NetworkManagerUtils.h" -G_DEFINE_TYPE (NMAuthSubject, nm_auth_subject, G_TYPE_OBJECT) - -#define NM_AUTH_SUBJECT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_AUTH_SUBJECT, NMAuthSubjectPrivate)) - enum { PROP_0, PROP_SUBJECT_TYPE, @@ -61,6 +57,30 @@ typedef struct { } unix_process; } NMAuthSubjectPrivate; +struct _NMAuthSubject { + GObject parent; + NMAuthSubjectPrivate _priv; +}; + +struct _NMAuthSubjectClass { + GObjectClass parent; +}; + +G_DEFINE_TYPE (NMAuthSubject, nm_auth_subject, G_TYPE_OBJECT) + +#define NM_AUTH_SUBJECT_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 NMAuthSubject *_self2 = (_self); \ + \ + nm_assert (NM_IS_AUTH_SUBJECT (_self)); \ + &_self->_priv; \ + }) + /**************************************************************/ #define CHECK_SUBJECT(self, error_value) \ @@ -252,7 +272,7 @@ nm_auth_subject_new_internal (void) static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object); + NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE ((NMAuthSubject *) object); switch (prop_id) { case PROP_SUBJECT_TYPE: @@ -276,7 +296,7 @@ get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object); + NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE ((NMAuthSubject *) object); NMAuthSubjectType subject_type; const char *str; gulong id; @@ -317,8 +337,10 @@ set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *p } static void -_clear_private (NMAuthSubjectPrivate *priv) +_clear_private (NMAuthSubject *self) { + NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (self); + priv->subject_type = NM_AUTH_SUBJECT_TYPE_INVALID; priv->unix_process.pid = G_MAXULONG; priv->unix_process.uid = G_MAXULONG; @@ -328,7 +350,7 @@ _clear_private (NMAuthSubjectPrivate *priv) static void nm_auth_subject_init (NMAuthSubject *self) { - _clear_private (NM_AUTH_SUBJECT_GET_PRIVATE (self)); + _clear_private (self); } static void @@ -363,7 +385,7 @@ constructed (GObject *object) /* Is the process already gone? Then fail creation of the auth subject * by clearing the type. */ if (kill (priv->unix_process.pid, 0) != 0) - _clear_private (priv); + _clear_private (self); /* Otherwise, although we didn't detect a start_time, the process is still around. * That could be due to procfs mounted with hidepid. So just accept the request. @@ -378,16 +400,14 @@ constructed (GObject *object) break; } - _clear_private (priv); + _clear_private (self); g_return_if_reached (); } static void finalize (GObject *object) { - NMAuthSubjectPrivate *priv = NM_AUTH_SUBJECT_GET_PRIVATE (object); - - _clear_private (priv); + _clear_private ((NMAuthSubject *) object); G_OBJECT_CLASS (nm_auth_subject_parent_class)->finalize (object); } @@ -397,8 +417,6 @@ nm_auth_subject_class_init (NMAuthSubjectClass *config_class) { GObjectClass *object_class = G_OBJECT_CLASS (config_class); - g_type_class_add_private (config_class, sizeof (NMAuthSubjectPrivate)); - /* virtual methods */ object_class->get_property = get_property; object_class->set_property = set_property; |