You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by mt...@apache.org on 2010/05/28 16:16:39 UTC

svn commit: r949183 - in /trafficserver/traffic/trunk: configure.ac iocore/cache/Cache.cc iocore/cache/Store.cc iocore/net/SSLNet.cc libinktomi++/ink_assert.cc libinktomi++/ink_config.h.in libinktomi++/ink_string.cc libinktomi++/ink_string.h

Author: mturk
Date: Fri May 28 14:16:39 2010
New Revision: 949183

URL: http://svn.apache.org/viewvc?rev=949183&view=rev
Log:
TS-369: Add strlcpy and strlcat for non-BSD platforms

Modified:
    trafficserver/traffic/trunk/configure.ac
    trafficserver/traffic/trunk/iocore/cache/Cache.cc
    trafficserver/traffic/trunk/iocore/cache/Store.cc
    trafficserver/traffic/trunk/iocore/net/SSLNet.cc
    trafficserver/traffic/trunk/libinktomi++/ink_assert.cc
    trafficserver/traffic/trunk/libinktomi++/ink_config.h.in
    trafficserver/traffic/trunk/libinktomi++/ink_string.cc
    trafficserver/traffic/trunk/libinktomi++/ink_string.h

Modified: trafficserver/traffic/trunk/configure.ac
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/configure.ac?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/configure.ac (original)
+++ trafficserver/traffic/trunk/configure.ac Fri May 28 14:16:39 2010
@@ -676,7 +676,7 @@ AC_SUBST(use_sqlite3)
 AC_SUBST(use_libdb)
 
 ATS_FLAG_FUNCS([clock_gettime kqueue epoll_ctl posix_memalign posix_fadvise lrand48_r srand48_r port_create])
-ATS_FLAG_FUNCS([strndup])
+ATS_FLAG_FUNCS([strndup strlcpy strlcat])
 
 AC_SUBST(has_clock_gettime)
 AC_SUBST(has_posix_memalign)
@@ -684,6 +684,8 @@ AC_SUBST(has_posix_fadvise)
 AC_SUBST(has_lrand48_r)
 AC_SUBST(has_srand48_r)
 AC_SUBST(has_strndup)
+AC_SUBST(has_strlcpy)
+AC_SUBST(has_strlcat)
 
 has_eventfd=0
 AS_IF([test "x$enable_eventfd" = "xyes"],

Modified: trafficserver/traffic/trunk/iocore/cache/Cache.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Cache.cc?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Cache.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Cache.cc Fri May 28 14:16:39 2010
@@ -489,14 +489,14 @@ CacheProcessor::start_internal(int flags
     sd = theCacheStore.disk[i];
     char path[PATH_MAX];
     int opts = O_RDWR;
-    ink_strncpy(path, sd->pathname, sizeof(path));
+    ink_strlcpy(path, sd->pathname, sizeof(path));
     if (!sd->file_pathname) {
 #if !defined(_WIN32)
       if (config_partitions.num_http_partitions && config_partitions.num_stream_partitions) {
         Warning("It is suggested that you use raw disks if streaming and http are in the same cache");
       }
 #endif
-      strncat(path, "/cache.db", (sizeof(path) - strlen(path) - 1));
+      ink_strlcat(path, "/cache.db", sizeof(path));
       opts |= O_CREAT;
     }
     opts |= _O_ATTRIB_OVERLAPPED;
@@ -2731,7 +2731,7 @@ ink_cache_init(ModuleVersion v)
     snprintf(p, sizeof(p), "%s/", cache_system_config_directory);
     IOCORE_ReadConfigString(p + strlen(p), "proxy.config.cache.storage_filename", PATH_NAME_MAX - strlen(p) - 1);
     if (p[strlen(p) - 1] == '/' || p[strlen(p) - 1] == '\\') {
-      strncat(p, "storage.config", (sizeof(p) - strlen(p) - 1));
+      ink_strlcat(p, "storage.config", sizeof(p));
     }
     Warning("no cache disks specified in %s: cache disabled\n", p);
     //exit(1);

Modified: trafficserver/traffic/trunk/iocore/cache/Store.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/cache/Store.cc?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/cache/Store.cc (original)
+++ trafficserver/traffic/trunk/iocore/cache/Store.cc Fri May 28 14:16:39 2010
@@ -232,7 +232,7 @@ Span::path(char *filename, int64 * aoffs
       buf[pl] = '/';
       buf[pl+1] = '\0';
     }
-    strncat(buf, filename, buflen - (pl + ll + 2));
+    ink_strlcat(buf, filename, buflen);
   }
 
   return strlen(buf);

Modified: trafficserver/traffic/trunk/iocore/net/SSLNet.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/net/SSLNet.cc?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/net/SSLNet.cc (original)
+++ trafficserver/traffic/trunk/iocore/net/SSLNet.cc Fri May 28 14:16:39 2010
@@ -436,7 +436,7 @@ SSLNetProcessor::initSSLServerCTX(SslCon
     completeServerCertPath = (char *) xmalloc(completeServerCertPathSize);
 
     ink_strncpy(completeServerCertPath, (const char *) param->getServerCertPathOnly(), completeServerCertPathSize);
-    strncat(completeServerCertPath, serverCertPtr, (completeServerCertPathSize - strlen(completeServerCertPath) - 1));
+    ink_strlcat(completeServerCertPath, serverCertPtr, completeServerCertPathSize);
     if (SSL_CTX_use_certificate_file(lCtx, completeServerCertPath, SSL_FILETYPE_PEM) <= 0) {
       logSSLError("Cannot use server certificate file");
       return (-2);

Modified: trafficserver/traffic/trunk/libinktomi++/ink_assert.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_assert.cc?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_assert.cc (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_assert.cc Fri May 28 14:16:39 2010
@@ -26,8 +26,7 @@ Assertions
 
 ***************************************************************************/
 
-#include <stdio.h>
-#include <string.h>
+#include "ink_platform.h"
 #include "ink_assert.h"
 #include "ink_error.h"
 #include "ink_unused.h"
@@ -36,14 +35,14 @@ Assertions
 int
 _ink_assert(const char *a, const char *f, int l)
 {
-  char buf1[101];
-  char buf2[256];
 
 #ifndef NO_ASSERTS
-  ink_strncpy(buf1, f, 100);
+  char buf1[256];
+  char buf2[512];
+  ink_strlcpy(buf1, f, sizeof(buf1));
   snprintf(buf2, sizeof(buf2), "%s:%d: failed assert `", buf1, l);
-  strncat(buf2, a, 100);
-  strncat(buf2, "`", 1);
+  ink_strlcat(buf2, a, sizeof(buf2));
+  ink_strlcat(buf2, "`", sizeof(buf2));
   ink_fatal(1, buf2);
 #endif /* NO_ASSERTS */
 

Modified: trafficserver/traffic/trunk/libinktomi++/ink_config.h.in
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_config.h.in?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_config.h.in (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_config.h.in Fri May 28 14:16:39 2010
@@ -97,6 +97,8 @@
 #define ATS_HAS_LRAND48_R               @has_lrand48_r@
 #define ATS_HAS_SRAND48_R               @has_srand48_r@
 #define ATS_HAS_STRNDUP                 @has_strndup@
+#define ATS_HAS_STRLCPY                 @has_strlcpy@
+#define ATS_HAS_STRLCAT                 @has_strlcat@
 
 #define ATS_USE_SQLITE3                 @use_sqlite3@
 #define ATS_USE_LIBDB                   @use_libdb@

Modified: trafficserver/traffic/trunk/libinktomi++/ink_string.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_string.cc?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_string.cc (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_string.cc Fri May 28 14:16:39 2010
@@ -409,6 +409,79 @@ ink_strndup(const char *str, size_t n)
 }
 #endif
 
+/*
+ * Copyright (c) 1998 Todd C. Miller <To...@courtesan.com>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+#if !ATS_HAS_STRLCPY
+size_t
+ink_strlcpy(char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz;
+
+  /* Copy as many bytes as will fit */
+  if (n != 0) {
+    while (--n != 0) {
+      if ((*d++ = *s++) == '\0')
+        break;
+    }
+  }
+
+  /* Not enough room in dst, add NUL and traverse rest of src */
+  if (n == 0) {
+    if (siz != 0)
+                            *d = '\0';      /* NUL-terminate dst */
+    while (*s++)
+      ;
+  }
+
+  return (s - src - 1);   /* count does not include NUL */
+}
+#endif
+
+#if !ATS_HAS_STRLCAT
+size_t
+ink_strlcat(char *dst, const char *src, size_t siz)
+{
+  char *d = dst;
+  const char *s = src;
+  size_t n = siz;
+  size_t dlen;
+
+  /* Find the end of dst and adjust bytes left but don't go past end */
+  while (n-- != 0 && *d != '\0')
+    d++;
+  dlen = d - dst;
+  n = siz - dlen;
+
+  if (n == 0)
+    return (dlen + strlen(s));
+  while (*s != '\0') {
+    if (n != 1) {
+      *d++ = *s;
+      n--;
+    }
+    s++;
+  }
+  *d = '\0';
+
+  return (dlen + (s - src));  /* count does not include NUL */
+}
+#endif
+
 char *
 ink_strtok_r(char *s1, const char *s2, char **lasts)
 {

Modified: trafficserver/traffic/trunk/libinktomi++/ink_string.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_string.h?rev=949183&r1=949182&r2=949183&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_string.h (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_string.h Fri May 28 14:16:39 2010
@@ -81,6 +81,28 @@ char *ink_string_mjoin(int nstrings, ...
 #else
 char *ink_strndup(const char *str, size_t n);
 #endif
+/*
+ * Copy src to string dst of size siz.  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
+ */
+#if ATS_HAS_STRLCPY
+#define  ink_strlcpy strlcpy
+#else
+size_t ink_strlcpy(char *dst, const char *str, size_t siz);
+#endif
+/*
+ * Appends src to string dst of size siz (unlike strncat, siz is the
+ * full size of dst, not space left).  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
+ * Returns strlen(src) + MIN(siz, strlen(initial dst)).
+ * If retval >= siz, truncation occurred.
+ */
+#if ATS_HAS_STRLCAT
+#define  ink_strlcat strlcat
+#else
+size_t ink_strlcat(char *dst, const char *str, size_t siz);
+#endif
 
 /* 9/3/98 elam: Added this because NT doesn't have strtok_r() */
 char *ink_strtok_r(char *s1, const char *s2, char **lasts);