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);