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.
This commit is contained in:
@@ -135,3 +135,64 @@ nmc_client_new_waitsync(GCancellable *cancellable,
|
|||||||
}
|
}
|
||||||
return TRUE;
|
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;
|
||||||
|
}
|
||||||
|
@@ -21,4 +21,8 @@ gboolean nmc_client_new_waitsync(GCancellable *cancellable,
|
|||||||
const char *first_property_name,
|
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__ */
|
#endif /* __NM_LIBNM_AUX_H__ */
|
||||||
|
Reference in New Issue
Block a user