New function get_unix_name_len() to simplify code.
authorBen Pfaff <blp@nicira.com>
Thu, 2 Oct 2008 21:31:29 +0000 (14:31 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 6 Oct 2008 16:44:45 +0000 (09:44 -0700)
include/socket-util.h
lib/socket-util.c
lib/vconn-unix.c

index fec4565cfb6e7d8bf68493c57cc40039156ec9b7..fe9c154e5cabd7d0e709e847958930ab4990a405 100644 (file)
@@ -45,5 +45,6 @@ int check_connection_completion(int fd);
 int drain_rcvbuf(int fd);
 int make_unix_socket(int style, bool nonblock, bool passcred,
                      const char *bind_path, const char *connect_path);
+int get_unix_name_len(socklen_t sun_len);
 
 #endif /* socket-util.h */
index 8fa663ad75fc3784c8560390f2ddcb4422343f4a..ca08de5a597bee0268080faac8d3e5e09a660ad9 100644 (file)
@@ -254,3 +254,11 @@ error:
     close(fd);
     return -error;
 }
+
+int
+get_unix_name_len(socklen_t sun_len)
+{
+    return (sun_len >= offsetof(struct sockaddr_un, sun_path)
+            ? sun_len - offsetof(struct sockaddr_un, sun_path)
+            : 0);
+}
index 9b08b10efbdd9ebf49bf7d25a80be8866e1a3d49..f296ad7f7adac508d84b2b8be089644f4a33c269 100644 (file)
@@ -114,12 +114,11 @@ punix_accept(int fd, const struct sockaddr *sa, size_t sa_len,
              struct vconn **vconnp)
 {
     const struct sockaddr_un *sun = (const struct sockaddr_un *) sa;
+    int name_len = get_unix_name_len(sa_len);
     char name[128];
 
-    if (sa_len >= offsetof(struct sockaddr_un, sun_path)) {
-        snprintf(name, sizeof name, "unix:%.*s",
-                (int) (sa_len - offsetof(struct sockaddr_un, sun_path)),
-                sun->sun_path);
+    if (name_len > 0) {
+        snprintf(name, sizeof name, "unix:%.*s", name_len, sun->sun_path);
     } else {
         strcpy(name, "unix");
     }