summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2020-10-08 12:33:16 +0200
committerThomas Haller <thaller@redhat.com>2020-10-08 17:01:27 +0200
commit537f934cb4778bcb055b2fb1fb1daefadda709ec (patch)
treeb77f6ab5222a7a4b43b6618bb397897fd3ab06a9
parentb7da3da7ac6574e5f70b26352491282b25f726ee (diff)
downloadNetworkManager-th/cli-cleanup-set-color.tar.gz
cli: introduce NmcColorPalette struct instead of plain arrayth/cli-cleanup-set-color
We do have types in C. Use them.
-rw-r--r--clients/cli/nmcli.c107
-rw-r--r--clients/cli/nmcli.h8
-rw-r--r--clients/cli/utils.c16
3 files changed, 84 insertions, 47 deletions
diff --git a/clients/cli/nmcli.c b/clients/cli/nmcli.c
index 0f4023f61a..79922ee965 100644
--- a/clients/cli/nmcli.c
+++ b/clients/cli/nmcli.c
@@ -33,26 +33,48 @@
#define NMCLI_VERSION VERSION
#endif
-#define DEFAULT_PALETTE_INIT \
- [NM_META_COLOR_CONNECTION_ACTIVATED] = "32", [NM_META_COLOR_CONNECTION_ACTIVATING] = "33", \
- [NM_META_COLOR_CONNECTION_DISCONNECTING] = "31", [NM_META_COLOR_CONNECTION_INVISIBLE] = "2", \
- [NM_META_COLOR_CONNECTION_EXTERNAL] = "32;2", [NM_META_COLOR_CONNECTIVITY_FULL] = "32", \
- [NM_META_COLOR_CONNECTIVITY_LIMITED] = "33", [NM_META_COLOR_CONNECTIVITY_NONE] = "31", \
- [NM_META_COLOR_CONNECTIVITY_PORTAL] = "33", [NM_META_COLOR_DEVICE_ACTIVATED] = "32", \
- [NM_META_COLOR_DEVICE_ACTIVATING] = "33", [NM_META_COLOR_DEVICE_DISCONNECTED] = "31", \
- [NM_META_COLOR_DEVICE_FIRMWARE_MISSING] = "31", [NM_META_COLOR_DEVICE_PLUGIN_MISSING] = "31", \
- [NM_META_COLOR_DEVICE_UNAVAILABLE] = "2", [NM_META_COLOR_DEVICE_DISABLED] = "31", \
- [NM_META_COLOR_DEVICE_EXTERNAL] = "32;2", [NM_META_COLOR_MANAGER_RUNNING] = "32", \
- [NM_META_COLOR_MANAGER_STARTING] = "33", [NM_META_COLOR_MANAGER_STOPPED] = "31", \
- [NM_META_COLOR_PERMISSION_AUTH] = "33", [NM_META_COLOR_PERMISSION_NO] = "31", \
- [NM_META_COLOR_PERMISSION_YES] = "32", [NM_META_COLOR_STATE_ASLEEP] = "31", \
- [NM_META_COLOR_STATE_CONNECTED_GLOBAL] = "32", [NM_META_COLOR_STATE_CONNECTED_LOCAL] = "32", \
- [NM_META_COLOR_STATE_CONNECTED_SITE] = "32", [NM_META_COLOR_STATE_CONNECTING] = "33", \
- [NM_META_COLOR_STATE_DISCONNECTED] = "31", [NM_META_COLOR_STATE_DISCONNECTING] = "33", \
- [NM_META_COLOR_WIFI_SIGNAL_EXCELLENT] = "32", [NM_META_COLOR_WIFI_SIGNAL_FAIR] = "35", \
- [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "33", [NM_META_COLOR_WIFI_SIGNAL_POOR] = "36", \
- [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "2", [NM_META_COLOR_ENABLED] = "32", \
- [NM_META_COLOR_DISABLED] = "31",
+#define _NMC_COLOR_PALETTE_INIT() \
+ { \
+ .ansi_seq = { \
+ [NM_META_COLOR_CONNECTION_ACTIVATED] = "32", \
+ [NM_META_COLOR_CONNECTION_ACTIVATING] = "33", \
+ [NM_META_COLOR_CONNECTION_DISCONNECTING] = "31", \
+ [NM_META_COLOR_CONNECTION_INVISIBLE] = "2", \
+ [NM_META_COLOR_CONNECTION_EXTERNAL] = "32;2", \
+ [NM_META_COLOR_CONNECTIVITY_FULL] = "32", \
+ [NM_META_COLOR_CONNECTIVITY_LIMITED] = "33", \
+ [NM_META_COLOR_CONNECTIVITY_NONE] = "31", \
+ [NM_META_COLOR_CONNECTIVITY_PORTAL] = "33", \
+ [NM_META_COLOR_DEVICE_ACTIVATED] = "32", \
+ [NM_META_COLOR_DEVICE_ACTIVATING] = "33", \
+ [NM_META_COLOR_DEVICE_DISCONNECTED] = "31", \
+ [NM_META_COLOR_DEVICE_FIRMWARE_MISSING] = "31", \
+ [NM_META_COLOR_DEVICE_PLUGIN_MISSING] = "31", \
+ [NM_META_COLOR_DEVICE_UNAVAILABLE] = "2", \
+ [NM_META_COLOR_DEVICE_DISABLED] = "31", \
+ [NM_META_COLOR_DEVICE_EXTERNAL] = "32;2", \
+ [NM_META_COLOR_MANAGER_RUNNING] = "32", \
+ [NM_META_COLOR_MANAGER_STARTING] = "33", \
+ [NM_META_COLOR_MANAGER_STOPPED] = "31", \
+ [NM_META_COLOR_PERMISSION_AUTH] = "33", \
+ [NM_META_COLOR_PERMISSION_NO] = "31", \
+ [NM_META_COLOR_PERMISSION_YES] = "32", \
+ [NM_META_COLOR_STATE_ASLEEP] = "31", \
+ [NM_META_COLOR_STATE_CONNECTED_GLOBAL] = "32", \
+ [NM_META_COLOR_STATE_CONNECTED_LOCAL] = "32", \
+ [NM_META_COLOR_STATE_CONNECTED_SITE] = "32", \
+ [NM_META_COLOR_STATE_CONNECTING] = "33", \
+ [NM_META_COLOR_STATE_DISCONNECTED] = "31", \
+ [NM_META_COLOR_STATE_DISCONNECTING] = "33", \
+ [NM_META_COLOR_WIFI_SIGNAL_EXCELLENT] = "32", \
+ [NM_META_COLOR_WIFI_SIGNAL_FAIR] = "35", \
+ [NM_META_COLOR_WIFI_SIGNAL_GOOD] = "33", \
+ [NM_META_COLOR_WIFI_SIGNAL_POOR] = "36", \
+ [NM_META_COLOR_WIFI_SIGNAL_UNKNOWN] = "2", \
+ [NM_META_COLOR_ENABLED] = "32", \
+ [NM_META_COLOR_DISABLED] = "31", \
+ }, \
+ }
static NmCli nm_cli = {
.client = NULL,
@@ -76,7 +98,7 @@ static NmCli nm_cli = {
.complete = FALSE,
.nmc_config.show_secrets = FALSE,
.nmc_config.in_editor = FALSE,
- .nmc_config.palette = {DEFAULT_PALETTE_INIT},
+ .nmc_config.palette = _NMC_COLOR_PALETTE_INIT(),
.editor_status_line = FALSE,
.editor_save_confirmation = TRUE,
};
@@ -565,12 +587,13 @@ static NM_UTILS_STRING_TABLE_LOOKUP_DEFINE(
{"wifi-signal-unknown", NM_META_COLOR_WIFI_SIGNAL_UNKNOWN}, );
static gboolean
-parse_color_scheme(char * palette_buffer,
- const char **palette /* _NM_META_COLOR_NUM elements */,
- GError ** error)
+parse_color_scheme(char *palette_buffer, NmcColorPalette *out_palette, GError **error)
{
- char * p = palette_buffer;
- const char *tmp_palette[_NM_META_COLOR_NUM] = {DEFAULT_PALETTE_INIT};
+ char *p = palette_buffer;
+
+ nm_assert(out_palette);
+
+ *out_palette = (NmcColorPalette) _NMC_COLOR_PALETTE_INIT();
/* This reads through the raw color scheme file contents, identifying the
* color names and sequences, putting in terminating NULs in place, so that
@@ -647,34 +670,46 @@ parse_color_scheme(char * palette_buffer,
continue;
}
- tmp_palette[name_idx] = _resolve_color_alias(color) ?: color;
+ out_palette->ansi_seq[name_idx] = _resolve_color_alias(color) ?: color;
}
- memcpy(palette, tmp_palette, sizeof(tmp_palette));
return TRUE;
}
static void
-set_colors(NmcColorOption color_option,
- bool * out_use_colors,
- char ** out_palette_buffer,
- const char ** palette /* _NM_META_COLOR_NUM elements */)
+set_colors(NmcColorOption color_option,
+ bool * out_use_colors,
+ char ** out_palette_buffer,
+ NmcColorPalette *out_palette)
{
gs_free char *palette_str = NULL;
gboolean use_colors;
+ gboolean palette_set = FALSE;
+
+ nm_assert(out_use_colors);
+ nm_assert(out_palette);
+ nm_assert(out_palette_buffer && !*out_palette_buffer);
use_colors = check_colors(color_option, &palette_str);
*out_use_colors = use_colors;
+
if (use_colors && palette_str) {
- GError *error = NULL;
+ gs_free_error GError *error = NULL;
+ NmcColorPalette palette;
- if (!parse_color_scheme(palette_str, palette, &error)) {
+ if (!parse_color_scheme(palette_str, &palette, &error)) {
g_debug("Error parsing color scheme: %s", error->message);
g_error_free(error);
- } else
+ } else {
*out_palette_buffer = g_steal_pointer(&palette_str);
+ *out_palette = palette;
+ palette_set = TRUE;
+ }
}
+
+ if (!palette_set)
+ *out_palette = (NmcColorPalette) _NMC_COLOR_PALETTE_INIT();
}
/*************************************************************************************/
@@ -873,7 +908,7 @@ process_command_line(NmCli *nmc, int argc, char **argv_orig)
set_colors(colors,
&nmc->nmc_config_mutable.use_colors,
&nmc->palette_buffer,
- nmc->nmc_config_mutable.palette);
+ &nmc->nmc_config_mutable.palette);
/* Now run the requested command */
nmc_do_cmd(nmc, nmcli_cmds, *argv, argc, argv);
diff --git a/clients/cli/nmcli.h b/clients/cli/nmcli.h
index 1cd2e2a757..e1c70b841c 100644
--- a/clients/cli/nmcli.h
+++ b/clients/cli/nmcli.h
@@ -73,6 +73,10 @@ typedef enum {
NMC_OF_FLAG_MAIN_HEADER_ONLY = 0x00000008, /* Print main header only */
} NmcOfFlags;
+typedef struct {
+ const char *ansi_seq[_NM_META_COLOR_NUM];
+} NmcColorPalette;
+
extern const NMMetaType nmc_meta_type_generic_info;
typedef struct _NmcOutputField NmcOutputField;
@@ -96,8 +100,8 @@ typedef struct _NmcConfig {
bool in_editor; /* Whether running the editor - nmcli con edit' */
bool
show_secrets; /* Whether to display secrets (both input and output): option '--show-secrets' */
- bool overview; /* Overview mode (hide default values) */
- const char *palette[_NM_META_COLOR_NUM]; /* Color palette */
+ bool overview; /* Overview mode (hide default values) */
+ NmcColorPalette palette;
} NmcConfig;
typedef struct {
diff --git a/clients/cli/utils.c b/clients/cli/utils.c
index 2e7b22ce6f..72ba9c6d86 100644
--- a/clients/cli/utils.c
+++ b/clients/cli/utils.c
@@ -374,23 +374,21 @@ nmc_terminal_show_progress(const char *str)
char *
nmc_colorize(const NmcConfig *nmc_config, NMMetaColor color, const char *fmt, ...)
{
- va_list args;
- char * str, *colored;
- const char *ansi_seq = NULL;
+ va_list args;
+ gs_free char *str = NULL;
+ const char * ansi_seq = NULL;
va_start(args, fmt);
str = g_strdup_vprintf(fmt, args);
va_end(args);
if (nmc_config->use_colors)
- ansi_seq = nmc_config->palette[color];
+ ansi_seq = nmc_config->palette.ansi_seq[color];
- if (ansi_seq == NULL)
- return str;
+ if (!ansi_seq)
+ return g_steal_pointer(&str);
- colored = g_strdup_printf("\33[%sm%s\33[0m", ansi_seq, str);
- g_free(str);
- return colored;
+ return g_strdup_printf("\33[%sm%s\33[0m", ansi_seq, str);
}
/*