From 1f33a59a0f075a7121c773c2b4e318599d3e64a4 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 27 Apr 2021 09:18:00 +0200 Subject: [PATCH] cli: use const argument for nmc_string_is_valid() With a const argument, we can make variables static const, which means the linker loads the memory as read only. Also, use NM_CAST_STRV_CC() macro, which casts the argument accordingly. --- src/libnmc-base/nm-client-utils.c | 10 +++++----- src/libnmc-base/nm-client-utils.h | 5 ++++- src/nmcli/utils.h | 33 +++++++++++++++---------------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/src/libnmc-base/nm-client-utils.c b/src/libnmc-base/nm-client-utils.c index 701f8e1834..f18408e818 100644 --- a/src/libnmc-base/nm-client-utils.c +++ b/src/libnmc-base/nm-client-utils.c @@ -175,12 +175,12 @@ nmc_string_to_ternary(const char *str, NMTernary *val, GError **error) * On failure: error->code : 0 - string not found; 1 - string is ambiguous */ const char * -nmc_string_is_valid(const char *input, const char **allowed, GError **error) +_nmc_string_is_valid(const char *input, const char *const *allowed, GError **error) { - const char **p; - size_t input_ln, p_len; - const char * partial_match = NULL; - gboolean ambiguous = FALSE; + const char *const *p; + size_t input_ln, p_len; + const char * partial_match = NULL; + gboolean ambiguous = FALSE; g_return_val_if_fail(!error || !*error, NULL); diff --git a/src/libnmc-base/nm-client-utils.h b/src/libnmc-base/nm-client-utils.h index 7017e39a75..0fcc06582d 100644 --- a/src/libnmc-base/nm-client-utils.h +++ b/src/libnmc-base/nm-client-utils.h @@ -12,7 +12,10 @@ const NMObject **nmc_objects_sort_by_path(const NMObject *const *objs, gssize len); -const char *nmc_string_is_valid(const char *input, const char **allowed, GError **error); +const char *_nmc_string_is_valid(const char *input, const char *const *allowed, GError **error); + +#define nmc_string_is_valid(input, allowed, error) \ + _nmc_string_is_valid((input), NM_CAST_STRV_CC(allowed), (error)) gboolean nmc_string_to_uint(const char * str, gboolean range_check, diff --git a/src/nmcli/utils.h b/src/nmcli/utils.h index 962f49fb6b..1a1e7e1dd4 100644 --- a/src/nmcli/utils.h +++ b/src/nmcli/utils.h @@ -33,23 +33,22 @@ void nmc_terminal_show_progress(const char *str); pid_t nmc_terminal_spawn_pager(const NmcConfig *nmc_config); char * nmc_colorize(const NmcConfig *nmc_config, NMMetaColor color, const char *fmt, ...) _nm_printf(3, 4); -void nmc_filter_out_colors_inplace(char *str); -char * nmc_filter_out_colors(const char *str); -char * nmc_get_user_input(const char *ask_str); -int nmc_string_to_arg_array(const char *line, - const char *delim, - gboolean unquote, - char *** argv, - int * argc); -const char *nmc_string_is_valid(const char *input, const char **allowed, GError **error); -char * nmc_util_strv_for_display(const char *const *strv, gboolean brackets); -int nmc_string_screen_width(const char *start, const char *end); -void set_val_str(NmcOutputField fields_array[], guint32 index, char *value); -void set_val_strc(NmcOutputField fields_array[], guint32 index, const char *value); -void set_val_arr(NmcOutputField fields_array[], guint32 index, char **value); -void set_val_arrc(NmcOutputField fields_array[], guint32 index, const char **value); -void set_val_color_all(NmcOutputField fields_array[], NMMetaColor color); -void nmc_free_output_field_values(NmcOutputField fields_array[]); +void nmc_filter_out_colors_inplace(char *str); +char *nmc_filter_out_colors(const char *str); +char *nmc_get_user_input(const char *ask_str); +int nmc_string_to_arg_array(const char *line, + const char *delim, + gboolean unquote, + char *** argv, + int * argc); +char *nmc_util_strv_for_display(const char *const *strv, gboolean brackets); +int nmc_string_screen_width(const char *start, const char *end); +void set_val_str(NmcOutputField fields_array[], guint32 index, char *value); +void set_val_strc(NmcOutputField fields_array[], guint32 index, const char *value); +void set_val_arr(NmcOutputField fields_array[], guint32 index, char **value); +void set_val_arrc(NmcOutputField fields_array[], guint32 index, const char **value); +void set_val_color_all(NmcOutputField fields_array[], NMMetaColor color); +void nmc_free_output_field_values(NmcOutputField fields_array[]); GArray * parse_output_fields(const char * fields_str, const NMMetaAbstractInfo *const *fields_array,