diff options
author | Thomas Haller <thaller@redhat.com> | 2015-01-12 15:35:52 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-02-03 13:01:53 +0100 |
commit | cc46b182ed779110f93b5df19f2f9d43dc476d1e (patch) | |
tree | 374cd7826b1f69241b575a7a0192d9ca96df4648 | |
parent | 13c7f6a56db55db47d31a181c85913f1d183f95a (diff) | |
download | NetworkManager-cc46b182ed779110f93b5df19f2f9d43dc476d1e.tar.gz |
config: make NMConfig implement GInitable
-rw-r--r-- | src/nm-config.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/src/nm-config.c b/src/nm-config.c index 42cda6605b..a325b4c86a 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -92,7 +92,12 @@ enum { static guint signals[LAST_SIGNAL] = { 0 }; -G_DEFINE_TYPE (NMConfig, nm_config, G_TYPE_OBJECT) +static void nm_config_initable_iface_init (GInitableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (NMConfig, nm_config, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_config_initable_iface_init); + ) + #define NM_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONFIG, NMConfigPrivate)) @@ -768,21 +773,24 @@ nm_config_setup (const NMConfigCmdLineOptions *cli, GError **error) return singleton_instance; } -NMConfig * -nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) +static gboolean +init_sync (GInitable *initable, GCancellable *cancellable, GError **error) { - NMConfigPrivate *priv = NULL; - NMConfig *self; + NMConfig *self = NM_CONFIG (initable); + NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self); GKeyFile *keyfile; char *config_main_file = NULL; char *config_description = NULL; char **no_auto_default; char **no_auto_default_orig; - self = NM_CONFIG (g_object_new (NM_TYPE_CONFIG, - NM_CONFIG_CMD_LINE_OPTIONS, cli, - NULL)); - priv = NM_CONFIG_GET_PRIVATE (self); + if (priv->config_dir) { + /* Object is already initialized. */ + if (priv->config_data) + return TRUE; + g_set_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND, "unspecified error"); + return FALSE; + } if (priv->cli.config_dir) priv->config_dir = g_strdup (priv->cli.config_dir); @@ -794,10 +802,8 @@ nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) &config_main_file, &config_description, error); - if (!keyfile) { - g_object_unref (self); - return NULL; - } + if (!keyfile) + return FALSE; /* Initialize read only private members */ @@ -834,15 +840,22 @@ nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) g_strfreev (no_auto_default); g_strfreev (no_auto_default_orig); - /* Initialize mutable members. */ - priv->config_data = g_object_ref (priv->config_data_orig); - g_free (config_main_file); g_free (config_description); g_key_file_unref (keyfile); - return self; + return TRUE; +} + +NMConfig * +nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) +{ + return NM_CONFIG (g_initable_new (NM_TYPE_CONFIG, + NULL, + error, + NM_CONFIG_CMD_LINE_OPTIONS, cli, + NULL)); } static void @@ -924,3 +937,9 @@ nm_config_class_init (NMConfigClass *config_class) G_TYPE_NONE, 3, NM_TYPE_CONFIG_DATA, G_TYPE_HASH_TABLE, NM_TYPE_CONFIG_DATA); } +static void +nm_config_initable_iface_init (GInitableIface *iface) +{ + iface->init = init_sync; +} + |