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.
This commit is contained in:
Thomas Haller 2022-12-01 14:07:22 +01:00
parent 4ecd25a139
commit 36f8de25c4
No known key found for this signature in database
GPG key ID: 29C2366E4DFC5728
16 changed files with 42 additions and 27 deletions

View file

@ -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);

View file

@ -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;
}

View file

@ -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) {

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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)))
/*****************************************************************************/

View file

@ -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];
}

View file

@ -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;
}

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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 *

View file

@ -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)))

View file

@ -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;