Author: mturk
Date: Mon Oct 31 13:04:18 2011
New Revision: 1195439

URL: http://svn.apache.org/viewvc?rev=1195439&view=rev
Log:
Add varargs pool strcat. Similar to APR's apr_pstrcatv

Modified:
    tomcat/jk/trunk/native/common/jk_pool.c
    tomcat/jk/trunk/native/common/jk_pool.h

Modified: tomcat/jk/trunk/native/common/jk_pool.c
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_pool.c?rev=1195439&r1=1195438&r2=1195439&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_pool.c (original)
+++ tomcat/jk/trunk/native/common/jk_pool.c Mon Oct 31 13:04:18 2011
@@ -118,19 +118,52 @@ char *jk_pool_strdup(jk_pool_t *p, const
 char *jk_pool_strcat(jk_pool_t *p, const char *s, const char *a)
 {
     char *rc = NULL;
-    if (s && p) {
-        size_t size = strlen(s);
-        if (a)
-            size += strlen(a);
+
+    if (s && a && p) {
+        size_t szs = strlen(s);
+        size_t sza = strlen(a);
+        if ((szs + sza) == 0) {
+            return "";
+        }
+        rc = jk_pool_alloc(p, szs + sza + 1);
+        if (rc) {
+            memcpy(rc, s, szs);
+            memcpy(rc + szs, a, sza + 1);
+        }
+    }
+
+    return rc;
+}
+
+char *jk_pool_strcatv(jk_pool_t *p, ...)
+{
+    char *cp;
+    char *rc = NULL;
+    va_list ap;
+
+    if (p) {
+        char   *str;
+        size_t size = 0;
+        va_start(ap, p);
+        while ((str = va_arg(ap, char *)) != 0) {
+            size += strlen(str);
+        }
+        va_end(ap);
         if (size == 0) {
             return "";
-        }            
+        }
         size++;
-        rc = jk_pool_alloc(p, size);
+        cp = rc = jk_pool_alloc(p, size);
         if (rc) {
-            if (rc != s)
-                strcpy(rc, s);
-            strcat(rc, a);
+            size_t len = 0;
+            va_start(ap, p);
+            while ((str = va_arg(ap, char *)) != 0) {
+                len = strlen(str);
+                memcpy(cp, str, len);
+                cp += len;
+            }
+            va_end(ap);
+            *cp = '\0';
         }
     }
 
@@ -173,7 +206,7 @@ static void *jk_pool_dyn_alloc(jk_pool_t
         else {
 #if defined (DEBUG) || defined(_DEBUG)
             jk_dump_pool(p, stderr);
-#endif            
+#endif
             return NULL;
         }
     }

Modified: tomcat/jk/trunk/native/common/jk_pool.h
URL: 
http://svn.apache.org/viewvc/tomcat/jk/trunk/native/common/jk_pool.h?rev=1195439&r1=1195438&r2=1195439&view=diff
==============================================================================
--- tomcat/jk/trunk/native/common/jk_pool.h (original)
+++ tomcat/jk/trunk/native/common/jk_pool.h Mon Oct 31 13:04:18 2011
@@ -120,7 +120,9 @@ void *jk_pool_realloc(jk_pool_t *p,
 
 char *jk_pool_strdup(jk_pool_t *p, const char *s);
 
-char *jk_pool_strdcat(jk_pool_t *p, const char *s, const char *a);
+char *jk_pool_strcat(jk_pool_t *p, const char *s, const char *a);
+
+char *jk_pool_strcatv(jk_pool_t *p, ...);
 
 #ifdef __cplusplus
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to