From bc6098d441060c14cd816a0a62480d0dac698fae Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Tue, 6 Dec 2022 19:18:41 +0100 Subject: [PATCH] libnm: add internal nmc_client_has_{version_info_v,version_info_capability,capability}() helper In the end, it turned out I don't need them. They still seem useful, because they show how to use this API. In particular for how the bitfield should be parsed. --- src/libnm-client-aux-extern/nm-libnm-aux.c | 61 ++++++++++++++++++++++ src/libnm-client-aux-extern/nm-libnm-aux.h | 4 ++ 2 files changed, 65 insertions(+) diff --git a/src/libnm-client-aux-extern/nm-libnm-aux.c b/src/libnm-client-aux-extern/nm-libnm-aux.c index 573eed1d48..82a75de697 100644 --- a/src/libnm-client-aux-extern/nm-libnm-aux.c +++ b/src/libnm-client-aux-extern/nm-libnm-aux.c @@ -135,3 +135,64 @@ nmc_client_new_waitsync(GCancellable *cancellable, } return TRUE; } + +/*****************************************************************************/ + +guint32 +nmc_client_has_version_info_v(NMClient *nmc) +{ + const guint32 *ver; + gsize len; + + ver = nm_client_get_version_info(nmc, &len); + if (len < 1) + return 0; + return ver[0]; +} + +gboolean +nmc_client_has_version_info_capability(NMClient *nmc, NMVersionInfoCapability capability) +{ + const guint32 *ver; + gsize len; + gsize idx; + gsize idx_hi; + gsize idx_lo; + + ver = nm_client_get_version_info(nmc, &len); + + if (len < 2) + return FALSE; + + len--; + ver++; + + idx = (gsize) capability; + if (idx >= G_MAXSIZE - 31u) + return FALSE; + + idx_hi = ((idx + 31u) / 32u); + idx_lo = (idx % 32u); + + if (idx_hi > len) + return FALSE; + + return NM_FLAGS_ANY(ver[idx_hi], (1ull << idx_lo)); +} + +gboolean +nmc_client_has_capability(NMClient *nmc, NMCapability capability) +{ + const guint32 *caps; + gsize len; + gsize i; + + caps = nm_client_get_capabilities(nmc, &len); + + for (i = 0; i < len; i++) { + if (caps[i] == capability) + return TRUE; + } + + return FALSE; +} diff --git a/src/libnm-client-aux-extern/nm-libnm-aux.h b/src/libnm-client-aux-extern/nm-libnm-aux.h index 44344fd0b8..ae949cc5c6 100644 --- a/src/libnm-client-aux-extern/nm-libnm-aux.h +++ b/src/libnm-client-aux-extern/nm-libnm-aux.h @@ -21,4 +21,8 @@ gboolean nmc_client_new_waitsync(GCancellable *cancellable, const char *first_property_name, ...); +guint32 nmc_client_has_version_info_v(NMClient *nmc); +gboolean nmc_client_has_version_info_capability(NMClient *nmc, NMVersionInfoCapability capability); +gboolean nmc_client_has_capability(NMClient *nmc, NMCapability capability); + #endif /* __NM_LIBNM_AUX_H__ */