summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-11-01 11:37:57 +0100
committerThomas Haller <thaller@redhat.com>2018-11-13 18:30:03 +0100
commit3746845204b77a80dacbd7a0d7272e7ca30d1e3c (patch)
tree78050c1df0e27ef0e7054c568e26b3590ce70994
parent80220024cc8793759fedaaffd383958bb9db44c0 (diff)
downloadNetworkManager-3746845204b77a80dacbd7a0d7272e7ca30d1e3c.tar.gz
shared: add nm_utils_checksum_get_digest*() helper
The GChecksum API is cumbersome to use. For example, g_checksum_get_digest() requires a length input/output argument. At the same time, GChecksum does not allow you to query its checksum-type nor the desired digest-length. When you have a GChecksum at hand, you must always know the digest-length you are going to use. So, the length parameter is only good for asserting. Add a macro to make that more convenient. Benefits: it's less lines of code, and we always do all the asserts that are due.
-rw-r--r--shared/nm-utils/nm-shared-utils.h40
1 files changed, 40 insertions, 0 deletions
diff --git a/shared/nm-utils/nm-shared-utils.h b/shared/nm-utils/nm-shared-utils.h
index bfa51def49..940a193f7d 100644
--- a/shared/nm-utils/nm-shared-utils.h
+++ b/shared/nm-utils/nm-shared-utils.h
@@ -380,6 +380,46 @@ char **_nm_utils_strv_cleanup (char **strv,
/*****************************************************************************/
+#define NM_UTILS_CHECKSUM_LENGTH_MD5 16
+#define NM_UTILS_CHECKSUM_LENGTH_SHA1 20
+#define NM_UTILS_CHECKSUM_LENGTH_SHA256 32
+
+#define nm_utils_checksum_get_digest(sum, arr) \
+ G_STMT_START { \
+ GChecksum *const _sum = (sum); \
+ gsize _len; \
+ \
+ G_STATIC_ASSERT_EXPR ( sizeof (arr) == NM_UTILS_CHECKSUM_LENGTH_MD5 \
+ || sizeof (arr) == NM_UTILS_CHECKSUM_LENGTH_SHA1 \
+ || sizeof (arr) == NM_UTILS_CHECKSUM_LENGTH_SHA256); \
+ G_STATIC_ASSERT_EXPR (sizeof (arr) == G_N_ELEMENTS (arr)); \
+ \
+ nm_assert (_sum); \
+ \
+ _len = G_N_ELEMENTS (arr); \
+ \
+ g_checksum_get_digest (_sum, (arr), &_len); \
+ nm_assert (_len == G_N_ELEMENTS (arr)); \
+ } G_STMT_END
+
+#define nm_utils_checksum_get_digest_len(sum, buf, len) \
+ G_STMT_START { \
+ GChecksum *const _sum = (sum); \
+ const gsize _len0 = (len); \
+ gsize _len; \
+ \
+ nm_assert (NM_IN_SET (_len0, NM_UTILS_CHECKSUM_LENGTH_MD5, \
+ NM_UTILS_CHECKSUM_LENGTH_SHA1, \
+ NM_UTILS_CHECKSUM_LENGTH_SHA256)); \
+ nm_assert (_sum); \
+ \
+ _len = _len0; \
+ g_checksum_get_digest (_sum, (buf), &_len); \
+ nm_assert (_len == _len0); \
+ } G_STMT_END
+
+/*****************************************************************************/
+
guint32 _nm_utils_ip4_prefix_to_netmask (guint32 prefix);
guint32 _nm_utils_ip4_get_default_prefix (guint32 ip);