mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-09-30 13:24:48 +00:00
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.
This commit is contained in:
parent
80220024cc
commit
3746845204
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue