[network-manager-applet: 8/10] shared: add "nm-utils/nm-compat.h"



commit e6218c3119012de935b7ef82840bd0329e7fe877
Author: Thomas Haller <thaller redhat com>
Date:   Mon Nov 20 21:51:52 2017 +0100

    shared: add "nm-utils/nm-compat.h"

 Makefile.am                 |    2 +
 shared/nm-utils/nm-compat.c |   88 +++++++++++++++++++++++++++++++++++++++++++
 shared/nm-utils/nm-compat.h |   53 ++++++++++++++++++++++++++
 3 files changed, 143 insertions(+), 0 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index cb583b1..2a79cc6 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -864,6 +864,8 @@ EXTRA_DIST += \
 
 EXTRA_DIST += \
        shared/nm-utils/gsystem-local-alloc.h \
+       shared/nm-utils/nm-compat.c \
+       shared/nm-utils/nm-compat.h \
        shared/nm-utils/nm-glib.h \
        shared/nm-utils/nm-macros-internal.h \
        shared/nm-utils/nm-shared-utils.c \
diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c
new file mode 100644
index 0000000..22ab675
--- /dev/null
+++ b/shared/nm-utils/nm-compat.c
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2017 Red Hat, Inc.
+ */
+
+#include "nm-default.h"
+
+#include "nm-compat.h"
+
+/*****************************************************************************/
+
+static void
+_get_keys_cb (const char *key, const char *val, gpointer user_data)
+{
+       GPtrArray *a = user_data;
+
+       g_ptr_array_add (a, g_strdup (key));
+}
+
+static const char **
+_get_keys (NMSettingVpn *setting,
+           gboolean is_secrets,
+           guint *out_length)
+{
+       guint len;
+       const char **keys = NULL;
+       gs_unref_ptrarray GPtrArray *a = NULL;
+
+       nm_assert (NM_IS_SETTING_VPN (setting));
+
+       a = g_ptr_array_new ();
+       if (is_secrets)
+               nm_setting_vpn_foreach_secret (setting, _get_keys_cb, a);
+       else
+               nm_setting_vpn_foreach_data_item (setting, _get_keys_cb, a);
+       len = a->len;
+
+       if (a->len) {
+               g_ptr_array_sort (a, nm_strcmp_p);
+               g_ptr_array_add (a, NULL);
+               keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), FALSE);
+
+               /* we need to cache the keys *somewhere*. */
+               g_object_set_qdata_full (G_OBJECT (setting),
+                                        is_secrets
+                                        ? NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_secret_keys")
+                                        : NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_data_keys"),
+                                        keys,
+                                        (GDestroyNotify) g_strfreev);
+       }
+
+       NM_SET_OUT (out_length, len);
+       return keys;
+}
+
+const char **
+_nm_setting_vpn_get_data_keys (NMSettingVpn *setting,
+                               guint *out_length)
+{
+       g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+       return _get_keys (setting, FALSE, out_length);
+}
+
+const char **
+_nm_setting_vpn_get_secret_keys (NMSettingVpn *setting,
+                                 guint *out_length)
+{
+       g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL);
+
+       return _get_keys (setting, TRUE, out_length);
+}
diff --git a/shared/nm-utils/nm-compat.h b/shared/nm-utils/nm-compat.h
new file mode 100644
index 0000000..5234169
--- /dev/null
+++ b/shared/nm-utils/nm-compat.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
+/* NetworkManager -- Network link manager
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * (C) Copyright 2017 Red Hat, Inc.
+ */
+
+#ifndef __NM_COMPAT_H__
+#define __NM_COMPAT_H__
+
+#include "nm-setting-vpn.h"
+
+const char **_nm_setting_vpn_get_data_keys (NMSettingVpn *setting,
+                                            guint *out_length);
+
+const char **_nm_setting_vpn_get_secret_keys (NMSettingVpn *setting,
+                                              guint *out_length);
+
+#if NM_CHECK_VERSION (1, 11, 0)
+#define nm_setting_vpn_get_data_keys(setting, out_length) \
+       ({ \
+               G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+               nm_setting_vpn_get_data_keys (setting, out_length); \
+               G_GNUC_END_IGNORE_DEPRECATIONS \
+       })
+#define nm_setting_vpn_get_secret_keys(setting, out_length) \
+       ({ \
+               G_GNUC_BEGIN_IGNORE_DEPRECATIONS \
+               nm_setting_vpn_get_secret_keys (setting, out_length); \
+               G_GNUC_END_IGNORE_DEPRECATIONS \
+       })
+#else
+#define nm_setting_vpn_get_data_keys(setting, out_length) \
+       _nm_setting_vpn_get_data_keys (setting, out_length)
+#define nm_setting_vpn_get_secret_keys(setting, out_length) \
+       _nm_setting_vpn_get_secret_keys (setting, out_length)
+#endif
+
+#endif /* __NM_COMPAT_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]