mirror of
https://github.com/systemd/systemd.git
synced 2024-11-02 10:51:20 +03:00
sd-rtnl: message - allow checking for attributes without reading out their contents
This commit is contained in:
parent
dae4de9d42
commit
73ae2b7dad
@ -830,6 +830,8 @@ int sd_rtnl_message_read_string(sd_rtnl_message *m, unsigned short type, const c
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_STRING);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -840,7 +842,8 @@ int sd_rtnl_message_read_string(sd_rtnl_message *m, unsigned short type, const c
|
||||
else if (strnlen(attr_data, r) >= (size_t) r)
|
||||
return -EIO;
|
||||
|
||||
*data = (const char *) attr_data;
|
||||
if (data)
|
||||
*data = (const char *) attr_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -849,6 +852,8 @@ int sd_rtnl_message_read_u8(sd_rtnl_message *m, unsigned short type, uint8_t *da
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_U8);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -859,7 +864,8 @@ int sd_rtnl_message_read_u8(sd_rtnl_message *m, unsigned short type, uint8_t *da
|
||||
else if ((size_t) r < sizeof(uint8_t))
|
||||
return -EIO;
|
||||
|
||||
*data = *(uint8_t *) attr_data;
|
||||
if (data)
|
||||
*data = *(uint8_t *) attr_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -868,6 +874,8 @@ int sd_rtnl_message_read_u16(sd_rtnl_message *m, unsigned short type, uint16_t *
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_U16);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -878,7 +886,8 @@ int sd_rtnl_message_read_u16(sd_rtnl_message *m, unsigned short type, uint16_t *
|
||||
else if ((size_t) r < sizeof(uint16_t))
|
||||
return -EIO;
|
||||
|
||||
*data = *(uint16_t *) attr_data;
|
||||
if (data)
|
||||
*data = *(uint16_t *) attr_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -887,6 +896,8 @@ int sd_rtnl_message_read_u32(sd_rtnl_message *m, unsigned short type, uint32_t *
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_U32);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -897,7 +908,8 @@ int sd_rtnl_message_read_u32(sd_rtnl_message *m, unsigned short type, uint32_t *
|
||||
else if ((size_t)r < sizeof(uint32_t))
|
||||
return -EIO;
|
||||
|
||||
*data = *(uint32_t *) attr_data;
|
||||
if (data)
|
||||
*data = *(uint32_t *) attr_data;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -906,6 +918,8 @@ int sd_rtnl_message_read_ether_addr(sd_rtnl_message *m, unsigned short type, str
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_ETHER_ADDR);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -916,7 +930,8 @@ int sd_rtnl_message_read_ether_addr(sd_rtnl_message *m, unsigned short type, str
|
||||
else if ((size_t)r < sizeof(struct ether_addr))
|
||||
return -EIO;
|
||||
|
||||
memcpy(data, attr_data, sizeof(struct ether_addr));
|
||||
if (data)
|
||||
memcpy(data, attr_data, sizeof(struct ether_addr));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -925,6 +940,8 @@ int sd_rtnl_message_read_cache_info(sd_rtnl_message *m, unsigned short type, str
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_CACHE_INFO);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -935,7 +952,8 @@ int sd_rtnl_message_read_cache_info(sd_rtnl_message *m, unsigned short type, str
|
||||
else if ((size_t)r < sizeof(struct ifa_cacheinfo))
|
||||
return -EIO;
|
||||
|
||||
memcpy(info, attr_data, sizeof(struct ifa_cacheinfo));
|
||||
if (info)
|
||||
memcpy(info, attr_data, sizeof(struct ifa_cacheinfo));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -944,6 +962,8 @@ int sd_rtnl_message_read_in_addr(sd_rtnl_message *m, unsigned short type, struct
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_IN_ADDR);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -954,7 +974,8 @@ int sd_rtnl_message_read_in_addr(sd_rtnl_message *m, unsigned short type, struct
|
||||
else if ((size_t)r < sizeof(struct in_addr))
|
||||
return -EIO;
|
||||
|
||||
memcpy(data, attr_data, sizeof(struct in_addr));
|
||||
if (data)
|
||||
memcpy(data, attr_data, sizeof(struct in_addr));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -963,6 +984,8 @@ int sd_rtnl_message_read_in6_addr(sd_rtnl_message *m, unsigned short type, struc
|
||||
int r;
|
||||
void *attr_data;
|
||||
|
||||
assert_return(m, -EINVAL);
|
||||
|
||||
r = message_attribute_has_type(m, type, NLA_IN_ADDR);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -973,7 +996,8 @@ int sd_rtnl_message_read_in6_addr(sd_rtnl_message *m, unsigned short type, struc
|
||||
else if ((size_t)r < sizeof(struct in6_addr))
|
||||
return -EIO;
|
||||
|
||||
memcpy(data, attr_data, sizeof(struct in6_addr));
|
||||
if (data)
|
||||
memcpy(data, attr_data, sizeof(struct in6_addr));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user