config: make NMConfig implement GInitable

This commit is contained in:
Thomas Haller
2015-01-12 15:35:52 +01:00
parent 13c7f6a56d
commit cc46b182ed

View File

@@ -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;
}