diff --git a/src/main-utils.c b/src/main-utils.c index c4d0eeb902..132b708916 100644 --- a/src/main-utils.c +++ b/src/main-utils.c @@ -231,7 +231,8 @@ nm_main_utils_early_setup (const char *progname, int *argc, char **argv[], GOptionEntry *options, - GOptionEntry *more_options, + void (*option_context_hook) (gpointer user_data, GOptionContext *opt_ctx), + gpointer option_context_hook_data, const char *summary) { GOptionContext *opt_ctx = NULL; @@ -276,9 +277,9 @@ nm_main_utils_early_setup (const char *progname, g_option_context_set_ignore_unknown_options (opt_ctx, FALSE); g_option_context_set_help_enabled (opt_ctx, TRUE); g_option_context_add_main_entries (opt_ctx, options, NULL); - if (more_options) - g_option_context_add_main_entries (opt_ctx, more_options, NULL); g_option_context_set_summary (opt_ctx, summary); + if (option_context_hook) + option_context_hook (option_context_hook_data, opt_ctx); success = g_option_context_parse (opt_ctx, argc, argv, &error); if (!success) { diff --git a/src/main-utils.h b/src/main-utils.h index 1fceb35006..4242ce4d01 100644 --- a/src/main-utils.h +++ b/src/main-utils.h @@ -37,7 +37,8 @@ gboolean nm_main_utils_early_setup (const char *progname, int *argc, char **argv[], GOptionEntry *options, - GOptionEntry *more_options, + void (*option_context_hook) (gpointer user_data, GOptionContext *opt_ctx), + gpointer option_context_hook_data, const char *summary); #endif /* __MAIN_UTILS_H__ */ diff --git a/src/main.c b/src/main.c index 53e829cd72..f7742de223 100644 --- a/src/main.c +++ b/src/main.c @@ -217,7 +217,7 @@ manager_configure_quit (NMManager *manager, gpointer user_data) } static void -do_early_setup (int *argc, char **argv[]) +do_early_setup (int *argc, char **argv[], NMConfigCmdLineOptions *config_cli) { GOptionEntry options[] = { { "version", 'V', 0, G_OPTION_ARG_NONE, &global_opt.show_version, N_("Print NetworkManager version and exit"), NULL }, @@ -234,11 +234,13 @@ do_early_setup (int *argc, char **argv[]) {NULL} }; + config_cli = nm_config_cmd_line_options_new (); if (!nm_main_utils_early_setup ("NetworkManager", argc, argv, options, - nm_config_get_options (), + (void (*)(gpointer, GOptionContext *)) nm_config_cmd_line_options_add_to_entries, + config_cli, _("NetworkManager monitors all network connections and automatically\nchooses the best connection to use. It also allows the user to\nspecify wireless access points which wireless cards in the computer\nshould associate with."))) exit (1); @@ -267,6 +269,7 @@ main (int argc, char *argv[]) GError *error = NULL; gboolean wrote_pidfile = FALSE; char *bad_domains = NULL; + NMConfigCmdLineOptions *config_cli; #if !GLIB_CHECK_VERSION (2, 35, 0) g_type_init (); @@ -276,7 +279,8 @@ main (int argc, char *argv[]) main_loop = g_main_loop_new (NULL, FALSE); - do_early_setup (&argc, &argv); + config_cli = nm_config_cmd_line_options_new (); + do_early_setup (&argc, &argv, config_cli); if (global_opt.g_fatal_warnings) _set_g_fatal_warnings (); @@ -338,7 +342,9 @@ main (int argc, char *argv[]) } /* Read the config file and CLI overrides */ - config = nm_config_new (&error); + config = nm_config_setup (config_cli, &error); + nm_config_cmd_line_options_free (config_cli); + config_cli = NULL; if (config == NULL) { fprintf (stderr, _("Failed to read configuration: (%d) %s\n"), error ? error->code : -1, diff --git a/src/nm-config.c b/src/nm-config.c index 8e0be25c2d..7f3960b376 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -38,7 +38,23 @@ #define NM_OLD_SYSTEM_CONF_FILE NMCONFDIR "/nm-system-settings.conf" #define NM_NO_AUTO_DEFAULT_STATE_FILE NMSTATEDIR "/no-auto-default.state" +struct NMConfigCmdLineOptions { + char *config_path; + char *config_dir; + char *no_auto_default_file; + char *plugins; + char *connectivity_uri; + + /* We store interval as signed internally to track whether it's + * set or not via GOptionEntry + */ + int connectivity_interval; + char *connectivity_response; +}; + typedef struct { + NMConfigCmdLineOptions cli; + char *nm_conf_path; char *config_dir; char *config_description; @@ -57,7 +73,7 @@ typedef struct { char *debug; char *connectivity_uri; - gint connectivity_interval; + guint connectivity_interval; char *connectivity_response; char **no_auto_default; @@ -66,8 +82,6 @@ typedef struct { gboolean configure_and_quit; } NMConfigPrivate; -static NMConfig *singleton = NULL; - G_DEFINE_TYPE (NMConfig, nm_config, G_TYPE_OBJECT) #define NM_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_CONFIG, NMConfigPrivate)) @@ -202,10 +216,7 @@ nm_config_get_connectivity_interval (NMConfig *config) { g_return_val_if_fail (config != NULL, 0); - /* We store interval as signed internally to track whether it's - * set or not, but report as unsigned to callers. - */ - return MAX (NM_CONFIG_GET_PRIVATE (config)->connectivity_interval, 0); + return NM_CONFIG_GET_PRIVATE (config)->connectivity_interval; } const char * @@ -348,30 +359,76 @@ nm_config_set_ethernet_no_auto_default (NMConfig *config, NMDevice *device) /************************************************************************/ -static char *cli_config_path; -static char *cli_config_dir; -static char *cli_no_auto_default_file; -static char *cli_plugins; -static char *cli_connectivity_uri; -static int cli_connectivity_interval = -1; -static char *cli_connectivity_response; - -static GOptionEntry config_options[] = { - { "config", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_path, N_("Config file location"), N_("/path/to/config.file") }, - { "config-dir", 0, 0, G_OPTION_ARG_FILENAME, &cli_config_dir, N_("Config directory location"), N_("/path/to/config/dir") }, - { "no-auto-default", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &cli_no_auto_default_file, "no-auto-default.state location", NULL }, - { "plugins", 0, 0, G_OPTION_ARG_STRING, &cli_plugins, N_("List of plugins separated by ','"), N_("plugin1,plugin2") }, - - /* These three are hidden for now, and should eventually just go away. */ - { "connectivity-uri", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_uri, N_("An http(s) address for checking internet connectivity"), "http://example.com" }, - { "connectivity-interval", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &cli_connectivity_interval, N_("The interval between connectivity checks (in seconds)"), "60" }, - { "connectivity-response", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli_connectivity_response, N_("The expected start of the response"), N_("Bingo!") }, - {NULL} -}; -GOptionEntry * -nm_config_get_options (void) +static void +_nm_config_cmd_line_options_clear (NMConfigCmdLineOptions *cli) { - return config_options; + g_clear_pointer (&cli->config_path, g_free); + g_clear_pointer (&cli->config_dir, g_free); + g_clear_pointer (&cli->no_auto_default_file, g_free); + g_clear_pointer (&cli->plugins, g_free); + g_clear_pointer (&cli->connectivity_uri, g_free); + g_clear_pointer (&cli->connectivity_response, g_free); + cli->connectivity_interval = -1; +} + +static void +_nm_config_cmd_line_options_copy (const NMConfigCmdLineOptions *cli, NMConfigCmdLineOptions *dst) +{ + g_return_if_fail (cli); + g_return_if_fail (dst); + g_return_if_fail (cli != dst); + + _nm_config_cmd_line_options_clear (dst); + dst->config_dir = g_strdup (cli->config_dir); + dst->config_path = g_strdup (cli->config_path); + dst->no_auto_default_file = g_strdup (cli->no_auto_default_file); + dst->plugins = g_strdup (cli->plugins); + dst->connectivity_uri = g_strdup (cli->connectivity_uri); + dst->connectivity_response = g_strdup (cli->connectivity_response); + dst->connectivity_interval = cli->connectivity_interval; +} + +NMConfigCmdLineOptions * +nm_config_cmd_line_options_new () +{ + NMConfigCmdLineOptions *cli = g_new0 (NMConfigCmdLineOptions, 1); + + _nm_config_cmd_line_options_clear (cli); + return cli; +} + +void +nm_config_cmd_line_options_free (NMConfigCmdLineOptions *cli) +{ + g_return_if_fail (cli); + + _nm_config_cmd_line_options_clear (cli); + g_free (cli); +} + +void +nm_config_cmd_line_options_add_to_entries (NMConfigCmdLineOptions *cli, + GOptionContext *opt_ctx) +{ + g_return_if_fail (opt_ctx); + g_return_if_fail (cli); + + { + GOptionEntry config_options[] = { + { "config", 0, 0, G_OPTION_ARG_FILENAME, &cli->config_path, N_("Config file location"), N_("/path/to/config.file") }, + { "config-dir", 0, 0, G_OPTION_ARG_FILENAME, &cli->config_dir, N_("Config directory location"), N_("/path/to/config/dir") }, + { "no-auto-default", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &cli->no_auto_default_file, "no-auto-default.state location", NULL }, + { "plugins", 0, 0, G_OPTION_ARG_STRING, &cli->plugins, N_("List of plugins separated by ','"), N_("plugin1,plugin2") }, + + /* These three are hidden for now, and should eventually just go away. */ + { "connectivity-uri", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli->connectivity_uri, N_("An http(s) address for checking internet connectivity"), "http://example.com" }, + { "connectivity-interval", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &cli->connectivity_interval, N_("The interval between connectivity checks (in seconds)"), "60" }, + { "connectivity-response", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &cli->connectivity_response, N_("The expected start of the response"), N_("Bingo!") }, + { 0 }, + }; + + g_option_context_add_main_entries (opt_ctx, config_options, NULL); + } } /************************************************************************/ @@ -447,10 +504,10 @@ find_base_config (NMConfig *config, GError **error) GError *my_error = NULL; /* Try a user-specified config file first */ - if (cli_config_path) { + if (priv->cli.config_path) { /* Bad user-specific config file path is a hard error */ - if (read_config (config, cli_config_path, error)) { - priv->nm_conf_path = g_strdup (cli_config_path); + if (read_config (config, priv->cli.config_path, error)) { + priv->nm_conf_path = g_strdup (priv->cli.config_path); return TRUE; } else return FALSE; @@ -502,11 +559,25 @@ find_base_config (NMConfig *config, GError **error) /************************************************************************/ +NM_DEFINE_SINGLETON_DESTRUCTOR (NMConfig); +NM_DEFINE_SINGLETON_WEAK_REF (NMConfig); + NMConfig * nm_config_get (void) { - g_assert (singleton); - return singleton; + g_assert (singleton_instance); + return singleton_instance; +} + +NMConfig * +nm_config_setup (const NMConfigCmdLineOptions *cli, GError **error) +{ + g_assert (!singleton_instance); + + singleton_instance = nm_config_new (cli, error); + if (singleton_instance) + nm_singleton_instance_weak_ref_register (); + return singleton_instance; } static int @@ -518,9 +589,8 @@ sort_asciibetically (gconstpointer a, gconstpointer b) return strcmp (s1, s2); } -/* call this function only once! */ NMConfig * -nm_config_new (GError **error) +nm_config_new (const NMConfigCmdLineOptions *cli, GError **error) { NMConfigPrivate *priv = NULL; GFile *dir; @@ -530,21 +600,25 @@ nm_config_new (GError **error) const char *name; int i; GString *config_description; + NMConfig *self; - g_assert (!singleton); - singleton = NM_CONFIG (g_object_new (NM_TYPE_CONFIG, NULL)); - priv = NM_CONFIG_GET_PRIVATE (singleton); + self = NM_CONFIG (g_object_new (NM_TYPE_CONFIG, NULL)); + priv = NM_CONFIG_GET_PRIVATE (self); + + if (!cli) + _nm_config_cmd_line_options_clear (&priv->cli); + else + _nm_config_cmd_line_options_copy (cli, &priv->cli); /* First read the base config file */ - if (!find_base_config (singleton, error)) { - g_object_unref (singleton); - singleton = NULL; + if (!find_base_config (self, error)) { + g_object_unref (self); return NULL; } /* Now read the overrides in the config dir */ - if (cli_config_dir) - priv->config_dir = g_strdup (cli_config_dir); + if (priv->cli.config_dir) + priv->config_dir = g_strdup (priv->cli.config_dir); else priv->config_dir = g_strdup (NM_DEFAULT_SYSTEM_CONF_DIR); @@ -572,27 +646,27 @@ nm_config_new (GError **error) g_ptr_array_sort (confs, sort_asciibetically); priv->config_description = g_string_free (config_description, FALSE); for (i = 0; i < confs->len; i++) { - if (!read_config (singleton, confs->pdata[i], error)) { - g_object_unref (singleton); - singleton = NULL; + if (!read_config (self, confs->pdata[i], error)) { + g_object_unref (self); + self = NULL; break; } } g_ptr_array_unref (confs); - if (!singleton) + if (!self) return NULL; /* Handle no-auto-default key and state file */ priv->no_auto_default = g_key_file_get_string_list (priv->keyfile, "main", "no-auto-default", NULL, NULL); - if (cli_no_auto_default_file) - priv->no_auto_default_file = g_strdup (cli_no_auto_default_file); + if (priv->cli.no_auto_default_file) + priv->no_auto_default_file = g_strdup (priv->cli.no_auto_default_file); else priv->no_auto_default_file = g_strdup (NM_NO_AUTO_DEFAULT_STATE_FILE); - merge_no_auto_default_state (singleton); + merge_no_auto_default_state (self); /* Now let command-line options override the config files, and fill in priv. */ - if (cli_plugins && cli_plugins[0]) - g_key_file_set_value (priv->keyfile, "main", "plugins", cli_plugins); + if (priv->cli.plugins && priv->cli.plugins[0]) + g_key_file_set_value (priv->keyfile, "main", "plugins", priv->cli.plugins); priv->plugins = g_key_file_get_string_list (priv->keyfile, "main", "plugins", NULL, NULL); if (!priv->plugins && STRLEN (CONFIG_PLUGINS_DEFAULT) > 0) priv->plugins = g_strsplit (CONFIG_PLUGINS_DEFAULT, ",", -1); @@ -609,23 +683,23 @@ nm_config_new (GError **error) priv->debug = g_key_file_get_value (priv->keyfile, "main", "debug", NULL); - if (cli_connectivity_uri && cli_connectivity_uri[0]) - g_key_file_set_value (priv->keyfile, "connectivity", "uri", cli_connectivity_uri); + if (priv->cli.connectivity_uri && priv->cli.connectivity_uri[0]) + g_key_file_set_value (priv->keyfile, "connectivity", "uri", priv->cli.connectivity_uri); priv->connectivity_uri = g_key_file_get_value (priv->keyfile, "connectivity", "uri", NULL); - if (cli_connectivity_interval >= 0) - g_key_file_set_integer (priv->keyfile, "connectivity", "interval", cli_connectivity_interval); + if (priv->cli.connectivity_interval >= 0) + g_key_file_set_integer (priv->keyfile, "connectivity", "interval", priv->cli.connectivity_interval); priv->connectivity_interval = g_key_file_get_integer (priv->keyfile, "connectivity", "interval", NULL); - if (cli_connectivity_response && cli_connectivity_response[0]) - g_key_file_set_value (priv->keyfile, "connectivity", "response", cli_connectivity_response); + if (priv->cli.connectivity_response && priv->cli.connectivity_response[0]) + g_key_file_set_value (priv->keyfile, "connectivity", "response", priv->cli.connectivity_response); priv->connectivity_response = g_key_file_get_value (priv->keyfile, "connectivity", "response", NULL); priv->ignore_carrier = g_key_file_get_string_list (priv->keyfile, "main", "ignore-carrier", NULL, NULL); priv->configure_and_quit = _get_bool_value (priv->keyfile, "main", "configure-and-quit", FALSE); - return singleton; + return self; } static void @@ -637,8 +711,6 @@ nm_config_init (NMConfig *config) priv->keyfile = g_key_file_new (); g_key_file_set_list_separator (priv->keyfile, ','); - - priv->connectivity_interval = -1; } static void @@ -662,14 +734,7 @@ finalize (GObject *gobject) g_strfreev (priv->no_auto_default); g_strfreev (priv->ignore_carrier); - singleton = NULL; - - g_clear_pointer (&cli_config_path, g_free); - g_clear_pointer (&cli_config_dir, g_free); - g_clear_pointer (&cli_no_auto_default_file, g_free); - g_clear_pointer (&cli_plugins, g_free); - g_clear_pointer (&cli_connectivity_uri, g_free); - g_clear_pointer (&cli_connectivity_response, g_free); + _nm_config_cmd_line_options_clear (&priv->cli); G_OBJECT_CLASS (nm_config_parent_class)->finalize (gobject); } diff --git a/src/nm-config.h b/src/nm-config.h index ca9d3640f3..e62edd7a59 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -36,6 +36,8 @@ G_BEGIN_DECLS #define NM_IS_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_CONFIG)) #define NM_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_CONFIG, NMConfigClass)) +typedef struct NMConfigCmdLineOptions NMConfigCmdLineOptions; + struct _NMConfig { GObject parent; }; @@ -71,8 +73,13 @@ gboolean nm_config_get_ignore_carrier (NMConfig *config, NMDevice *device); char *nm_config_get_value (NMConfig *config, const char *group, const char *key, GError **error); /* for main.c only */ -GOptionEntry *nm_config_get_options (void); -NMConfig *nm_config_new (GError **error); +NMConfigCmdLineOptions *nm_config_cmd_line_options_new (void); +void nm_config_cmd_line_options_free (NMConfigCmdLineOptions *cli); +void nm_config_cmd_line_options_add_to_entries (NMConfigCmdLineOptions *cli, + GOptionContext *opt_ctx); + +NMConfig *nm_config_new (const NMConfigCmdLineOptions *cli, GError **error); +NMConfig *nm_config_setup (const NMConfigCmdLineOptions *cli, GError **error); G_END_DECLS diff --git a/src/nm-iface-helper.c b/src/nm-iface-helper.c index 97e1708e3c..d53f8b43b8 100644 --- a/src/nm-iface-helper.c +++ b/src/nm-iface-helper.c @@ -320,6 +320,7 @@ do_early_setup (int *argc, char **argv[]) argv, options, NULL, + NULL, _("nm-iface-helper is a small, standalone process that manages a single network interface."))) exit (1); diff --git a/src/tests/config/test-config.c b/src/tests/config/test-config.c index e027eab84e..2973bcc284 100644 --- a/src/tests/config/test-config.c +++ b/src/tests/config/test-config.c @@ -32,8 +32,8 @@ #include "nm-test-utils.h" -static void -setup_config (const char *config_file, const char *config_dir, ...) +static NMConfig * +setup_config (GError **error, const char *config_file, const char *config_dir, ...) { va_list ap; GPtrArray *args; @@ -41,6 +41,11 @@ setup_config (const char *config_file, const char *config_dir, ...) int argc; GOptionContext *context; gboolean success; + NMConfig *config; + GError *local_error = NULL; + NMConfigCmdLineOptions *cli; + + g_assert (!error || !*error); args = g_ptr_array_new (); g_ptr_array_add (args, "test-config"); @@ -57,8 +62,10 @@ setup_config (const char *config_file, const char *config_dir, ...) argv = (char **)args->pdata; argc = args->len; + cli = nm_config_cmd_line_options_new (); + context = g_option_context_new (NULL); - g_option_context_add_main_entries (context, nm_config_get_options (), NULL); + nm_config_cmd_line_options_add_to_entries (cli, context); success = g_option_context_parse (context, &argc, &argv, NULL); g_option_context_free (context); @@ -66,6 +73,18 @@ setup_config (const char *config_file, const char *config_dir, ...) g_printerr ("Invalid options.\n"); g_ptr_array_free (args, TRUE); + + config = nm_config_setup (cli, &local_error); + if (error) { + g_assert (!config); + g_assert (local_error); + g_propagate_error (error, local_error); + } else { + g_assert (config); + g_assert_no_error (local_error); + } + nm_config_cmd_line_options_free (cli); + return config; } static void @@ -76,9 +95,7 @@ test_config_simple (void) const char **plugins; char *value; - setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir", NULL); - config = nm_config_new (&error); - g_assert_no_error (error); + config = setup_config (NULL, SRCDIR "/NetworkManager.conf", "/no/such/dir", NULL); g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf"); g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhclient"); @@ -111,40 +128,33 @@ test_config_simple (void) static void test_config_non_existent (void) { - NMConfig *config; gs_free_error GError *error = NULL; - setup_config (SRCDIR "/no-such-file", "/no/such/dir", NULL); - config = nm_config_new (&error); - g_assert (!config); + setup_config (&error, SRCDIR "/no-such-file", "/no/such/dir", NULL); g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_NOT_FOUND); + g_clear_error (&error); } static void test_config_parse_error (void) { - NMConfig *config; gs_free_error GError *error = NULL; - setup_config (SRCDIR "/bad.conf", "/no/such/dir", NULL); - config = nm_config_new (&error); - g_assert (!config); + setup_config (&error, SRCDIR "/bad.conf", "/no/such/dir", NULL); g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); + g_clear_error (&error); } static void test_config_override (void) { NMConfig *config; - GError *error = NULL; const char **plugins; - setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir", - "--plugins", "alpha,beta,gamma,delta", - "--connectivity-interval", "12", - NULL); - config = nm_config_new (&error); - g_assert_no_error (error); + config = setup_config (NULL, SRCDIR "/NetworkManager.conf", "/no/such/dir", + "--plugins", "alpha,beta,gamma,delta", + "--connectivity-interval", "12", + NULL); g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf"); g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhclient"); @@ -179,11 +189,9 @@ test_config_no_auto_default (void) g_assert_cmpint (nwrote, ==, 18); close (fd); - setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir", - "--no-auto-default", state_file, - NULL); - config = nm_config_new (&error); - g_assert_no_error (error); + config = setup_config (NULL, SRCDIR "/NetworkManager.conf", "/no/such/dir", + "--no-auto-default", state_file, + NULL); dev1 = nm_test_device_new ("11:11:11:11:11:11"); dev2 = nm_test_device_new ("22:22:22:22:22:22"); @@ -200,11 +208,9 @@ test_config_no_auto_default (void) g_object_unref (config); - setup_config (SRCDIR "/NetworkManager.conf", "/no/such/dir", - "--no-auto-default", state_file, - NULL); - config = nm_config_new (&error); - g_assert_no_error (error); + config = setup_config (NULL, SRCDIR "/NetworkManager.conf", "/no/such/dir", + "--no-auto-default", state_file, + NULL); g_assert (!nm_config_get_ethernet_can_auto_default (config, dev1)); g_assert (!nm_config_get_ethernet_can_auto_default (config, dev2)); @@ -226,13 +232,10 @@ static void test_config_confdir (void) { NMConfig *config; - GError *error = NULL; const char **plugins; char *value; - setup_config (SRCDIR "/NetworkManager.conf", SRCDIR "/conf.d", NULL); - config = nm_config_new (&error); - g_assert_no_error (error); + config = setup_config (NULL, SRCDIR "/NetworkManager.conf", SRCDIR "/conf.d", NULL); g_assert_cmpstr (nm_config_get_path (config), ==, SRCDIR "/NetworkManager.conf"); g_assert_cmpstr (nm_config_get_dhcp_client (config), ==, "dhcpcd"); @@ -273,14 +276,12 @@ test_config_confdir (void) static void test_config_confdir_parse_error (void) { - NMConfig *config; - gs_free_error GError *error = NULL; + GError *error = NULL; /* Using SRCDIR as the conf dir will pick up bad.conf */ - setup_config (SRCDIR "/NetworkManager.conf", SRCDIR, NULL); - config = nm_config_new (&error); - g_assert (!config); + setup_config (&error, SRCDIR "/NetworkManager.conf", SRCDIR, NULL); g_assert_error (error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_PARSE); + g_clear_error (&error); } NMTST_DEFINE ();