chiark / gitweb /
udev: builtin-hwdb - port to sd-hwdb
[elogind.git] / src / shared / socket-util.c
index 38729a25b80279d4b7fabdba9b84f52c49c64350..c6f64876be4485f6a9c2b4aab41b04b2a094563d 100644 (file)
@@ -633,20 +633,18 @@ int socknameinfo_pretty(union sockaddr_union *sa, socklen_t salen, char **_ret)
         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);
+                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 log_error_errno(r, "sockadd_pretty() failed: %m");
 
-        ret = strdup(host);
-        if (!ret)
-                return log_oom();
+                log_debug_errno(saved_errno, "getnameinfo(%s) failed: %m", ret);
+        } else {
+                ret = strdup(host);
+                if (!ret)
+                        return log_oom();
+        }
 
         *_ret = ret;
         return 0;
@@ -659,10 +657,8 @@ int getnameinfo_pretty(int fd, char **ret) {
         assert(fd >= 0);
         assert(ret);
 
-        if (getsockname(fd, &sa.sa, &salen) < 0) {
-                log_error("getsockname(%d) failed: %m", fd);
-                return -errno;
-        }
+        if (getsockname(fd, &sa.sa, &salen) < 0)
+                return log_error_errno(errno, "getsockname(%d) failed: %m", fd);
 
         return socknameinfo_pretty(&sa, salen, ret);
 }
@@ -727,3 +723,22 @@ bool sockaddr_equal(const union sockaddr_union *a, const union sockaddr_union *b
 
         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;
+}