_cleanup_free_ char *l = NULL;
if (access("/sys/module/ipv6", F_OK) != 0)
- return 0;
+ return false;
/* If we can't check "disable" parameter, assume enabled */
if (read_one_line_file("/sys/module/ipv6/parameters/disable", &l) < 0)
- return 1;
+ return true;
/* If module was loaded with disable=1 no IPv6 available */
return l[0] == '0';
r = getnameinfo(&sa->sa, salen, host, sizeof(host), NULL, 0,
NI_IDN|NI_IDN_USE_STD3_ASCII_RULES);
if (r != 0) {
- _cleanup_free_ char *sockname = NULL;
int saved_errno = errno;
- r = sockaddr_pretty(&sa->sa, salen, true, &sockname);
- if (r < 0)
+ r = sockaddr_pretty(&sa->sa, salen, true, &ret);
+ if (r < 0) {
log_error("sockadd_pretty() failed: %s", strerror(-r));
- else
- log_error("getnameinfo(%s) failed: %s", sockname, strerror(-r));
- return -saved_errno;
- }
+ return r;
+ }
- ret = strdup(host);
- if (!ret)
- return log_oom();
+ log_debug("getnameinfo(%s) failed: %s", ret, strerror(saved_errno));
+ } else {
+ ret = strdup(host);
+ if (!ret)
+ return log_oom();
+ }
*_ret = ret;
return 0;
return false;
}
+
+char* ether_addr_to_string(const struct ether_addr *addr, char buffer[ETHER_ADDR_TO_STRING_MAX]) {
+ assert(addr);
+ assert(buffer);
+
+ /* Like ether_ntoa() but uses %02x instead of %x to print
+ * ethernet addresses, which makes them look less funny. Also,
+ * doesn't use a static buffer. */
+
+ sprintf(buffer, "%02x:%02x:%02x:%02x:%02x:%02x",
+ addr->ether_addr_octet[0],
+ addr->ether_addr_octet[1],
+ addr->ether_addr_octet[2],
+ addr->ether_addr_octet[3],
+ addr->ether_addr_octet[4],
+ addr->ether_addr_octet[5]);
+
+ return buffer;
+}