Author: jkim
Date: Thu Oct  6 19:59:14 2011
New Revision: 226068
URL: http://svn.freebsd.org/changeset/base/226068

Log:
  Unroll inlined strnlen(9) and make it easier to read.  No functional change.

Modified:
  head/sys/compat/linux/linux_socket.c

Modified: head/sys/compat/linux/linux_socket.c
==============================================================================
--- head/sys/compat/linux/linux_socket.c        Thu Oct  6 19:15:51 2011        
(r226067)
+++ head/sys/compat/linux/linux_socket.c        Thu Oct  6 19:59:14 2011        
(r226068)
@@ -99,12 +99,11 @@ do_sa_get(struct sockaddr **sap, const s
        int error=0, bdom;
        struct sockaddr *sa;
        struct osockaddr *kosa;
-       int alloclen;
 #ifdef INET6
        int oldv6size;
        struct sockaddr_in6 *sin6;
 #endif
-       int namelen;
+       int alloclen, hdrlen, namelen;
 
        if (*osalen < 2 || *osalen > UCHAR_MAX || !osa)
                return (EINVAL);
@@ -167,14 +166,11 @@ do_sa_get(struct sockaddr **sap, const s
                }
        }
 
-       if ((bdom == AF_LOCAL) && (*osalen > sizeof(struct sockaddr_un))) {
-               for (namelen = 0;
-                   namelen < *osalen - offsetof(struct sockaddr_un, sun_path);
-                   namelen++)
-                       if (!((struct sockaddr_un *)kosa)->sun_path[namelen])
-                               break;
-               if (namelen + offsetof(struct sockaddr_un, sun_path) >
-                   sizeof(struct sockaddr_un)) {
+       if (bdom == AF_LOCAL && *osalen > sizeof(struct sockaddr_un)) {
+               hdrlen = offsetof(struct sockaddr_un, sun_path);
+               namelen = strnlen(((struct sockaddr_un *)kosa)->sun_path,
+                   *osalen - hdrlen);
+               if (hdrlen + namelen > sizeof(struct sockaddr_un)) {
                        error = EINVAL;
                        goto out;
                }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to