summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-12-01 14:07:22 +0100
committerThomas Haller <thaller@redhat.com>2022-12-09 09:15:56 +0100
commit36f8de25c487fe1570a19fe917c85ec065b0339e (patch)
tree742592af2417c05ed8454f18a876a7b466443c6f
parent4ecd25a1391b18bd2380a9209791cb19722f7833 (diff)
all: fix various "-Wcast-align=strict" warnings
The warning "-Wcast-align=strict" seems useful and will be enabled next. Fix places that currently cause the warning by using the new macro NM_CAST_ALIGN(). This macro also nm_assert()s that the alignment is correct.
-rw-r--r--src/core/devices/bluetooth/nm-bluez-manager.c5
-rw-r--r--src/core/nm-dbus-manager.c2
-rw-r--r--src/core/nm-dbus-utils.c2
-rw-r--r--src/core/nm-l3-ipv4ll.h2
-rw-r--r--src/core/nm-policy.c3
-rw-r--r--src/core/ppp/nm-ppp-mgr.c2
-rw-r--r--src/libnm-client-impl/nm-client.c4
-rw-r--r--src/libnm-client-impl/nm-object.c4
-rw-r--r--src/libnm-core-impl/tests/test-general.c2
-rw-r--r--src/libnm-crypto/nm-crypto-nss.c13
-rw-r--r--src/libnm-glib-aux/nm-hash-utils.c2
-rw-r--r--src/libnm-platform/nm-linux-platform.c5
-rw-r--r--src/libnm-platform/nm-netlink.c7
-rw-r--r--src/libnm-platform/nm-netlink.h9
-rw-r--r--src/libnm-platform/nmp-object.h5
-rw-r--r--src/nmcli/utils.c2
16 files changed, 42 insertions, 27 deletions
diff --git a/src/core/devices/bluetooth/nm-bluez-manager.c b/src/core/devices/bluetooth/nm-bluez-manager.c
index 6bc00faf39..ac26ede8cd 100644
--- a/src/core/devices/bluetooth/nm-bluez-manager.c
+++ b/src/core/devices/bluetooth/nm-bluez-manager.c
@@ -1010,8 +1010,9 @@ _network_server_get_bluez_manager(const NMBtVTableNetworkServer *vtable_network_
{
NMBluezManager *self;
- self = (NMBluezManager *) (((char *) vtable_network_server)
- - G_STRUCT_OFFSET(NMBluezManager, _priv.vtable_network_server));
+ self = NM_CAST_ALIGN(NMBluezManager,
+ (((char *) vtable_network_server)
+ - G_STRUCT_OFFSET(NMBluezManager, _priv.vtable_network_server)));
g_return_val_if_fail(NM_IS_BLUEZ_MANAGER(self), NULL);
diff --git a/src/core/nm-dbus-manager.c b/src/core/nm-dbus-manager.c
index 7fcbf6cad8..af7de8c458 100644
--- a/src/core/nm-dbus-manager.c
+++ b/src/core/nm-dbus-manager.c
@@ -1077,7 +1077,7 @@ nm_dbus_manager_lookup_object(NMDBusManager *self, const char *path)
if (!ptr)
return NULL;
- obj = (NMDBusObject *) (((char *) ptr) - G_STRUCT_OFFSET(NMDBusObject, internal));
+ obj = NM_CAST_ALIGN(NMDBusObject, (((char *) ptr) - G_STRUCT_OFFSET(NMDBusObject, internal)));
nm_assert(NM_IS_DBUS_OBJECT(obj));
return obj;
}
diff --git a/src/core/nm-dbus-utils.c b/src/core/nm-dbus-utils.c
index 096b647b91..05eca84faa 100644
--- a/src/core/nm-dbus-utils.c
+++ b/src/core/nm-dbus-utils.c
@@ -166,7 +166,7 @@ nm_dbus_utils_get_paths_for_clist(const CList *lst_head,
i = 0;
strv = g_new(const char *, n + 1);
c_list_for_each (iter, lst_head) {
- NMDBusObject *obj = (NMDBusObject *) (((const char *) iter) - member_offset);
+ NMDBusObject *obj = NM_CAST_ALIGN(NMDBusObject, (((char *) iter) - member_offset));
path = nm_dbus_object_get_path(obj);
if (!path) {
diff --git a/src/core/nm-l3-ipv4ll.h b/src/core/nm-l3-ipv4ll.h
index b39762a81e..af74ce08ac 100644
--- a/src/core/nm-l3-ipv4ll.h
+++ b/src/core/nm-l3-ipv4ll.h
@@ -45,7 +45,7 @@ NM_IS_L3_IPV4LL(const NML3IPv4LL *self)
{
nm_assert(!self
|| (NM_IS_L3CFG(*((NML3Cfg **) self))
- && (*((int *) (((char *) self) + sizeof(gpointer)))) > 0));
+ && *(NM_CAST_ALIGN(int, (((char *) self) + sizeof(gpointer)))) > 0));
return !!self;
}
diff --git a/src/core/nm-policy.c b/src/core/nm-policy.c
index 3cd11ba810..09e1ee8a20 100644
--- a/src/core/nm-policy.c
+++ b/src/core/nm-policy.c
@@ -108,9 +108,10 @@ _PRIV_TO_SELF(NMPolicyPrivate *priv)
nm_assert(priv);
- self = (NMPolicy *) (((char *) priv) - G_STRUCT_OFFSET(NMPolicy, _priv));
+ self = NM_CAST_ALIGN(NMPolicy, (((char *) priv) - G_STRUCT_OFFSET(NMPolicy, _priv)));
nm_assert(NM_IS_POLICY(self));
+
return self;
}
diff --git a/src/core/ppp/nm-ppp-mgr.c b/src/core/ppp/nm-ppp-mgr.c
index 31c173a353..bebffaf37c 100644
--- a/src/core/ppp/nm-ppp-mgr.c
+++ b/src/core/ppp/nm-ppp-mgr.c
@@ -68,7 +68,7 @@ NM_UTILS_LOOKUP_STR_DEFINE(nm_ppp_mgr_callback_type_to_string,
#define SELF_TO_USERDATA(self) (&(self)->idle_start)
#define SELF_FROM_USERDATA(user_data) \
- ((NMPppMgr *) (((const char *) (user_data)) - G_STRUCT_OFFSET(NMPppMgr, idle_start)))
+ NM_CAST_ALIGN(NMPppMgr, (((char *) (user_data)) - G_STRUCT_OFFSET(NMPppMgr, idle_start)))
/*****************************************************************************/
diff --git a/src/libnm-client-impl/nm-client.c b/src/libnm-client-impl/nm-client.c
index 57d3607cf5..6eb5bc48c6 100644
--- a/src/libnm-client-impl/nm-client.c
+++ b/src/libnm-client-impl/nm-client.c
@@ -1254,9 +1254,9 @@ nml_dbus_object_get_property_location(NMLDBusObject *dbobj,
{
char *target_c;
- target_c = (char *) dbobj->nmobj;
+ target_c = ((gpointer) dbobj->nmobj);
if (meta_iface->base_struct_offset > 0)
- target_c = *((gpointer *) (&target_c[meta_iface->base_struct_offset]));
+ target_c = *NM_CAST_ALIGN(gpointer, &target_c[meta_iface->base_struct_offset]);
return &target_c[meta_property->prop_struct_offset];
}
diff --git a/src/libnm-client-impl/nm-object.c b/src/libnm-client-impl/nm-object.c
index 60b01ca8e8..add498e12d 100644
--- a/src/libnm-client-impl/nm-object.c
+++ b/src/libnm-client-impl/nm-object.c
@@ -43,10 +43,10 @@ _nm_object_get_private(NMObjectClass *klass, NMObject *self, guint16 extra_offse
nm_assert(klass->priv_ptr_offset > 0);
- ptr = (char *) self;
+ ptr = ((gpointer) self);
ptr += klass->priv_ptr_offset;
if (klass->priv_ptr_indirect)
- ptr = *((gpointer *) ptr);
+ ptr = *NM_CAST_ALIGN(gpointer, ptr);
return ptr + extra_offset;
}
diff --git a/src/libnm-core-impl/tests/test-general.c b/src/libnm-core-impl/tests/test-general.c
index f7602f5422..74e3430895 100644
--- a/src/libnm-core-impl/tests/test-general.c
+++ b/src/libnm-core-impl/tests/test-general.c
@@ -6959,7 +6959,7 @@ test_setting_ip6_gateway(void)
gateway_bytes = g_variant_get_fixed_array(gateway_var, &length, 1);
g_assert_cmpint(length, ==, 16);
- nmtst_assert_ip6_address((struct in6_addr *) gateway_bytes, "abcd::1");
+ nmtst_assert_ip6_address(NM_CAST_ALIGN(struct in6_addr, gateway_bytes), "abcd::1");
g_variant_unref(gateway_var);
}
g_variant_unref(value);
diff --git a/src/libnm-crypto/nm-crypto-nss.c b/src/libnm-crypto/nm-crypto-nss.c
index b31ca55ee0..6ac52b2c24 100644
--- a/src/libnm-crypto/nm-crypto-nss.c
+++ b/src/libnm-crypto/nm-crypto-nss.c
@@ -450,10 +450,17 @@ _nm_crypto_verify_pkcs12(const guint8 *data, gsize data_len, const char *passwor
#if __BYTE_ORDER == __LITTLE_ENDIAN
{
- guint16 *p, *p_end;
+ const guint16 *p_end;
+ guint16 *p;
- p_end = (guint16 *) &(((guint8 *) pw.data)[ucs2_password.len]);
- for (p = (guint16 *) pw.data; p < p_end; p++)
+ /* we cast here to guint16 pointers (which would trigger a "-Wcast-align").
+ * But this is safe, because ucs2_password.len is a multiple of 2 and
+ * because pw.data was an allocated buffer (that is presumably aligned
+ * correctly). */
+ nm_assert(ucs2_password.len % 2 == 0);
+
+ p_end = NM_CAST_ALIGN(guint16, &(((guint8 *) pw.data)[ucs2_password.len]));
+ for (p = NM_CAST_ALIGN(guint16, pw.data); p < p_end; p++)
*p = GUINT16_SWAP_LE_BE(*p);
}
#endif
diff --git a/src/libnm-glib-aux/nm-hash-utils.c b/src/libnm-glib-aux/nm-hash-utils.c
index 941aba019a..973422a198 100644
--- a/src/libnm-glib-aux/nm-hash-utils.c
+++ b/src/libnm-glib-aux/nm-hash-utils.c
@@ -106,7 +106,7 @@ nm_hash_static(guint static_seed)
*
* Also, ensure that we don't return zero (like for nm_hash_complete()).
*/
- return ((*((const guint *) _get_hash_key())) ^ static_seed) ?: 3679500967u;
+ return ((*NM_CAST_ALIGN(guint, _get_hash_key())) ^ static_seed) ?: 3679500967u;
}
void
diff --git a/src/libnm-platform/nm-linux-platform.c b/src/libnm-platform/nm-linux-platform.c
index 8734aa7fd2..9bdc62872d 100644
--- a/src/libnm-platform/nm-linux-platform.c
+++ b/src/libnm-platform/nm-linux-platform.c
@@ -1348,7 +1348,8 @@ typedef struct {
};
} ParseNlmsgIter;
-#define NLMSG_TAIL(nmsg) ((struct rtattr *) (((char *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
+#define NLMSG_TAIL(nmsg) \
+ NM_CAST_ALIGN(struct rtattr, ((char *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))
/* copied from iproute2's addattr_l(). */
static gboolean
@@ -9927,7 +9928,7 @@ continue_reading:
goto stop;
}
- hdr = (struct nlmsghdr *) priv->netlink_recv_buf.buf;
+ hdr = NM_CAST_ALIGN(struct nlmsghdr, priv->netlink_recv_buf.buf);
while (nlmsg_ok(hdr, n)) {
WaitForNlResponseResult seq_result;
gboolean process_valid_msg = FALSE;
diff --git a/src/libnm-platform/nm-netlink.c b/src/libnm-platform/nm-netlink.c
index e08eee5e0a..fc70422642 100644
--- a/src/libnm-platform/nm-netlink.c
+++ b/src/libnm-platform/nm-netlink.c
@@ -325,7 +325,8 @@ nlmsg_parse_error(const struct nlmsghdr *nlh, const char **out_extack_msg)
struct nlattr *tb[G_N_ELEMENTS(policy)];
struct nlattr *tlvs;
- tlvs = (struct nlattr *) ((char *) e + sizeof(*e) + e->msg.nlmsg_len - NLMSG_HDRLEN);
+ tlvs = NM_CAST_ALIGN(struct nlattr,
+ (((char *) e) + sizeof(*e) + e->msg.nlmsg_len - NLMSG_HDRLEN));
if (nla_parse_arr(tb, tlvs, nlh->nlmsg_len - sizeof(*e) - e->msg.nlmsg_len, policy) >= 0) {
if (tb[NLMSGERR_ATTR_MSG])
*out_extack_msg = nla_get_string(tb[NLMSGERR_ATTR_MSG]);
@@ -842,7 +843,7 @@ genlmsg_len(const struct genlmsghdr *gnlh)
{
const struct nlmsghdr *nlh;
- nlh = (const struct nlmsghdr *) ((const unsigned char *) gnlh - NLMSG_HDRLEN);
+ nlh = NM_CAST_ALIGN(const struct nlmsghdr, (((char *) gnlh) - NLMSG_HDRLEN));
return (nlh->nlmsg_len - GENL_HDRLEN - NLMSG_HDRLEN);
}
@@ -1253,7 +1254,7 @@ continue_reading:
if (n <= 0)
return n;
- hdr = (struct nlmsghdr *) buf;
+ hdr = NM_CAST_ALIGN(struct nlmsghdr, buf);
while (nlmsg_ok(hdr, n)) {
nm_auto_nlmsg struct nl_msg *msg = NULL;
diff --git a/src/libnm-platform/nm-netlink.h b/src/libnm-platform/nm-netlink.h
index 634be2b4a6..cdb8a81c32 100644
--- a/src/libnm-platform/nm-netlink.h
+++ b/src/libnm-platform/nm-netlink.h
@@ -340,7 +340,7 @@ nla_next(const struct nlattr *nla, int *remaining)
int totlen = NLA_ALIGN(nla->nla_len);
*remaining -= totlen;
- return (struct nlattr *) ((char *) nla + totlen);
+ return NM_CAST_ALIGN(struct nlattr, (((char *) nla) + totlen));
}
#define nla_for_each_attr(pos, head, len, rem) \
@@ -434,7 +434,7 @@ nlmsg_next(struct nlmsghdr *nlh, int *remaining)
*remaining -= totlen;
- return (struct nlmsghdr *) ((unsigned char *) nlh + totlen);
+ return NM_CAST_ALIGN(struct nlmsghdr, (((char *) nlh) + totlen));
}
int nlmsg_get_proto(struct nl_msg *msg);
@@ -493,8 +493,9 @@ nlmsg_attrlen(const struct nlmsghdr *nlh, int hdrlen)
static inline struct nlattr *
nlmsg_attrdata(const struct nlmsghdr *nlh, int hdrlen)
{
- unsigned char *data = nlmsg_data(nlh);
- return (struct nlattr *) (data + NLMSG_ALIGN(hdrlen));
+ char *data = nlmsg_data(nlh);
+
+ return NM_CAST_ALIGN(struct nlattr, (data + NLMSG_ALIGN(hdrlen)));
}
static inline struct nlattr *
diff --git a/src/libnm-platform/nmp-object.h b/src/libnm-platform/nmp-object.h
index 9fa260b57f..5f98deeda4 100644
--- a/src/libnm-platform/nmp-object.h
+++ b/src/libnm-platform/nmp-object.h
@@ -454,9 +454,12 @@ NMP_OBJECT_UP_CAST(const NMPlatformObject *plobj)
{
NMPObject *obj;
- obj = plobj ? (NMPObject *) (&(((char *) plobj)[-((int) G_STRUCT_OFFSET(NMPObject, object))]))
+ obj = plobj ? NM_CAST_ALIGN(NMPObject,
+ &(((char *) plobj)[-((int) G_STRUCT_OFFSET(NMPObject, object))]))
: NULL;
+
nm_assert(!obj || (obj->parent._ref_count > 0 && NMP_CLASS_IS_VALID(obj->_class)));
+
return obj;
}
#define NMP_OBJECT_UP_CAST(plobj) (NMP_OBJECT_UP_CAST((const NMPlatformObject *) (plobj)))
diff --git a/src/nmcli/utils.c b/src/nmcli/utils.c
index 8bd8da5f9f..957c0efaff 100644
--- a/src/nmcli/utils.c
+++ b/src/nmcli/utils.c
@@ -1116,7 +1116,7 @@ _print_fill(const NmcConfig *nmc_config,
cell->text_to_free = TRUE;
}
if (to_free)
- g_strfreev((char **) to_free);
+ g_strfreev(NM_CAST_ALIGN(char *, to_free));
}
} else {
cell->text.plain = value;