summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-04-04 19:46:33 +0200
committerThomas Haller <thaller@redhat.com>2020-04-04 19:46:36 +0200
commit306414b93d447e915b6de94b9b7410ff7aadc4cf (patch)
treec95524e12f0f8365b28790c6bb9ecbb8f1a9c7ca
parent2d83df38200121c9c0db56d62d07264da6c22d20 (diff)
parent038d53a74520ad9e0814cd839dc16b53f69c84c5 (diff)
downloadNetworkManager-306414b93d447e915b6de94b9b7410ff7aadc4cf.tar.gz
cli: merge branch 'th/cli-globals'
-rw-r--r--clients/cli/common.c2
-rw-r--r--clients/cli/connections.c36
-rw-r--r--clients/cli/devices.c26
-rw-r--r--clients/cli/general.c4
-rw-r--r--clients/cli/nmcli.c19
-rw-r--r--clients/cli/nmcli.h12
-rw-r--r--clients/cli/settings.c6
-rw-r--r--clients/cli/utils.c18
-rw-r--r--clients/cli/utils.h4
9 files changed, 78 insertions, 49 deletions
diff --git a/clients/cli/common.c b/clients/cli/common.c
index a5d9bcbb1a..7e9bcba860 100644
--- a/clients/cli/common.c
+++ b/clients/cli/common.c
@@ -1118,7 +1118,7 @@ nmc_rl_gen_func_ifnames (const char *text, int state)
const char **ifnames;
char *ret;
- devices = nm_client_get_devices (nm_cli.client);
+ devices = nm_client_get_devices (nm_cli_global_readline->client);
if (devices->len == 0)
return NULL;
diff --git a/clients/cli/connections.c b/clients/cli/connections.c
index 65fde6db22..7fe22adf63 100644
--- a/clients/cli/connections.c
+++ b/clients/cli/connections.c
@@ -1388,9 +1388,13 @@ nmc_connection_profile_details (NMConnection *connection, NmCli *nmc)
for (i = 0; i < _NM_META_SETTING_TYPE_NUM; i++)
row[i].info = (const NMMetaAbstractInfo *) &nm_meta_setting_infos_editor[i];
- print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
- out_indices, header_name,
- 0, row);
+ print_required_fields (&nmc->nmc_config,
+ &nmc->pager_data,
+ NMC_OF_FLAG_MAIN_HEADER_ONLY,
+ out_indices,
+ header_name,
+ 0,
+ row);
}
/* Loop through the required settings and print them. */
@@ -1473,9 +1477,13 @@ nmc_active_connection_details (NMActiveConnection *acon, NmCli *nmc)
for (i = 0; nmc_fields_con_active_details_groups[i]; i++)
row[i].info = (const NMMetaAbstractInfo *) nmc_fields_con_active_details_groups[i];
- print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
- out_indices, header_name,
- 0, row);
+ print_required_fields (&nmc->nmc_config,
+ &nmc->pager_data,
+ NMC_OF_FLAG_MAIN_HEADER_ONLY,
+ out_indices,
+ header_name,
+ 0,
+ row);
}
/* Loop through the groups and print them. */
@@ -2093,7 +2101,7 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
}
}
- nm_cli_spawn_pager (nmc);
+ nm_cli_spawn_pager (&nmc->nmc_config, &nmc->pager_data);
items = con_show_get_items (nmc, active_only, show_active_fields, order);
g_ptr_array_add (items, NULL);
@@ -3842,7 +3850,7 @@ _meta_abstract_complete (const NMMetaAbstractInfo *abstract_info, const char *te
values = nm_meta_abstract_info_complete (abstract_info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
&ctx,
text,
NULL,
@@ -4642,7 +4650,7 @@ complete_option (NmCli *nmc, const NMMetaAbstractInfo *abstract_info, const char
values = nm_meta_abstract_info_complete (abstract_info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
&ctx,
prefix,
&complete_filename,
@@ -5827,7 +5835,7 @@ gen_vpn_uuids (const char *text, int state)
const char **uuids;
char *ret;
- connections = nm_client_get_connections (nm_cli.client);
+ connections = nm_client_get_connections (nm_cli_global_readline->client);
if (connections->len < 1)
return NULL;
@@ -5844,7 +5852,7 @@ gen_vpn_ids (const char *text, int state)
const char **ids;
char *ret;
- connections = nm_client_get_connections (nm_cli.client);
+ connections = nm_client_get_connections (nm_cli_global_readline->client);
if (connections->len < 1)
return NULL;
@@ -9253,7 +9261,7 @@ gen_func_connection_names (const char *text, int state)
const char **connection_names;
char *ret;
- connections = nm_client_get_connections (nm_cli.client);
+ connections = nm_client_get_connections (nm_cli_global_readline->client);
if (connections->len == 0)
return NULL;
@@ -9276,10 +9284,10 @@ gen_func_active_connection_names (const char *text, int state)
const char **connections;
char *ret;
- if (!nm_cli.client)
+ if (!nm_cli_global_readline->client)
return NULL;
- acs = nm_client_get_active_connections (nm_cli.client);
+ acs = nm_client_get_active_connections (nm_cli_global_readline->client);
if (!acs || acs->len == 0)
return NULL;
diff --git a/clients/cli/devices.c b/clients/cli/devices.c
index d829368304..94f7c3c214 100644
--- a/clients/cli/devices.c
+++ b/clients/cli/devices.c
@@ -1340,7 +1340,7 @@ print_bond_bridge_info (NMDevice *device,
g_ptr_array_add (out.output_data, arr);
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, NULL, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, NULL, 0, &out);
g_string_free (slaves_str, FALSE);
@@ -1410,7 +1410,7 @@ print_team_info (NMDevice *device,
g_ptr_array_add (out.output_data, arr);
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, NULL, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, NULL, 0, &out);
g_string_free (slaves_str, FALSE);
@@ -1465,9 +1465,13 @@ show_device_info (NMDevice *device, NmCli *nmc)
for (i = 0; i < G_N_ELEMENTS (metagen_device_detail_general); i++)
row[i].info = (const NMMetaAbstractInfo *) &metagen_device_detail_general[i];
- print_required_fields (&nmc->nmc_config, NMC_OF_FLAG_MAIN_HEADER_ONLY,
- out_indices, header_name,
- 0, row);
+ print_required_fields (&nmc->nmc_config,
+ &nmc->pager_data,
+ NMC_OF_FLAG_MAIN_HEADER_ONLY,
+ out_indices,
+ header_name,
+ 0,
+ row);
}
/* Loop through the required sections and print them. */
@@ -1578,7 +1582,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
}
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, NULL, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, NULL, 0, &out);
was_output = TRUE;
}
}
@@ -1659,7 +1663,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
g_ptr_array_add (out.output_data, arr);
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, NULL, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, NULL, 0, &out);
was_output = TRUE;
}
@@ -1681,7 +1685,7 @@ show_device_info (NMDevice *device, NmCli *nmc)
g_ptr_array_add (out.output_data, arr);
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, NULL, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, NULL, 0, &out);
was_output = TRUE;
}
}
@@ -2870,7 +2874,7 @@ wifi_print_aps (NMDeviceWifi *wifi,
fill_output_access_point (ap, info);
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, header_name, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, header_name, 0, &out);
g_free (info);
*bssid_found = TRUE;
@@ -2878,7 +2882,7 @@ wifi_print_aps (NMDeviceWifi *wifi,
}
} else {
show_access_point_info (wifi, nmc, &out);
- print_data (&nmc->nmc_config, out_indices, header_name, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, header_name, 0, &out);
empty_line = TRUE;
}
}
@@ -4537,7 +4541,7 @@ show_device_lldp_list (NMDevice *device, NmCli *nmc, const char *fields_str, int
}
print_data_prepare_width (out.output_data);
- print_data (&nmc->nmc_config, out_indices, header_name, 0, &out);
+ print_data (&nmc->nmc_config, &nmc->pager_data, out_indices, header_name, 0, &out);
return neighbors->len;
}
diff --git a/clients/cli/general.c b/clients/cli/general.c
index 2cc86aaaf2..6e7410ed20 100644
--- a/clients/cli/general.c
+++ b/clients/cli/general.c
@@ -556,7 +556,7 @@ print_permissions (void *user_data)
permissions[i] = GINT_TO_POINTER (nm_auth_permission_sorted[i]);
permissions[i] = NULL;
- nm_cli_spawn_pager (nmc);
+ nm_cli_spawn_pager (&nmc->nmc_config, &nmc->pager_data);
if (!nmc_print (&nmc->nmc_config,
permissions,
@@ -1447,7 +1447,7 @@ do_overview (NmCli *nmc, int argc, char **argv)
/* Register polkit agent */
nmc_start_polkit_agent_start_try (nmc);
- nm_cli_spawn_pager (nmc);
+ nm_cli_spawn_pager (&nmc->nmc_config, &nmc->pager_data);
/* The VPN connections don't have devices (yet?). */
p = nm_client_get_active_connections (nmc->client);
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index 5fbd6d7261..08d3ab16e0 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -72,7 +72,7 @@
[NM_META_COLOR_ENABLED] = "32", \
[NM_META_COLOR_DISABLED] = "31", \
-NmCli nm_cli = {
+static NmCli nm_cli = {
.client = NULL,
.return_value = NMC_RESULT_SUCCESS,
@@ -101,6 +101,9 @@ NmCli nm_cli = {
.editor_save_confirmation = TRUE,
};
+const NmCli *const nm_cli_global_readline = &nm_cli;
+const NmCli *const nmc_meta_environment_arg = &nm_cli;
+
/*****************************************************************************/
typedef struct {
@@ -909,11 +912,12 @@ signal_handler (gpointer user_data)
}
void
-nm_cli_spawn_pager (NmCli *nmc)
+nm_cli_spawn_pager (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data)
{
- if (nmc->pager_pid > 0)
+ if (pager_data->pid != 0)
return;
- nmc->pager_pid = nmc_terminal_spawn_pager (&nmc->nmc_config);
+ pager_data->pid = nmc_terminal_spawn_pager (nmc_config);
}
static void
@@ -935,13 +939,14 @@ nmc_cleanup (NmCli *nmc)
nm_clear_g_free (&nmc->required_fields);
- if (nmc->pager_pid > 0) {
+ if (nmc->pager_data.pid != 0) {
+ pid_t pid = nm_steal_int (&nmc->pager_data.pid);
+
fclose (stdout);
fclose (stderr);
do {
- ret = waitpid (nmc->pager_pid, NULL, 0);
+ ret = waitpid (pid, NULL, 0);
} while (ret == -1 && errno == EINTR);
- nmc->pager_pid = 0;
}
nm_clear_g_free (&nmc->palette_buffer);
diff --git a/clients/cli/nmcli.h b/clients/cli/nmcli.h
index 4615b04689..96a1be1dde 100644
--- a/clients/cli/nmcli.h
+++ b/clients/cli/nmcli.h
@@ -101,6 +101,10 @@ typedef struct _NmcConfig {
const char *palette[_NM_META_COLOR_NUM]; /* Color palette */
} NmcConfig;
+typedef struct {
+ pid_t pid;
+} NmcPagerData;
+
typedef struct _NmcOutputData {
GPtrArray *output_data; /* GPtrArray of arrays of NmcOutputField structs - accumulates data for output */
} NmcOutputData;
@@ -111,7 +115,8 @@ typedef struct _NmCli {
NMCResultCode return_value; /* Return code of nmcli */
GString *return_text; /* Reason text */
- pid_t pager_pid; /* PID of a pager, if one was spawned */
+
+ NmcPagerData pager_data;
int timeout; /* Operation timeout */
@@ -135,7 +140,7 @@ typedef struct _NmCli {
char *palette_buffer; /* Buffer with sequences for terminal-colors.d(5)-based coloring. */
} NmCli;
-extern NmCli nm_cli;
+extern const NmCli *const nm_cli_global_readline;
/* Error quark for GError domain */
#define NMCLI_ERROR (nmcli_error_quark ())
@@ -148,7 +153,8 @@ void nmc_clear_sigint (void);
void nmc_set_sigquit_internal (void);
void nmc_exit (void);
-void nm_cli_spawn_pager (NmCli *nmc);
+void nm_cli_spawn_pager (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data);
void nmc_empty_output_fields (NmcOutputData *output_data);
diff --git a/clients/cli/settings.c b/clients/cli/settings.c
index 698471d7ef..0487fb9680 100644
--- a/clients/cli/settings.c
+++ b/clients/cli/settings.c
@@ -456,8 +456,6 @@ const NMMetaEnvironment *const nmc_meta_environment = &((NMMetaEnvironment) {
.get_nm_connections = _env_get_nm_connections,
});
-NmCli *const nmc_meta_environment_arg = &nm_cli;
-
static char *
get_property_val (NMSetting *setting, const char *prop, NMMetaAccessorGetType get_type, gboolean show_secrets, GError **error)
{
@@ -475,7 +473,7 @@ get_property_val (NMSetting *setting, const char *prop, NMMetaAccessorGetType ge
value = property_info->property_type->get_fcn (property_info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
setting,
get_type,
show_secrets ? NM_META_ACCESSOR_GET_FLAGS_SHOW_SECRETS : 0,
@@ -568,7 +566,7 @@ nmc_setting_set_property (NMClient *client,
g_object_freeze_notify (G_OBJECT (setting));
success = property_info->property_type->set_fcn (property_info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
setting,
modifier,
value,
diff --git a/clients/cli/utils.c b/clients/cli/utils.c
index d8524c55a1..67d5a742a0 100644
--- a/clients/cli/utils.c
+++ b/clients/cli/utils.c
@@ -1067,7 +1067,7 @@ _print_fill (const NmcConfig *nmc_config,
value = nm_meta_abstract_info_get (info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
target,
targets_data,
text_get_type,
@@ -1112,7 +1112,7 @@ _print_fill (const NmcConfig *nmc_config,
cell->color = GPOINTER_TO_INT (nm_meta_abstract_info_get (info,
nmc_meta_environment,
- nmc_meta_environment_arg,
+ (gpointer) nmc_meta_environment_arg,
target,
targets_data,
NM_META_ACCESSOR_GET_TYPE_COLOR,
@@ -1571,6 +1571,7 @@ get_value_to_print (const NmcConfig *nmc_config,
*/
void
print_required_fields (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data,
NmcOfFlags of_flags,
const GArray *indices,
const char *header_name,
@@ -1587,7 +1588,7 @@ print_required_fields (const NmcConfig *nmc_config,
gboolean field_names = of_flags & NMC_OF_FLAG_FIELD_NAMES;
gboolean section_prefix = of_flags & NMC_OF_FLAG_SECTION_PREFIX;
- nm_cli_spawn_pager (&nm_cli);
+ nm_cli_spawn_pager (nmc_config, pager_data);
/* --- Main header --- */
if ( nmc_config->print_output == NMC_PRINT_PRETTY
@@ -1796,6 +1797,7 @@ print_data_prepare_width (GPtrArray *output_data)
void
print_data (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data,
const GArray *indices,
const char *header_name,
int indent,
@@ -1806,9 +1808,13 @@ print_data (const NmcConfig *nmc_config,
for (i = 0; i < out->output_data->len; i++) {
const NmcOutputField *field_values = g_ptr_array_index (out->output_data, i);
- print_required_fields (nmc_config, field_values[0].flags,
- indices, header_name,
- indent, field_values);
+ print_required_fields (nmc_config,
+ pager_data,
+ field_values[0].flags,
+ indices,
+ header_name,
+ indent,
+ field_values);
}
}
diff --git a/clients/cli/utils.h b/clients/cli/utils.h
index e699a641b6..87e93ce082 100644
--- a/clients/cli/utils.h
+++ b/clients/cli/utils.h
@@ -51,6 +51,7 @@ GArray *parse_output_fields (const char *fields_str,
NmcOutputField *nmc_dup_fields_array (const NMMetaAbstractInfo *const*fields, NmcOfFlags flags);
void nmc_empty_output_fields (NmcOutputData *output_data);
void print_required_fields (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data,
NmcOfFlags of_flags,
const GArray *indices,
const char *header_name,
@@ -58,6 +59,7 @@ void print_required_fields (const NmcConfig *nmc_config,
const NmcOutputField *field_values);
void print_data_prepare_width (GPtrArray *output_data);
void print_data (const NmcConfig *nmc_config,
+ NmcPagerData *pager_data,
const GArray *indices,
const char *header_name,
int indent,
@@ -66,7 +68,7 @@ void print_data (const NmcConfig *nmc_config,
/*****************************************************************************/
extern const NMMetaEnvironment *const nmc_meta_environment;
-extern NmCli *const nmc_meta_environment_arg;
+extern const NmCli *const nmc_meta_environment_arg;
typedef enum {