From 6f90844fe29225d138ff1c286680250878ed3a0a Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 2 Jan 2018 00:15:03 +0900 Subject: [PATCH] socket-util: introduce parse_socket_address_bind_ipv6_only_or_bool() --- src/basic/socket-util.c | 12 ++++++++++++ src/basic/socket-util.h | 1 + src/core/load-fragment.c | 16 +++++----------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c index fa74465b92d..8eef257de71 100644 --- a/src/basic/socket-util.c +++ b/src/basic/socket-util.c @@ -818,6 +818,18 @@ static const char* const socket_address_bind_ipv6_only_table[_SOCKET_ADDRESS_BIN DEFINE_STRING_TABLE_LOOKUP(socket_address_bind_ipv6_only, SocketAddressBindIPv6Only); +SocketAddressBindIPv6Only parse_socket_address_bind_ipv6_only_or_bool(const char *n) { + int r; + + r = parse_boolean(n); + if (r > 0) + return SOCKET_ADDRESS_IPV6_ONLY; + if (r == 0) + return SOCKET_ADDRESS_BOTH; + + return socket_address_bind_ipv6_only_from_string(n); +} + bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b) { assert(a); assert(b); diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h index 0f84a5e93e1..ba5be9b67d1 100644 --- a/src/basic/socket-util.h +++ b/src/basic/socket-util.h @@ -120,6 +120,7 @@ int getnameinfo_pretty(int fd, char **ret); const char* socket_address_bind_ipv6_only_to_string(SocketAddressBindIPv6Only b) _const_; SocketAddressBindIPv6Only socket_address_bind_ipv6_only_from_string(const char *s) _pure_; +SocketAddressBindIPv6Only parse_socket_address_bind_ipv6_only_or_bool(const char *s); int netlink_family_to_string_alloc(int b, char **s); int netlink_family_from_string(const char *s) _pure_; diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index b4b1899e5cb..00408c4b843 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -497,19 +497,13 @@ int config_parse_socket_bind(const char *unit, s = SOCKET(data); - b = socket_address_bind_ipv6_only_from_string(rvalue); + b = parse_socket_address_bind_ipv6_only_or_bool(rvalue); if (b < 0) { - int r; - - r = parse_boolean(rvalue); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse bind IPv6 only value, ignoring: %s", rvalue); - return 0; - } + log_syntax(unit, LOG_ERR, filename, line, 0, "Failed to parse bind IPv6 only value, ignoring: %s", rvalue); + return 0; + } - s->bind_ipv6_only = r ? SOCKET_ADDRESS_IPV6_ONLY : SOCKET_ADDRESS_BOTH; - } else - s->bind_ipv6_only = b; + s->bind_ipv6_only = b; return 0; } -- 2.39.5