]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd-util: Avoid call to endswith()
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 14 May 2025 19:41:43 +0000 (21:41 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 14 May 2025 20:33:45 +0000 (22:33 +0200)
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
src/network/networkd-util.h

index 8052e46768e638475d1fda54d720ce777751bee7..76617b686d1daa4d4d38cd30bb0e744d8c25ddc7 100644 (file)
@@ -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) {
index ea600043cff9754429bbf2620b7f0032f356a8ba..994b70e4f254bc3fd7b88363c1aaad70f24338fe 100644 (file)
@@ -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__)