diff -aruN curl-7.25.0/configure.ac curl-7.25.0.N/configure.ac
--- curl-7.25.0/configure.ac	2012-03-08 11:35:23.000000000 -0800
+++ curl-7.25.0.N/configure.ac	2014-10-05 15:25:05.000000000 -0700
@@ -2776,7 +2776,6 @@
 CURL_CHECK_FUNC_STRDUP
 CURL_CHECK_FUNC_STRERROR_R
 CURL_CHECK_FUNC_STRICMP
-CURL_CHECK_FUNC_STRLCAT
 CURL_CHECK_FUNC_STRNCASECMP
 CURL_CHECK_FUNC_STRNCMPI
 CURL_CHECK_FUNC_STRNICMP
diff -aruN curl-7.25.0/lib/config-dos.h curl-7.25.0.N/lib/config-dos.h
--- curl-7.25.0/lib/config-dos.h	2012-03-08 11:35:24.000000000 -0800
+++ curl-7.25.0.N/lib/config-dos.h	2014-10-05 15:25:05.000000000 -0700
@@ -164,10 +164,6 @@
   #define HAVE_SYS_TIME_H 1
   #define HAVE_VARIADIC_MACROS_GCC 1
 
-  #if (DJGPP_MINOR >= 4)
-    #define HAVE_STRLCAT  1
-  #endif
-
   /* Because djgpp <= 2.03 doesn't have snprintf() etc. */
   #if (DJGPP_MINOR < 4)
     #define _MPRINTF_REPLACE
diff -aruN curl-7.25.0/lib/config-os400.h curl-7.25.0.N/lib/config-os400.h
--- curl-7.25.0/lib/config-os400.h	2012-03-08 11:35:24.000000000 -0800
+++ curl-7.25.0.N/lib/config-os400.h	2014-10-05 15:25:05.000000000 -0700
@@ -295,9 +295,6 @@
 /* Define if you have the <string.h> header file. */
 #define HAVE_STRING_H
 
-/* Define if you have the `strlcat' function. */
-#undef HAVE_STRLCAT
-
 /* Define if you have the `strlcpy' function. */
 #undef HAVE_STRLCPY
 
diff -aruN curl-7.25.0/lib/config-riscos.h curl-7.25.0.N/lib/config-riscos.h
--- curl-7.25.0/lib/config-riscos.h	2012-03-08 11:35:24.000000000 -0800
+++ curl-7.25.0.N/lib/config-riscos.h	2014-10-05 15:25:05.000000000 -0700
@@ -293,9 +293,6 @@
 /* Define if you have the <string.h> header file. */
 #define HAVE_STRING_H
 
-/* Define if you have the `strlcat' function. */
-#undef HAVE_STRLCAT
-
 /* Define if you have the `strlcpy' function. */
 #undef HAVE_STRLCPY
 
diff -aruN curl-7.25.0/lib/config-symbian.h curl-7.25.0.N/lib/config-symbian.h
--- curl-7.25.0/lib/config-symbian.h	2011-11-04 15:32:55.000000000 -0700
+++ curl-7.25.0.N/lib/config-symbian.h	2014-10-05 15:25:05.000000000 -0700
@@ -532,9 +532,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
-/* Define to 1 if you have the `strlcat' function. */
-#define HAVE_STRLCAT 1
-
 /* Define to 1 if you have the `strlcpy' function. */
 #define HAVE_STRLCPY 1
 
diff -aruN curl-7.25.0/lib/config-tpf.h curl-7.25.0.N/lib/config-tpf.h
--- curl-7.25.0/lib/config-tpf.h	2011-11-04 15:32:55.000000000 -0700
+++ curl-7.25.0.N/lib/config-tpf.h	2014-10-05 15:25:05.000000000 -0700
@@ -477,9 +477,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
-/* Define to 1 if you have the `strlcat' function. */
-/* #undef HAVE_STRLCAT */
-
 /* Define to 1 if you have the `strlcpy' function. */
 /* #undef HAVE_STRLCPY */
 
diff -aruN curl-7.25.0/lib/config-vxworks.h curl-7.25.0.N/lib/config-vxworks.h
--- curl-7.25.0/lib/config-vxworks.h	2011-11-04 15:32:55.000000000 -0700
+++ curl-7.25.0.N/lib/config-vxworks.h	2014-10-05 15:25:05.000000000 -0700
@@ -604,9 +604,6 @@
 /* Define to 1 if you have the <string.h> header file. */
 #define HAVE_STRING_H 1
 
-/* Define to 1 if you have the strlcat function. */
-/* #undef HAVE_STRLCAT */
-
 /* Define to 1 if you have the `strlcpy' function. */
 /* #undef HAVE_STRLCPY */
 
diff -aruN curl-7.25.0/lib/if2ip.c curl-7.25.0.N/lib/if2ip.c
--- curl-7.25.0/lib/if2ip.c	2012-03-08 11:35:24.000000000 -0800
+++ curl-7.25.0.N/lib/if2ip.c	2014-10-05 15:25:05.000000000 -0700
@@ -101,6 +101,7 @@
          curl_strequal(iface->ifa_name, interf)) {
         void *addr;
         char scope[12]="";
+        char ipstr[64];
 #ifdef ENABLE_IPV6
         if(af == AF_INET6) {
           unsigned int scopeid = 0;
@@ -115,8 +116,9 @@
         else
 #endif
           addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr;
-        ip = (char *) Curl_inet_ntop(af, addr, buf, buf_size);
-        strlcat(buf, scope, buf_size);
+        ip = (char *) Curl_inet_ntop(af, addr, ipstr, sizeof(ipstr));
+        snprintf(buf, buf_size, "%s%s", ip, scope);
+        ip = buf;
         break;
       }
     }
diff -aruN curl-7.25.0/lib/socks.c curl-7.25.0.N/lib/socks.c
--- curl-7.25.0/lib/socks.c	2012-03-08 11:35:25.000000000 -0800
+++ curl-7.25.0.N/lib/socks.c	2014-10-05 15:25:05.000000000 -0700
@@ -199,8 +199,15 @@
    * This is currently not supporting "Identification Protocol (RFC1413)".
    */
   socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
-  if(proxy_name)
-    strlcat((char*)socksreq + 8, proxy_name, sizeof(socksreq) - 8);
+  if(proxy_name) {
+    size_t plen = strlen(proxy_name);
+    if(plen >= sizeof(socksreq) - 8) {
+      failf(data, "Too long SOCKS proxy name, can't use!\n");
+      return CURLE_COULDNT_CONNECT;
+    }
+    /* copy the proxy name WITH trailing zero */
+    memcpy(socksreq + 8, proxy_name, plen+1);
+  }
 
   /*
    * Make connection
diff -aruN curl-7.25.0/lib/strequal.c curl-7.25.0.N/lib/strequal.c
--- curl-7.25.0/lib/strequal.c	2012-03-08 11:35:25.000000000 -0800
+++ curl-7.25.0.N/lib/strequal.c	2014-10-05 15:25:05.000000000 -0700
@@ -77,48 +77,3 @@
   return toupper(*first) == toupper(*second);
 #endif
 }
-
-#ifndef HAVE_STRLCAT
-/*
- * The strlcat() function appends the NUL-terminated string src to the end
- * of dst. It will append at most size - strlen(dst) - 1 bytes, NUL-termi-
- * nating the result.
- *
- * The strlcpy() and strlcat() functions return the total length of the
- * string they tried to create.  For strlcpy() that means the length of src.
- * For strlcat() that means the initial length of dst plus the length of
- * src. While this may seem somewhat confusing it was done to make trunca-
- * tion detection simple.
- *
- *
- */
-size_t Curl_strlcat(char *dst, const char *src, size_t siz)
-{
-  char *d = dst;
-  const char *s = src;
-  size_t n = siz;
-  union {
-    ssize_t sig;
-     size_t uns;
-  } dlen;
-
-  /* Find the end of dst and adjust bytes left but don't go past end */
-  while(n-- != 0 && *d != '\0')
-    d++;
-  dlen.sig = d - dst;
-  n = siz - dlen.uns;
-
-  if(n == 0)
-    return(dlen.uns + strlen(s));
-  while(*s != '\0') {
-    if(n != 1) {
-      *d++ = *s;
-      n--;
-    }
-    s++;
-  }
-  *d = '\0';
-
-  return(dlen.uns + (s - src));     /* count does not include NUL */
-}
-#endif
diff -aruN curl-7.25.0/lib/strequal.h curl-7.25.0.N/lib/strequal.h
--- curl-7.25.0/lib/strequal.h	2011-03-19 08:16:07.000000000 -0700
+++ curl-7.25.0.N/lib/strequal.h	2014-10-05 15:25:05.000000000 -0700
@@ -27,9 +27,4 @@
 #define strequal(a,b) curl_strequal(a,b)
 #define strnequal(a,b,c) curl_strnequal(a,b,c)
 
-#ifndef HAVE_STRLCAT
-#define strlcat(x,y,z) Curl_strlcat(x,y,z)
-#endif
-size_t strlcat(char *dst, const char *src, size_t siz);
-
 #endif
diff -aruN curl-7.25.0/m4/curl-functions.m4 curl-7.25.0.N/m4/curl-functions.m4
--- curl-7.25.0/m4/curl-functions.m4	2012-03-21 16:12:36.000000000 -0700
+++ curl-7.25.0.N/m4/curl-functions.m4	2014-10-05 15:25:05.000000000 -0700
@@ -6418,92 +6418,6 @@
   fi
 ])
 
-
-dnl CURL_CHECK_FUNC_STRLCAT
-dnl -------------------------------------------------
-dnl Verify if strlcat is available, prototyped, and
-dnl can be compiled. If all of these are true, and
-dnl usage has not been previously disallowed with
-dnl shell variable curl_disallow_strlcat, then
-dnl HAVE_STRLCAT will be defined.
-
-AC_DEFUN([CURL_CHECK_FUNC_STRLCAT], [
-  AC_REQUIRE([CURL_INCLUDES_STRING])dnl
-  #
-  tst_links_strlcat="unknown"
-  tst_proto_strlcat="unknown"
-  tst_compi_strlcat="unknown"
-  tst_allow_strlcat="unknown"
-  #
-  AC_MSG_CHECKING([if strlcat can be linked])
-  AC_LINK_IFELSE([
-    AC_LANG_FUNC_LINK_TRY([strlcat])
-  ],[
-    AC_MSG_RESULT([yes])
-    tst_links_strlcat="yes"
-  ],[
-    AC_MSG_RESULT([no])
-    tst_links_strlcat="no"
-  ])
-  #
-  if test "$tst_links_strlcat" = "yes"; then
-    AC_MSG_CHECKING([if strlcat is prototyped])
-    AC_EGREP_CPP([strlcat],[
-      $curl_includes_string
-    ],[
-      AC_MSG_RESULT([yes])
-      tst_proto_strlcat="yes"
-    ],[
-      AC_MSG_RESULT([no])
-      tst_proto_strlcat="no"
-    ])
-  fi
-  #
-  if test "$tst_proto_strlcat" = "yes"; then
-    AC_MSG_CHECKING([if strlcat is compilable])
-    AC_COMPILE_IFELSE([
-      AC_LANG_PROGRAM([[
-        $curl_includes_string
-      ]],[[
-        if(0 != strlcat(0, 0, 0))
-          return 1;
-      ]])
-    ],[
-      AC_MSG_RESULT([yes])
-      tst_compi_strlcat="yes"
-    ],[
-      AC_MSG_RESULT([no])
-      tst_compi_strlcat="no"
-    ])
-  fi
-  #
-  if test "$tst_compi_strlcat" = "yes"; then
-    AC_MSG_CHECKING([if strlcat usage allowed])
-    if test "x$curl_disallow_strlcat" != "xyes"; then
-      AC_MSG_RESULT([yes])
-      tst_allow_strlcat="yes"
-    else
-      AC_MSG_RESULT([no])
-      tst_allow_strlcat="no"
-    fi
-  fi
-  #
-  AC_MSG_CHECKING([if strlcat might be used])
-  if test "$tst_links_strlcat" = "yes" &&
-     test "$tst_proto_strlcat" = "yes" &&
-     test "$tst_compi_strlcat" = "yes" &&
-     test "$tst_allow_strlcat" = "yes"; then
-    AC_MSG_RESULT([yes])
-    AC_DEFINE_UNQUOTED(HAVE_STRLCAT, 1,
-      [Define to 1 if you have the strlcat function.])
-    ac_cv_func_strlcat="yes"
-  else
-    AC_MSG_RESULT([no])
-    ac_cv_func_strlcat="no"
-  fi
-])
-
-
 dnl CURL_CHECK_FUNC_STRNCASECMP
 dnl -------------------------------------------------
 dnl Verify if strncasecmp is available, prototyped, and
