diff options
| author | Michael Biebl <biebl@debian.org> | 2017-12-12 15:53:07 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2017-12-12 15:53:07 +0100 |
| commit | afcd268ea7b1149fbfb66bce4eca659b675da0a2 (patch) | |
| tree | c3fca2203ad17434daf3ccf576582bd66aa41ab2 /libnm-core/nm-utils-private.h | |
| parent | 417f6015c3dc8c47cf27daa59f64e0e36c521b9c (diff) | |
New upstream version 1.10.2 upstream/1.10.2
Diffstat (limited to 'libnm-core/nm-utils-private.h')
| -rw-r--r-- | libnm-core/nm-utils-private.h | 120 |
1 files changed, 119 insertions, 1 deletions
diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h index 03c87907..c76b3200 100644 --- a/libnm-core/nm-utils-private.h +++ b/libnm-core/nm-utils-private.h @@ -15,7 +15,7 @@ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301 USA. * - * Copyright 2005 - 2014 Red Hat, Inc. + * Copyright 2005 - 2017 Red Hat, Inc. */ #ifndef __NM_UTILS_PRIVATE_H__ @@ -33,6 +33,8 @@ struct _NMVariantAttributeSpec { const GVariantType *type; bool v4:1; bool v6:1; + bool no_value:1; + bool consumes_rest:1; char str_type; }; @@ -78,4 +80,120 @@ void _nm_utils_bytes_from_dbus (GVariant *dbus_value, char * _nm_utils_hwaddr_canonical_or_invalid (const char *mac, gssize length); +GPtrArray * _nm_utils_team_link_watchers_from_variant (GVariant *value); +GVariant * _nm_utils_team_link_watchers_to_variant (GPtrArray *link_watchers); + +/* JSON to GValue conversion macros */ + +typedef struct { + const char *key1; + const char *key2; + const char *key3; + union { + int default_int; + gboolean default_bool; + const char *default_str; + }; +} _NMUtilsTeamPropertyKeys; + +static inline int +_nm_utils_json_extract_int (char *conf, + _NMUtilsTeamPropertyKeys key, + gboolean is_port) +{ + gs_free GValue *t_value = NULL; + int ret; + + t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port); + if (!t_value) + return key.default_int; + + ret = g_value_get_int (t_value); + g_value_unset (t_value); + return ret; +} + +static inline gboolean +_nm_utils_json_extract_boolean (char *conf, + _NMUtilsTeamPropertyKeys key, + gboolean is_port) +{ + gs_free GValue *t_value = NULL; + gboolean ret; + + t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port); + if (!t_value) + return key.default_bool; + + ret = g_value_get_boolean (t_value); + g_value_unset (t_value); + return ret; +} + +static inline char * +_nm_utils_json_extract_string (char *conf, + _NMUtilsTeamPropertyKeys key, + gboolean is_port) +{ + gs_free GValue *t_value = NULL; + char *ret; + + t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port); + if (!t_value) + return g_strdup (key.default_str); + + ret = g_value_dup_string (t_value); + g_value_unset (t_value); + return ret; +} + +static inline char ** +_nm_utils_json_extract_strv (char *conf, + _NMUtilsTeamPropertyKeys key, + gboolean is_port) +{ + gs_free GValue *t_value = NULL; + char **ret; + + t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port); + if (!t_value) + return NULL; + + ret = g_strdupv (g_value_get_boxed (t_value)); + g_value_unset (t_value); + return ret; +} + +static inline GPtrArray * +_nm_utils_json_extract_ptr_array (char *conf, + _NMUtilsTeamPropertyKeys key, + gboolean is_port) +{ + gs_free GValue *t_value = NULL; + GPtrArray *data, *ret; + guint i; + + ret = g_ptr_array_new_with_free_func ((GDestroyNotify) nm_team_link_watcher_unref); + t_value = _nm_utils_team_config_get (conf, key.key1, key.key2, key.key3, is_port); + if (!t_value) + return ret; + + data = g_value_get_boxed (t_value); + if (!data) + return ret; + + for (i = 0; i < data->len; i++) + g_ptr_array_add (ret, nm_team_link_watcher_dup (data->pdata[i])); + g_value_unset (t_value); + return ret; +} + +static inline void +_nm_utils_json_append_gvalue (char **conf, + _NMUtilsTeamPropertyKeys key, + const GValue *val) +{ + _nm_utils_team_config_set (conf, key.key1, key.key2, key.key3, val); +} + #endif |