summaryrefslogtreecommitdiff
path: root/src/libsystemd-network
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-05-09 00:34:06 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-05-09 00:34:06 +0900
commitf04c991a2fbb3531c3b464ed8e6dd7543e521f7a (patch)
tree101701f7259d3093157c168858e2696dc51a8941 /src/libsystemd-network
parent22e299fc5e4380fffa2823a6061d7360ce9031ab (diff)
downloadsystemd-f04c991a2fbb3531c3b464ed8e6dd7543e521f7a.tar.gz
sd-dhcp-client: make return arguments for sd_dhcp_client_get_client_id() optional
Diffstat (limited to 'src/libsystemd-network')
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index b73abcb82d..19ed80db5c 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -339,25 +339,32 @@ int sd_dhcp_client_set_mac(
int sd_dhcp_client_get_client_id(
sd_dhcp_client *client,
- uint8_t *type,
- const uint8_t **data,
- size_t *data_len) {
+ uint8_t *ret_type,
+ const uint8_t **ret_data,
+ size_t *ret_data_len) {
assert_return(client, -EINVAL);
- assert_return(type, -EINVAL);
- assert_return(data, -EINVAL);
- assert_return(data_len, -EINVAL);
- if (client->client_id_len) {
- *type = client->client_id.type;
- *data = client->client_id.raw.data;
- *data_len = client->client_id_len - sizeof(client->client_id.type);
- } else {
- *type = 0;
- *data = NULL;
- *data_len = 0;
+ if (client->client_id_len > 0) {
+ if (client->client_id_len < offsetof(sd_dhcp_client_id, raw.data))
+ return -EINVAL;
+
+ if (ret_type)
+ *ret_type = client->client_id.type;
+ if (ret_data)
+ *ret_data = client->client_id.raw.data;
+ if (ret_data_len)
+ *ret_data_len = client->client_id_len - offsetof(sd_dhcp_client_id, raw.data);
+ return 1;
}
+ if (ret_type)
+ *ret_type = 0;
+ if (ret_data)
+ *ret_data = NULL;
+ if (ret_data_len)
+ *ret_data_len = 0;
+
return 0;
}