From 59d4103fd545b23ce97973a1ecd0a1db8bc8fb82 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 23 Sep 2019 03:48:50 +0900 Subject: [PATCH] sd-netlink: introduce sd_netlink_message_read_string_strdup() --- src/libsystemd/sd-netlink/netlink-message.c | 26 +++++++++++++++++++++ src/systemd/sd-netlink.h | 1 + 2 files changed, 27 insertions(+) diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index e1395c6bde..a30911b404 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -618,6 +618,32 @@ int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t s return r; } +int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data) { + void *attr_data; + char *str; + int r; + + assert_return(m, -EINVAL); + + r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_STRING); + if (r < 0) + return r; + + r = netlink_message_read_internal(m, type, &attr_data, NULL); + if (r < 0) + return r; + + if (data) { + str = strndup(attr_data, r); + if (!str) + return -ENOMEM; + + *data = str; + } + + return 0; +} + int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data) { int r; void *attr_data; diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h index d5b74e62e1..62c5ef0415 100644 --- a/src/systemd/sd-netlink.h +++ b/src/systemd/sd-netlink.h @@ -95,6 +95,7 @@ int sd_netlink_message_open_container_union(sd_netlink_message *m, unsigned shor int sd_netlink_message_close_container(sd_netlink_message *m); int sd_netlink_message_read(sd_netlink_message *m, unsigned short type, size_t size, void *data); +int sd_netlink_message_read_string_strdup(sd_netlink_message *m, unsigned short type, char **data); int sd_netlink_message_read_string(sd_netlink_message *m, unsigned short type, const char **data); int sd_netlink_message_read_u8(sd_netlink_message *m, unsigned short type, uint8_t *data); int sd_netlink_message_read_u16(sd_netlink_message *m, unsigned short type, uint16_t *data); -- 2.25.1