From 08fd159db11b5e580df8e1d227899c884db486d8 Mon Sep 17 00:00:00 2001 From: Daan De Meyer Date: Wed, 14 May 2025 21:41:43 +0200 Subject: [PATCH] networkd-util: Avoid call to endswith() Instead of recalculating the length of the string again after reading it, let's make sd_netlink_message_read_string() return the length of the string that we then use to check if the last character is a dot or not. This allows us to get rid of the string-util.h include in #37344. --- src/libsystemd/sd-netlink/netlink-message.c | 2 +- src/network/networkd-util.h | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 8052e46768e..76617b686d1 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -864,7 +864,7 @@ int sd_netlink_message_read_string(sd_netlink_message *m, uint16_t attr_type, co if (ret) *ret = (const char *) attr_data; - return 0; + return r; } int sd_netlink_message_read_u8(sd_netlink_message *m, uint16_t attr_type, uint8_t *ret) { diff --git a/src/network/networkd-util.h b/src/network/networkd-util.h index ea600043cff..994b70e4f25 100644 --- a/src/network/networkd-util.h +++ b/src/network/networkd-util.h @@ -153,25 +153,26 @@ sd_dhcp_lease_server_type_t dhcp_lease_server_type_from_string(const char *s) _p bool link_should_mark_config(Link *link, bool only_static, NetworkConfigSource source, uint8_t protocol); -#define _log_link_message_full_errno(link, link_u, message, error_msg, level, level_u, error, error_u, format, ...) \ +#define _log_link_message_full_errno(link, link_u, message, error_msg, length, level, level_u, error, error_u, format, ...) \ ({ \ Link *link_u = (link); \ int level_u = (level); \ int error_u = (error); \ + int length = 0; \ \ const char *error_msg = NULL; \ if (message) \ - (void) sd_netlink_message_read_string(message, NLMSGERR_ATTR_MSG, &error_msg); \ + length = sd_netlink_message_read_string(message, NLMSGERR_ATTR_MSG, &error_msg); \ \ - error_msg ? \ + error_msg && length > 0 ? \ log_link_full_errno(link_u, level_u, error_u, format ": %s%s %m", ##__VA_ARGS__, \ - error_msg, endswith(error_msg, ".") ? "" : ".") : \ + error_msg, error_msg[length - 1] == '.' ? "" : ".") : \ log_link_full_errno(link_u, level_u, error_u, format ": %m", ##__VA_ARGS__); \ }) #define log_link_message_full_errno(link, message, level, error, format, ...) \ - _log_link_message_full_errno(link, UNIQ_T(lnk, UNIQ), message, UNIQ_T(emsg, UNIQ), level, UNIQ_T(lvl, UNIQ), error, UNIQ_T(err, UNIQ), format, ##__VA_ARGS__) + _log_link_message_full_errno(link, UNIQ_T(lnk, UNIQ), message, UNIQ_T(emsg, UNIQ), UNIQ_T(len, UNIQ), level, UNIQ_T(lvl, UNIQ), error, UNIQ_T(err, UNIQ), format, ##__VA_ARGS__) #define log_link_message_error_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_ERR, err, fmt, ##__VA_ARGS__) #define log_link_message_warning_errno(link, m, err, fmt, ...) log_link_message_full_errno(link, m, LOG_WARNING, err, fmt, ##__VA_ARGS__) -- 2.47.3