diff --git a/src/basic/include/net/if_arp.h b/src/basic/include/net/if_arp.h new file mode 100644 index 0000000000..7b384aeb73 --- /dev/null +++ b/src/basic/include/net/if_arp.h @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index b86b67e783..61a77370eb 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -1350,6 +1351,53 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf, return memcpy_safe(buf, CMSG_DATA(cmsg), buf_len); } +size_t sockaddr_ll_len(const struct sockaddr_ll *sa) { + /* Certain hardware address types (e.g Infiniband) do not fit into sll_addr + * (8 bytes) and run over the structure. This function returns the correct size that + * must be passed to kernel. */ + + assert(sa->sll_family == AF_PACKET); + + size_t mac_len = sizeof(sa->sll_addr); + + if (be16toh(sa->sll_hatype) == ARPHRD_ETHER) + mac_len = MAX(mac_len, (size_t) ETH_ALEN); + if (be16toh(sa->sll_hatype) == ARPHRD_INFINIBAND) + mac_len = MAX(mac_len, (size_t) INFINIBAND_ALEN); + + return offsetof(struct sockaddr_ll, sll_addr) + mac_len; +} + +size_t sockaddr_un_len(const struct sockaddr_un *sa) { + /* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */ + + assert(sa->sun_family == AF_UNIX); + + return offsetof(struct sockaddr_un, sun_path) + + (sa->sun_path[0] == 0 ? + 1 + strnlen(sa->sun_path+1, sizeof(sa->sun_path)-1) : + strnlen(sa->sun_path, sizeof(sa->sun_path))+1); +} + +size_t sockaddr_len(const union sockaddr_union *sa) { + switch (sa->sa.sa_family) { + case AF_INET: + return sizeof(struct sockaddr_in); + case AF_INET6: + return sizeof(struct sockaddr_in6); + case AF_UNIX: + return sockaddr_un_len(&sa->un); + case AF_PACKET: + return sockaddr_ll_len(&sa->ll); + case AF_NETLINK: + return sizeof(struct sockaddr_nl); + case AF_VSOCK: + return sizeof(struct sockaddr_vm); + default: + assert_not_reached(); + } +} + int socket_ioctl_fd(void) { int fd; diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h index d0aedb524e..a69277c639 100644 --- a/src/basic/socket-util.h +++ b/src/basic/socket-util.h @@ -238,62 +238,11 @@ void* cmsg_find_and_copy_data(struct msghdr *mh, int level, int type, void *buf, (size) == CMSG_ALIGN(size) ? 1 : -1]; \ } -/* - * Certain hardware address types (e.g Infiniband) do not fit into sll_addr - * (8 bytes) and run over the structure. This macro returns the correct size that - * must be passed to kernel. - */ -#define SOCKADDR_LL_LEN(sa) \ - ({ \ - const struct sockaddr_ll *_sa = &(sa); \ - size_t _mac_len = sizeof(_sa->sll_addr); \ - assert(_sa->sll_family == AF_PACKET); \ - if (be16toh(_sa->sll_hatype) == ARPHRD_ETHER) \ - _mac_len = MAX(_mac_len, (size_t) ETH_ALEN); \ - if (be16toh(_sa->sll_hatype) == ARPHRD_INFINIBAND) \ - _mac_len = MAX(_mac_len, (size_t) INFINIBAND_ALEN); \ - offsetof(struct sockaddr_ll, sll_addr) + _mac_len; \ - }) +size_t sockaddr_ll_len(const struct sockaddr_ll *sa); -/* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */ -#define SOCKADDR_UN_LEN(sa) \ - ({ \ - const struct sockaddr_un *_sa = &(sa); \ - assert(_sa->sun_family == AF_UNIX); \ - offsetof(struct sockaddr_un, sun_path) + \ - (_sa->sun_path[0] == 0 ? \ - 1 + strnlen(_sa->sun_path+1, sizeof(_sa->sun_path)-1) : \ - strnlen(_sa->sun_path, sizeof(_sa->sun_path))+1); \ - }) +size_t sockaddr_un_len(const struct sockaddr_un *sa); -#define SOCKADDR_LEN(saddr) \ - ({ \ - const union sockaddr_union *__sa = &(saddr); \ - size_t _len; \ - switch (__sa->sa.sa_family) { \ - case AF_INET: \ - _len = sizeof(struct sockaddr_in); \ - break; \ - case AF_INET6: \ - _len = sizeof(struct sockaddr_in6); \ - break; \ - case AF_UNIX: \ - _len = SOCKADDR_UN_LEN(__sa->un); \ - break; \ - case AF_PACKET: \ - _len = SOCKADDR_LL_LEN(__sa->ll); \ - break; \ - case AF_NETLINK: \ - _len = sizeof(struct sockaddr_nl); \ - break; \ - case AF_VSOCK: \ - _len = sizeof(struct sockaddr_vm); \ - break; \ - default: \ - assert_not_reached(); \ - } \ - _len; \ - }) +size_t sockaddr_len(const union sockaddr_union *sa); int socket_ioctl_fd(void); diff --git a/src/fundamental/chid-fundamental.c b/src/fundamental/chid-fundamental.c index 47eabdb349..a99d0dae64 100644 --- a/src/fundamental/chid-fundamental.c +++ b/src/fundamental/chid-fundamental.c @@ -15,6 +15,7 @@ */ #if SD_BOOT +# include "efi-string.h" # include "util.h" #else # include diff --git a/src/fundamental/chid-fundamental.h b/src/fundamental/chid-fundamental.h index 48b1343f5c..81c40e087f 100644 --- a/src/fundamental/chid-fundamental.h +++ b/src/fundamental/chid-fundamental.h @@ -3,7 +3,7 @@ #pragma once #if SD_BOOT -# include "efi-string.h" +# include "efi.h" #else # include #endif diff --git a/src/fundamental/sha1-fundamental.c b/src/fundamental/sha1-fundamental.c index 0f631d5053..b8d100ff6b 100644 --- a/src/fundamental/sha1-fundamental.c +++ b/src/fundamental/sha1-fundamental.c @@ -76,6 +76,12 @@ Still 100% public domain modified for use with systemd */ +#if SD_BOOT +# include "efi-string.h" +#else +# include +#endif + #include "memory-util-fundamental.h" #include "sha1-fundamental.h" diff --git a/src/fundamental/sha256-fundamental.c b/src/fundamental/sha256-fundamental.c index 9f8b0106fe..108c43b45a 100644 --- a/src/fundamental/sha256-fundamental.c +++ b/src/fundamental/sha256-fundamental.c @@ -21,6 +21,12 @@ License along with the GNU C Library; if not, see . */ +#if SD_BOOT +# include "efi-string.h" +#else +# include +#endif + #include "assert-fundamental.h" #include "macro-fundamental.h" #include "memory-util-fundamental.h" diff --git a/src/home/homed.c b/src/home/homed.c index bb9d3360d0..652e32ec7c 100644 --- a/src/home/homed.c +++ b/src/home/homed.c @@ -39,7 +39,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c index 15c27af090..962c5681e4 100644 --- a/src/hostname/hostnamed.c +++ b/src/hostname/hostnamed.c @@ -1939,7 +1939,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/import/importd.c b/src/import/importd.c index b584a0e685..a7de9ed247 100644 --- a/src/import/importd.c +++ b/src/import/importd.c @@ -2044,7 +2044,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c index f0f722ac3e..bf3092ff31 100644 --- a/src/initctl/initctl.c +++ b/src/initctl/initctl.c @@ -328,7 +328,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); while (!server.quit) { struct epoll_event event; diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c index d33a7ab6b6..e244b668ee 100644 --- a/src/journal-remote/journal-remote-main.c +++ b/src/journal-remote/journal-remote-main.c @@ -1180,7 +1180,7 @@ static int run(int argc, char **argv) { log_debug("%s running as pid "PID_FMT, program_invocation_short_name, getpid_cached()); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); while (s.active) { r = sd_event_get_state(s.event); diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 7bf10f4de9..6de13e01f7 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -982,7 +982,7 @@ static int run(int argc, char **argv) { notify_message = notify_start("READY=1\n" "STATUS=Processing input...", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); for (;;) { r = sd_event_get_state(u.event); diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c index 0a50467aaa..0593b97b16 100644 --- a/src/journal/journald-server.c +++ b/src/journal/journald-server.c @@ -2057,7 +2057,7 @@ static int dispatch_notify_event(sd_event_source *es, int fd, uint32_t revents, * there's something to send it will be turned on again. */ if (!s->sent_notify_ready) { - if (send(s->notify_fd, NOTIFY_READY, strlen(NOTIFY_READY), MSG_DONTWAIT) < 0) { + if (send(s->notify_fd, NOTIFY_READY_MESSAGE, strlen(NOTIFY_READY_MESSAGE), MSG_DONTWAIT) < 0) { if (errno == EAGAIN) return 0; diff --git a/src/libsystemd-network/dhcp-network.c b/src/libsystemd-network/dhcp-network.c index e9e500623d..207f68a5e6 100644 --- a/src/libsystemd-network/dhcp-network.c +++ b/src/libsystemd-network/dhcp-network.c @@ -136,7 +136,7 @@ static int _bind_raw_socket( /* We may overflow link->ll. link->ll_buffer ensures we have enough space. */ memcpy(link->ll.sll_addr, bcast_addr->bytes, bcast_addr->length); - r = bind(s, &link->sa, SOCKADDR_LL_LEN(link->ll)); + r = bind(s, &link->sa, sockaddr_ll_len(&link->ll)); if (r < 0) return -errno; @@ -258,7 +258,7 @@ int dhcp_network_send_raw_socket( assert(packet); assert(len > 0); - if (sendto(s, packet, len, 0, &link->sa, SOCKADDR_LL_LEN(link->ll)) < 0) + if (sendto(s, packet, len, 0, &link->sa, sockaddr_ll_len(&link->ll)) < 0) return -errno; return 0; diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c index 457b1e5926..67500895f8 100644 --- a/src/libsystemd-network/lldp-neighbor.c +++ b/src/libsystemd-network/lldp-neighbor.c @@ -685,7 +685,7 @@ int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type) { return type == k; } -int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype) { +int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[static 3], uint8_t *subtype) { const uint8_t *d; size_t length; int r; @@ -714,7 +714,7 @@ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STAT return 0; } -int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype) { +int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[static 3], uint8_t subtype) { uint8_t k[3], st; int r; diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index db8c19e451..bbde421ebc 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -1030,7 +1030,7 @@ static int parse_container_unix_address(sd_bus *b, const char **p, char **guid) /* Note that we use the old /var/run prefix here, to increase compatibility with really old containers */ .sun_path = "/var/run/dbus/system_bus_socket", }; - b->sockaddr_size = SOCKADDR_UN_LEN(b->sockaddr.un); + b->sockaddr_size = sockaddr_un_len(&b->sockaddr.un); b->is_local = false; return 0; diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c index 1f59f834ef..54fb403a54 100644 --- a/src/libsystemd/sd-id128/sd-id128.c +++ b/src/libsystemd/sd-id128/sd-id128.c @@ -23,7 +23,7 @@ #include "stat-util.h" #include "user-util.h" -_public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) { +_public_ char *sd_id128_to_string(sd_id128_t id, char s[static SD_ID128_STRING_MAX]) { size_t k = 0; assert_return(s, NULL); @@ -39,7 +39,7 @@ _public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID12 return s; } -_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_UUID_STRING_MAX]) { +_public_ char *sd_id128_to_uuid_string(sd_id128_t id, char s[static SD_ID128_UUID_STRING_MAX]) { size_t k = 0; assert_return(s, NULL); diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c index 012592b4cd..d043e1882d 100644 --- a/src/libsystemd/sd-journal/journal-send.c +++ b/src/libsystemd/sd-journal/journal-send.c @@ -230,7 +230,7 @@ _public_ int sd_journal_sendv(const struct iovec *iov, int n) { }; struct msghdr mh = { .msg_name = (struct sockaddr*) &sa.sa, - .msg_namelen = SOCKADDR_UN_LEN(sa.un), + .msg_namelen = sockaddr_un_len(&sa.un), }; ssize_t k; bool have_syslog_identifier = false; diff --git a/src/libsystemd/sd-resolve/test-resolve.c b/src/libsystemd/sd-resolve/test-resolve.c index 829e13ea69..7a599925f4 100644 --- a/src/libsystemd/sd-resolve/test-resolve.c +++ b/src/libsystemd/sd-resolve/test-resolve.c @@ -84,7 +84,7 @@ int main(int argc, char *argv[]) { /* Make an address -> name query */ sa.in.sin_addr.s_addr = inet_addr(argc >= 3 ? argv[2] : "193.99.144.71"); - r = sd_resolve_getnameinfo(resolve, &q2, &sa.sa, SOCKADDR_LEN(sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL); + r = sd_resolve_getnameinfo(resolve, &q2, &sa.sa, sockaddr_len(&sa), 0, SD_RESOLVE_GET_BOTH, getnameinfo_handler, NULL); if (r < 0) log_error_errno(r, "sd_resolve_getnameinfo(): %m"); diff --git a/src/locale/localed.c b/src/locale/localed.c index 5fc45819ca..3f742b8a62 100644 --- a/src/locale/localed.c +++ b/src/locale/localed.c @@ -664,7 +664,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/login/logind.c b/src/login/logind.c index e07b9e5296..ad76b06972 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -1088,7 +1088,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa else log_info("Config file reloaded."); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } @@ -1268,7 +1268,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); return manager_run(m); } diff --git a/src/machine/machined.c b/src/machine/machined.c index bc2739268f..364f9dfab6 100644 --- a/src/machine/machined.c +++ b/src/machine/machined.c @@ -345,7 +345,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/mountfsd/mountfsd-manager.c b/src/mountfsd/mountfsd-manager.c index 9b10f15937..0d24e2d696 100644 --- a/src/mountfsd/mountfsd-manager.c +++ b/src/mountfsd/mountfsd-manager.c @@ -256,7 +256,7 @@ int manager_startup(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); if (listen(m->listen_fd, SOMAXCONN) < 0) diff --git a/src/mountfsd/mountfsd.c b/src/mountfsd/mountfsd.c index 6073bd548e..87f4ab725a 100644 --- a/src/mountfsd/mountfsd.c +++ b/src/mountfsd/mountfsd.c @@ -31,7 +31,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index f4e8c41a76..cf713f3ffe 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1229,6 +1229,6 @@ int manager_reload(Manager *m, sd_bus_message *message) { log_debug("Reloaded."); r = 0; finish: - (void) sd_notify(/* unset_environment= */ false, NOTIFY_READY); + (void) sd_notify(/* unset_environment= */ false, NOTIFY_READY_MESSAGE); return r; } diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 2b61f3b744..aa99829638 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -4,12 +4,14 @@ _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") #if __GNUC__ >= 15 _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #endif +#include #include #include #include "conf-parser.h" #include "in-addr-prefix-util.h" #include "net-condition.h" +#include "netif-sriov.h" #include "networkd-address-generation.h" #include "networkd-address-label.h" #include "networkd-address.h" @@ -38,6 +40,7 @@ _Pragma("GCC diagnostic ignored \"-Wzero-as-null-pointer-constant\"") #include "networkd-routing-policy-rule.h" #include "networkd-sriov.h" #include "qdisc.h" +#include "socket-util.h" #include "tclass.h" #include "vlan-util.h" diff --git a/src/network/networkd.c b/src/network/networkd.c index 2060e6b2fa..d39cb19ed2 100644 --- a/src/network/networkd.c +++ b/src/network/networkd.c @@ -108,7 +108,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Could not start manager: %m"); - notify_message = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_message = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index b1eeef335d..dd9649d71e 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -3660,7 +3660,7 @@ static int setup_notify_child(const void *directory) { (void) sockaddr_un_unlink(&sa.un); WITH_UMASK(0577) { /* only set "w" bit, which is all that's necessary for connecting from the container */ - r = bind(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)); + r = bind(fd, &sa.sa, sockaddr_un_len(&sa.un)); if (r < 0) return log_error_errno(errno, "bind(" NSPAWN_NOTIFY_SOCKET_PATH ") failed: %m"); } diff --git a/src/nsresourced/nsresourced-manager.c b/src/nsresourced/nsresourced-manager.c index 9849d63b0a..ee52f09f84 100644 --- a/src/nsresourced/nsresourced-manager.c +++ b/src/nsresourced/nsresourced-manager.c @@ -445,7 +445,7 @@ static int manager_make_listen_socket(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); r = mkdir_p("/run/systemd/userdb", 0755); diff --git a/src/nsresourced/nsresourced.c b/src/nsresourced/nsresourced.c index 07df95b4d7..ff84f766cd 100644 --- a/src/nsresourced/nsresourced.c +++ b/src/nsresourced/nsresourced.c @@ -34,7 +34,7 @@ static int run(int argc, char *argv[]) { return log_error_errno(r, "Failed to start up daemon: %m"); _unused_ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL; - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c index dcec133d6f..d62c07def4 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -660,7 +660,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa manager_set_defaults(m); manager_parse_config_file(m); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } diff --git a/src/oom/oomd.c b/src/oom/oomd.c index 15cbb3a2c3..11d11a3dc8 100644 --- a/src/oom/oomd.c +++ b/src/oom/oomd.c @@ -152,7 +152,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_msg = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_msg = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); log_debug("systemd-oomd started%s.", arg_dry_run ? " in dry run mode" : ""); diff --git a/src/portable/portabled.c b/src/portable/portabled.c index 75872d51fe..d94feb34cf 100644 --- a/src/portable/portabled.c +++ b/src/portable/portabled.c @@ -152,7 +152,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to fully start up daemon: %m"); - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/resolve/resolved-dns-server.c b/src/resolve/resolved-dns-server.c index 36b7f74813..5996d9bcc6 100644 --- a/src/resolve/resolved-dns-server.c +++ b/src/resolve/resolved-dns-server.c @@ -1274,7 +1274,7 @@ int dns_server_is_accessible(DnsServer *s) { return r; } - r = RET_NERRNO(connect(fd, &sa.sa, SOCKADDR_LEN(sa))); + r = RET_NERRNO(connect(fd, &sa.sa, sockaddr_len(&sa))); if (!IN_SET(r, 0, -ENETUNREACH, diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index 41c31c5a41..03c6cd7cf4 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -572,7 +572,7 @@ int dns_stream_new( if (tfo_address) { s->tfo_address = *tfo_address; - s->tfo_salen = SOCKADDR_LEN(*tfo_address); + s->tfo_salen = sockaddr_len(tfo_address); } *ret = TAKE_PTR(s); diff --git a/src/resolve/resolved-dns-stub.c b/src/resolve/resolved-dns-stub.c index 08b35690ba..053365f7fa 100644 --- a/src/resolve/resolved-dns-stub.c +++ b/src/resolve/resolved-dns-stub.c @@ -1322,7 +1322,7 @@ static int manager_dns_stub_fd_extra(Manager *m, DnsStubListenerExtra *l, int ty log_debug_errno(r, "Failed to enable fragment size reception, ignoring: %m"); } - r = RET_NERRNO(bind(fd, &sa.sa, SOCKADDR_LEN(sa))); + r = RET_NERRNO(bind(fd, &sa.sa, sockaddr_len(&sa))); if (r < 0) goto fail; diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c index 78b14ea3bf..e130fe6fda 100644 --- a/src/resolve/resolved-manager.c +++ b/src/resolve/resolved-manager.c @@ -690,7 +690,7 @@ static int manager_dispatch_reload_signal(sd_event_source *s, const struct signa manager_flush_caches(m, LOG_INFO); manager_verify_all(m); - (void) sd_notify(/* unset= */ false, NOTIFY_READY); + (void) sd_notify(/* unset= */ false, NOTIFY_READY_MESSAGE); return 0; } diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c index d6a7f0cf5a..a0c8018023 100644 --- a/src/resolve/resolved.c +++ b/src/resolve/resolved.c @@ -85,7 +85,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to drop remaining caps: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/src/resolve/test-resolved-stream.c b/src/resolve/test-resolved-stream.c index ef5c2763ec..b5e8ce9f95 100644 --- a/src/resolve/test-resolved-stream.c +++ b/src/resolve/test-resolved-stream.c @@ -111,7 +111,7 @@ static void *tcp_dns_server(void *p) { assert_se((bindfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0); assert_se(setsockopt(bindfd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int)) >= 0); - assert_se(bind(bindfd, &server_address.sa, SOCKADDR_LEN(server_address)) >= 0); + assert_se(bind(bindfd, &server_address.sa, sockaddr_len(&server_address)) >= 0); assert_se(listen(bindfd, 1) >= 0); assert_se((acceptfd = accept(bindfd, NULL, NULL)) >= 0); server_handle(acceptfd); @@ -246,7 +246,7 @@ static void test_dns_stream(bool tls) { assert_se((clientfd = socket(AF_INET, SOCK_STREAM | SOCK_CLOEXEC, 0)) >= 0); for (int i = 0; i < 100; i++) { - r = connect(clientfd, &server_address.sa, SOCKADDR_LEN(server_address)); + r = connect(clientfd, &server_address.sa, sockaddr_len(&server_address)); if (r >= 0) break; usleep_safe(EVENT_TIMEOUT_USEC / 100); diff --git a/src/shared/blkid-util.c b/src/shared/blkid-util.c new file mode 100644 index 0000000000..377a277851 --- /dev/null +++ b/src/shared/blkid-util.c @@ -0,0 +1,32 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#if HAVE_BLKID + +#include "blkid-util.h" +#include "string-util.h" + +int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret) { + const char *s; + + assert(p); + + s = blkid_partition_get_uuid(p); + if (isempty(s)) + return -ENXIO; + + return sd_id128_from_string(s, ret); +} + +int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret) { + const char *s; + + assert(p); + + s = blkid_partition_get_type_string(p); + if (isempty(s)) + return -ENXIO; + + return sd_id128_from_string(s, ret); +} + +#endif diff --git a/src/shared/blkid-util.h b/src/shared/blkid-util.h index abc4b6166d..fab4ab2987 100644 --- a/src/shared/blkid-util.h +++ b/src/shared/blkid-util.h @@ -2,38 +2,18 @@ #pragma once #if HAVE_BLKID -# include -# include "sd-id128.h" +#include -# include "macro.h" -# include "string-util.h" +#include "sd-id128.h" + +#include "memory-util.h" DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(blkid_probe, blkid_free_probe, NULL); -static inline int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret) { - const char *s; +int blkid_partition_get_uuid_id128(blkid_partition p, sd_id128_t *ret); - assert(p); - - s = blkid_partition_get_uuid(p); - if (isempty(s)) - return -ENXIO; - - return sd_id128_from_string(s, ret); -} - -static inline int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret) { - const char *s; - - assert(p); - - s = blkid_partition_get_type_string(p); - if (isempty(s)) - return -ENXIO; - - return sd_id128_from_string(s, ret); -} +int blkid_partition_get_type_id128(blkid_partition p, sd_id128_t *ret); /* Define symbolic names for blkid_do_safeprobe() return values, since blkid only uses literal numbers. We * prefix these symbolic definitions with underscores, to not invade libblkid's namespace needlessly. */ diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c index a2b6a48003..764548339d 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -154,7 +154,7 @@ int bus_event_loop_with_idle( /* Inform the service manager that we are going down, so that it will queue all * further start requests, instead of assuming we are still running. */ - (void) sd_notify(false, NOTIFY_STOPPING); + (void) sd_notify(false, NOTIFY_STOPPING_MESSAGE); r = bus_async_unregister_and_exit(e, bus, name); if (r < 0) diff --git a/src/shared/daemon-util.h b/src/shared/daemon-util.h index ff5e60e9be..e3daa9ebf5 100644 --- a/src/shared/daemon-util.h +++ b/src/shared/daemon-util.h @@ -7,8 +7,8 @@ #include "macro.h" -#define NOTIFY_READY "READY=1\n" "STATUS=Processing requests..." -#define NOTIFY_STOPPING "STOPPING=1\n" "STATUS=Shutting down..." +#define NOTIFY_READY_MESSAGE "READY=1\n" "STATUS=Processing requests..." +#define NOTIFY_STOPPING_MESSAGE "STOPPING=1\n" "STATUS=Shutting down..." static inline const char* notify_start(const char *start, const char *stop) { if (start) diff --git a/src/shared/local-addresses.c b/src/shared/local-addresses.c index 1874bcbcee..85269d4d70 100644 --- a/src/shared/local-addresses.c +++ b/src/shared/local-addresses.c @@ -680,16 +680,16 @@ int local_outbounds( * make use of the binding and return it. Hence, let's not unnecessarily fail early here: we * can still easily detect if the auto-binding worked or not, by comparing the bound IP * address with zero — which we do below. */ - if (connect(fd, &sa.sa, SOCKADDR_LEN(sa)) < 0) + if (connect(fd, &sa.sa, sockaddr_len(&sa)) < 0) log_debug_errno(errno, "Failed to connect SOCK_DGRAM socket to gateway, ignoring: %m"); /* Let's now read the socket address of the socket. A routing decision should have been * made. Let's verify that and use the data. */ - salen = SOCKADDR_LEN(sa); + salen = sockaddr_len(&sa); if (getsockname(fd, &sa.sa, &salen) < 0) return -errno; assert(sa.sa.sa_family == i->family); - assert(salen == SOCKADDR_LEN(sa)); + assert(salen == sockaddr_len(&sa)); switch (i->family) { diff --git a/src/shared/meson.build b/src/shared/meson.build index e206aba851..298dbcf18e 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -12,6 +12,7 @@ shared_sources = files( 'battery-util.c', 'binfmt-util.c', 'bitmap.c', + 'blkid-util.c', 'blockdev-list.c', 'blockdev-util.c', 'bond-util.c', @@ -278,7 +279,7 @@ gperf_file = custom_target( fname, input : ip_protocol_list_txt, output : fname, - command : [generate_gperfs, 'ip_protocol', 'IPPROTO_', '@INPUT@'], + command : [generate_gperfs, 'ip_protocol', 'IPPROTO_', '@INPUT@', ''], capture : true) fname = 'ip-protocol-from-name.h' @@ -303,9 +304,8 @@ target2 = custom_target( command : [awk, '-f', '@INPUT0@', '@INPUT1@'], capture : true) -shared_generated_gperf_headers = [target1, target2] -generated_sources += shared_generated_gperf_headers -shared_sources += shared_generated_gperf_headers +generated_sources += [target1, target2] +shared_sources += [target1, target2] fname = 'ethtool-link-mode.h' ethtool_link_mode_h = custom_target( diff --git a/src/shared/plymouth-util.c b/src/shared/plymouth-util.c index 8ef52d90c8..72f282f9bd 100644 --- a/src/shared/plymouth-util.c +++ b/src/shared/plymouth-util.c @@ -17,7 +17,7 @@ int plymouth_connect(int flags) { if (fd < 0) return -errno; - if (connect(fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) < 0) + if (connect(fd, &sa.sa, sockaddr_un_len(&sa.un)) < 0) return -errno; return TAKE_FD(fd); diff --git a/src/socket-activate/socket-activate.c b/src/socket-activate/socket-activate.c index 336d6fa754..c37fafd34a 100644 --- a/src/socket-activate/socket-activate.c +++ b/src/socket-activate/socket-activate.c @@ -478,7 +478,7 @@ static int run(int argc, char **argv) { if (r < 0) return r; - notify = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); } for (;;) { diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c index 6c40617563..fb430757e3 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -688,7 +688,7 @@ static int run(int argc, char *argv[]) { return r; } - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(context.event); if (r < 0) return log_error_errno(r, "Failed to run event loop: %m"); diff --git a/src/ssh-generator/ssh-proxy.c b/src/ssh-generator/ssh-proxy.c index 3c21f8d898..86db2e1cde 100644 --- a/src/ssh-generator/ssh-proxy.c +++ b/src/ssh-generator/ssh-proxy.c @@ -37,7 +37,7 @@ static int process_vsock_cid(unsigned cid, const char *port) { if (fd < 0) return log_error_errno(errno, "Failed to allocate AF_VSOCK socket: %m"); - if (connect(fd, &sa.sa, SOCKADDR_LEN(sa)) < 0) + if (connect(fd, &sa.sa, sockaddr_len(&sa)) < 0) return log_error_errno(errno, "Failed to connect to vsock:%u:%u: %m", sa.vm.svm_cid, sa.vm.svm_port); /* OpenSSH wants us to send a single byte along with the file descriptor, hence do so */ diff --git a/src/storagetm/storagetm.c b/src/storagetm/storagetm.c index fbdf35df99..1f1ebe2e8f 100644 --- a/src/storagetm/storagetm.c +++ b/src/storagetm/storagetm.c @@ -1240,7 +1240,7 @@ static int run(int argc, char* argv[]) { _unused_ _cleanup_(notify_on_cleanup) const char *notify_message = notify_start("READY=1\n" "STATUS=Exposing disks in target mode...", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(event); if (r < 0) diff --git a/src/test/meson.build b/src/test/meson.build index 480ff5e412..8640932d67 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -225,8 +225,7 @@ executables += [ generated_gperf_headers, }, test_template + { - 'sources' : files('test-arphrd-util.c') + - generated_gperf_headers, + 'sources' : files('test-arphrd-util.c') }, test_template + { 'sources' : files('test-ask-password-api.c'), @@ -249,8 +248,7 @@ executables += [ 'type' : 'manual', }, test_template + { - 'sources' : files('test-cap-list.c') + - generated_gperf_headers, + 'sources' : files('test-cap-list.c'), 'dependencies' : libcap, }, test_template + { @@ -313,8 +311,7 @@ executables += [ 'timeout' : 180, }, test_template + { - 'sources' : files('test-ip-protocol-list.c') + - shared_generated_gperf_headers, + 'sources' : files('test-ip-protocol-list.c'), }, test_template + { 'sources' : files('test-ipcrm.c'), diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c index 97eeb59afb..731a37caf1 100644 --- a/src/test/test-fileio.c +++ b/src/test/test-fileio.c @@ -928,7 +928,7 @@ TEST(read_full_file_socket) { assert_se(sockaddr_un_set_path(&sa.un, j) >= 0); - assert_se(bind(listener, &sa.sa, SOCKADDR_UN_LEN(sa.un)) >= 0); + assert_se(bind(listener, &sa.sa, sockaddr_un_len(&sa.un)) >= 0); assert_se(listen(listener, 1) >= 0); /* Make sure the socket doesn't fit into a struct sockaddr_un, but we can still access it */ diff --git a/src/test/test-mempress.c b/src/test/test-mempress.c index 6bbc485de6..6f4e658616 100644 --- a/src/test/test-mempress.c +++ b/src/test/test-mempress.c @@ -86,7 +86,7 @@ TEST(fake_pressure) { socket_fd = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(socket_fd >= 0); assert_se(sockaddr_un_set_path(&sa.un, k) >= 0); - assert_se(bind(socket_fd, &sa.sa, SOCKADDR_UN_LEN(sa.un)) >= 0); + assert_se(bind(socket_fd, &sa.sa, sockaddr_un_len(&sa.un)) >= 0); assert_se(listen(socket_fd, 1) >= 0); /* Ideally we'd just allocate this on the stack, but AddressSanitizer doesn't like it if threads diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c index 63bbb1d1d2..acf11f3639 100644 --- a/src/test/test-socket-util.c +++ b/src/test/test-socket-util.c @@ -134,8 +134,8 @@ TEST(sockaddr_un_len) { .sun_path = "\0foobar", }; - assert_se(SOCKADDR_UN_LEN(fs) == offsetof(struct sockaddr_un, sun_path) + strlen(fs.sun_path) + 1); - assert_se(SOCKADDR_UN_LEN(abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1)); + assert_se(sockaddr_un_len(&fs) == offsetof(struct sockaddr_un, sun_path) + strlen(fs.sun_path) + 1); + assert_se(sockaddr_un_len(&abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1)); } TEST(in_addr_is_multicast) { @@ -564,14 +564,14 @@ TEST(sockaddr_un_set_path) { fd1 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(fd1 >= 0); - assert_se(bind(fd1, &sa.sa, SOCKADDR_LEN(sa)) >= 0); + assert_se(bind(fd1, &sa.sa, sockaddr_len(&sa)) >= 0); assert_se(listen(fd1, 1) >= 0); sh = unlink_and_free(sh); /* remove temporary symlink */ fd2 = socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0); assert_se(fd2 >= 0); - assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) < 0); + assert_se(connect(fd2, &sa.sa, sockaddr_len(&sa)) < 0); assert_se(errno == ENOENT); /* we removed the symlink, must fail */ free(j); @@ -581,7 +581,7 @@ TEST(sockaddr_un_set_path) { assert_se(fd3 > 0); assert_se(sockaddr_un_set_path(&sa.un, FORMAT_PROC_FD_PATH(fd3)) >= 0); /* connect via O_PATH instead, circumventing 108ch limit */ - assert_se(connect(fd2, &sa.sa, SOCKADDR_LEN(sa)) >= 0); + assert_se(connect(fd2, &sa.sa, sockaddr_len(&sa)) >= 0); } TEST(getpeerpidref) { diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index c235573b92..5e0fb165a7 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -1182,7 +1182,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return r; - r = sd_notify(false, NOTIFY_READY); + r = sd_notify(false, NOTIFY_READY_MESSAGE); if (r < 0) log_warning_errno(r, "Failed to send readiness notification, ignoring: %m"); diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c index cecd9fd6ea..6537f1ae92 100644 --- a/src/timesync/timesyncd.c +++ b/src/timesync/timesyncd.c @@ -205,7 +205,7 @@ static int run(int argc, char *argv[]) { notify_message = notify_start("READY=1\n" "STATUS=Daemon is running", - NOTIFY_STOPPING); + NOTIFY_STOPPING_MESSAGE); r = manager_setup_save_time_event(m); if (r < 0) diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c index a9240551f0..fd28591d19 100644 --- a/src/tty-ask-password-agent/tty-ask-password-agent.c +++ b/src/tty-ask-password-agent/tty-ask-password-agent.c @@ -406,7 +406,7 @@ static int process_and_watch_password_files(bool watch) { } _unused_ _cleanup_(notify_on_cleanup) const char *notify_stop = - notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); for (;;) { usec_t timeout = USEC_INFINITY; diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 42e42ee336..1914bf7929 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -73,7 +73,7 @@ int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) { .sun_path = "/run/udev/control", }; - uctrl->addrlen = SOCKADDR_UN_LEN(uctrl->saddr.un); + uctrl->addrlen = sockaddr_un_len(&uctrl->saddr.un); *ret = TAKE_PTR(uctrl); return 0; diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 2026e24f5d..6f67f466d5 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -234,7 +234,7 @@ void manager_exit(Manager *manager) { manager->exit = true; - (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING); + (void) sd_notify(/* unset= */ false, NOTIFY_STOPPING_MESSAGE); /* close sources of new events and discard buffered events */ manager->ctrl = udev_ctrl_unref(manager->ctrl); @@ -1407,7 +1407,7 @@ int manager_main(Manager *manager) { log_warning_errno(r, "Failed to apply permissions on static device nodes, ignoring: %m"); _unused_ _cleanup_(notify_on_cleanup) const char *notify_message = - notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); /* We will start processing events in the loop below. Before starting processing, let's remove the * event serialization fd from the fdstore, to avoid retrieving the serialized events again in future diff --git a/src/userdb/userdbd-manager.c b/src/userdb/userdbd-manager.c index 63a53f0e00..e30ec8ed75 100644 --- a/src/userdb/userdbd-manager.c +++ b/src/userdb/userdbd-manager.c @@ -287,7 +287,7 @@ static int manager_make_listen_socket(Manager *m) { (void) sockaddr_un_unlink(&sockaddr.un); WITH_UMASK(0000) - if (bind(m->listen_fd, &sockaddr.sa, SOCKADDR_UN_LEN(sockaddr.un)) < 0) + if (bind(m->listen_fd, &sockaddr.sa, sockaddr_un_len(&sockaddr.un)) < 0) return log_error_errno(errno, "Failed to bind socket: %m"); FOREACH_STRING(alias, diff --git a/src/userdb/userdbd.c b/src/userdb/userdbd.c index 434a50a329..64babef1c4 100644 --- a/src/userdb/userdbd.c +++ b/src/userdb/userdbd.c @@ -47,7 +47,7 @@ static int run(int argc, char *argv[]) { if (r < 0) return log_error_errno(r, "Failed to start up daemon: %m"); - notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING); + notify_stop = notify_start(NOTIFY_READY_MESSAGE, NOTIFY_STOPPING_MESSAGE); r = sd_event_loop(m->event); if (r < 0) diff --git a/tools/generate-gperfs.py b/tools/generate-gperfs.py index 1e22a61406..fc349b43fa 100755 --- a/tools/generate-gperfs.py +++ b/tools/generate-gperfs.py @@ -9,18 +9,23 @@ Generate %-from-name.gperf from %-list.txt import sys if __name__ == '__main__': - if len(sys.argv) != 4: - sys.exit(f'Usage: {sys.argv[0]} name prefix file') + if len(sys.argv) < 4: + sys.exit(f'Usage: {sys.argv[0]} name prefix file [includes...]') - name, prefix, file = sys.argv[1:] + name, prefix, file, *includes = sys.argv[1:] + includes = [f"#include {i}" for i in includes] - print("""\ -%{ -_Pragma("GCC diagnostic ignored \\"-Wimplicit-fallthrough\\"") + # Older versions of python don't allow backslashes + # in f-strings so use chr(10) for newlines and chr(92) + # for backslashes instead as a workaround. + print(f"""\ +%{{ +_Pragma("GCC diagnostic ignored {chr(92)}"-Wimplicit-fallthrough{chr(92)}"") #if __GNUC__ >= 15 -_Pragma("GCC diagnostic ignored \\"-Wzero-as-null-pointer-constant\\"") +_Pragma("GCC diagnostic ignored {chr(92)}"-Wzero-as-null-pointer-constant{chr(92)}"") #endif -%}""") +{chr(10).join(includes)} +%}}""") print(f"""\ struct {name}_name {{ const char* name; int id; }}; %null-strings