Add proper check for existance of struct sockaddr member sa_len.

diff --git a/configure b/configure
index 4f1a4a8..87207cb 100755
--- a/configure
+++ b/configure
@@ -6840,9 +6840,9 @@
 fi
 
 
-echo $ac_n "checking "for sun_len in struct sockaddr_un"""... $ac_c" 1>&6
-echo "configure:6845: checking "for sun_len in struct sockaddr_un"" >&5
-if eval "test \"`echo '$''{'ac_cv_c_sun_len'+set}'`\" = set"; then
+echo $ac_n "checking "for sa_len in struct sockaddr"""... $ac_c" 1>&6
+echo "configure:6845: checking "for sa_len in struct sockaddr"" >&5
+if eval "test \"`echo '$''{'ac_cv_c_sockaddr_sa_len'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
@@ -6850,25 +6850,62 @@
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/socket.h>
+
+int main() {
+static struct sockaddr addr; addr.sa_len = 1
+; return 0; }
+EOF
+if { (eval echo configure:6859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_sockaddr_sa_len="yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_sockaddr_sa_len="no"
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_sockaddr_sa_len" 1>&6
+if test "$ac_cv_c_sockaddr_sa_len" = "yes"
+then
+    cat >> confdefs.h <<\EOF
+#define HAVE_SOCKADDR_SA_LEN 1
+EOF
+
+fi
+
+
+echo $ac_n "checking "for sun_len in struct sockaddr_un"""... $ac_c" 1>&6
+echo "configure:6882: checking "for sun_len in struct sockaddr_un"" >&5
+if eval "test \"`echo '$''{'ac_cv_c_sockaddr_sun_len'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 6887 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/socket.h>
 #include <sys/un.h>
 int main() {
 static struct sockaddr_un addr; addr.sun_len = 1
 ; return 0; }
 EOF
-if { (eval echo configure:6859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6896: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
-  ac_cv_c_sun_len="yes"
+  ac_cv_c_sockaddr_sun_len="yes"
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
-  ac_cv_c_sun_len="no"
+  ac_cv_c_sockaddr_sun_len="no"
 fi
 rm -f conftest*
 fi
 
-echo "$ac_t""$ac_cv_c_sun_len" 1>&6
-if test "$ac_cv_c_sun_len" = "yes"
+echo "$ac_t""$ac_cv_c_sockaddr_sun_len" 1>&6
+if test "$ac_cv_c_sockaddr_sun_len" = "yes"
 then
     cat >> confdefs.h <<\EOF
 #define HAVE_SOCKADDR_SUN_LEN 1
@@ -6878,12 +6915,12 @@
 
 
 echo $ac_n "checking "whether we need to define __i386__"""... $ac_c" 1>&6
-echo "configure:6882: checking "whether we need to define __i386__"" >&5
+echo "configure:6919: checking "whether we need to define __i386__"" >&5
 if eval "test \"`echo '$''{'ac_cv_cpp_def_i386'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6887 "configure"
+#line 6924 "configure"
 #include "confdefs.h"
 #if (defined(i386) || defined(__i386)) && !defined(__i386__)
 yes
diff --git a/configure.in b/configure.in
index f8513fc..65335df 100644
--- a/configure.in
+++ b/configure.in
@@ -1154,14 +1154,26 @@
     AC_DEFINE(HAVE_MSGHDR_ACCRIGHTS, 1, [Define if struct msghdr contains msg_accrights])
 fi
 
+dnl *** Check for the sa_len member in struct sockaddr
+
+AC_CACHE_CHECK("for sa_len in struct sockaddr", ac_cv_c_sockaddr_sa_len,
+ AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/socket.h>
+], [static struct sockaddr addr; addr.sa_len = 1],
+                ac_cv_c_sockaddr_sa_len="yes", ac_cv_c_sockaddr_sa_len="no"))
+if test "$ac_cv_c_sockaddr_sa_len" = "yes"
+then
+    AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Define if struct sockaddr contains sa_len])
+fi
+
 dnl *** Check for the sun_len member in struct sockaddr_un
 
-AC_CACHE_CHECK("for sun_len in struct sockaddr_un", ac_cv_c_sun_len,
+AC_CACHE_CHECK("for sun_len in struct sockaddr_un", ac_cv_c_sockaddr_sun_len,
  AC_TRY_COMPILE([#include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>], [static struct sockaddr_un addr; addr.sun_len = 1],
-                ac_cv_c_sun_len="yes", ac_cv_c_sun_len="no"))
-if test "$ac_cv_c_sun_len" = "yes"
+                ac_cv_c_sockaddr_sun_len="yes", ac_cv_c_sockaddr_sun_len="no"))
+if test "$ac_cv_c_sockaddr_sun_len" = "yes"
 then
     AC_DEFINE(HAVE_SOCKADDR_SUN_LEN, 1, [Define if struct sockaddr_un contains sun_len])
 fi
diff --git a/dlls/rpcrt4/rpcrt4_main.c b/dlls/rpcrt4/rpcrt4_main.c
index 27b328b..3b864fe 100644
--- a/dlls/rpcrt4/rpcrt4_main.c
+++ b/dlls/rpcrt4/rpcrt4_main.c
@@ -105,7 +105,7 @@
        * However, under earlier systems, sa_len isn't present, so
        *  the size is just sizeof(struct ifreq)
        */
-#ifdef HAVE_SA_LEN
+#ifdef HAVE_SOCKADDR_SA_LEN
 #  ifndef max
 #   define max(a,b) ((a) > (b) ? (a) : (b))
 #  endif
@@ -113,8 +113,8 @@
 sizeof((i).ifr_name)+(i).ifr_addr.sa_len)
 # else
 #  define ifreq_size(i) sizeof(struct ifreq)
-# endif /* HAVE_SA_LEN */
-      
+# endif /* defined(HAVE_SOCKADDR_SA_LEN) */
+
       sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
       if (sd < 0) {
 	 /* if we can't open a socket, just use random numbers */
@@ -143,7 +143,7 @@
 	 } else {
 	    /* loop through the interfaces, looking for a valid one */
 	    n = ifc.ifc_len;
-	    for (i = 0; i < n; i+= ifreq_size(*ifr) ) {
+	    for (i = 0; i < n; i+= ifreq_size(ifr) ) {
 	       ifrp = (struct ifreq *)((char *) ifc.ifc_buf+i);
 	       strncpy(ifr.ifr_name, ifrp->ifr_name, IFNAMSIZ);
 	       /* try to get the address for this interface */
diff --git a/include/config.h.in b/include/config.h.in
index 3e2bd4c..5829fd5 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -520,6 +520,9 @@
 /* Define if struct msghdr contains msg_accrights */
 #undef HAVE_MSGHDR_ACCRIGHTS
 
+/* Define if struct sockaddr contains sa_len */
+#undef HAVE_SOCKADDR_SA_LEN
+
 /* Define if struct sockaddr_un contains sun_len */
 #undef HAVE_SOCKADDR_SUN_LEN