You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2003/04/15 19:10:18 UTC

cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_pool.c jk_pool_apr.c

mturk       2003/04/15 10:10:18

  Modified:    jk/native2/common jk_pool.c jk_pool_apr.c
  Log:
  Added pstrcat va_arg concatenation method.
  This is simple copy from APR.
  Allows to skip the following procedure we are using frequently :
  alloc
  strcpy
  strcat ... etc
  
  Revision  Changes    Path
  1.15      +69 -10    jakarta-tomcat-connectors/jk/native2/common/jk_pool.c
  
  Index: jk_pool.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_pool.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- jk_pool.c	4 Feb 2003 07:39:58 -0000	1.14
  +++ jk_pool.c	15 Apr 2003 17:10:18 -0000	1.15
  @@ -109,7 +109,7 @@
   
   static void *jk2_pool_realloc(jk_env_t *env, jk_pool_t *p, size_t sz,const void *old,
                                 size_t old_sz);
  -
  +static void *jk2_pool_strcat(jk_env_t *env, jk_pool_t *p, ...);
   
   int jk2_pool_create(jk_env_t *env, jk_pool_t **newPool,
                       jk_pool_t *parent, int size)
  @@ -146,7 +146,8 @@
       _this->pstrdup2ascii=jk2_pool_strdup2ascii;
       _this->pstrdup2ebcdic=jk2_pool_strdup2ebcdic;
       _this->realloc=jk2_pool_realloc;
  -    
  +    _this->pstrcat=jk2_pool_strcat;
  +
       *newPool = _this;
       
       return JK_OK;
  @@ -222,7 +223,7 @@
       pp=(jk_pool_private_t *)p->_private;
   
       /* Round size to the upper mult of 8 (or 16 on iSeries) */
  -	size--;
  +    size--;
   #ifdef AS400
           size /= 16;
           size = (size + 1) * 16;
  @@ -278,9 +279,9 @@
           rc[size]='\0';
           
           if (convmode == 1)
  -        	jk_xlate_to_ascii(rc, size);
  +            jk_xlate_to_ascii(rc, size);
           else if (convmode == 2)
  -        	jk_xlate_from_ascii(rc, size);        
  +            jk_xlate_from_ascii(rc, size);        
       }
   
       return rc;
  @@ -288,17 +289,17 @@
   
   static void *jk2_pool_strdup(jk_env_t *env, jk_pool_t *p, const char *s)
   {
  -	return (jk2_pool_a_strdup(env, p, s, 0));
  +    return (jk2_pool_a_strdup(env, p, s, 0));
   }
   
   static void *jk2_pool_strdup2ascii(jk_env_t *env, jk_pool_t *p, const char *s)
   {
  -	return (jk2_pool_a_strdup(env, p, s, 1));
  +    return (jk2_pool_a_strdup(env, p, s, 1));
   }
   
   static void *jk2_pool_strdup2ebcdic(jk_env_t *env, jk_pool_t *p, const char *s)
   {
  -	return (jk2_pool_a_strdup(env, p, s, 2));
  +    return (jk2_pool_a_strdup(env, p, s, 2));
   }
   
   /*
  @@ -350,6 +351,65 @@
       return rc;
   }
   
  +/** this is used to cache lengths in pstrcat */
  +#define MAX_SAVED_LENGTHS  6
  + 
  +static void *jk2_pool_strcat(jk_env_t *env, jk_pool_t *p, ...)
  +{
  +
  +    char *cp, *argp, *res;
  +    apr_size_t saved_lengths[MAX_SAVED_LENGTHS];
  +    int nargs = 0;
  +
  +    /* Pass one --- find length of required string */
  +
  +    apr_size_t len = 0;
  +    va_list adummy;
  +
  +    va_start(adummy, p);
  +
  +    while ((cp = va_arg(adummy, char *)) != NULL) {
  +        apr_size_t cplen = strlen(cp);
  +        if (nargs < MAX_SAVED_LENGTHS) {
  +            saved_lengths[nargs++] = cplen;
  +        }
  +        len += cplen;
  +    }
  +
  +    va_end(adummy);
  +
  +    /* Allocate the required string */
  +
  +    res = (char *) jk2_pool_alloc(env, p, len+1);
  +    cp = res;
  +
  +    /* Pass two --- copy the argument strings into the result space */
  +
  +    va_start(adummy, p);
  +
  +    nargs = 0;
  +    while ((argp = va_arg(adummy, char *)) != NULL) {
  +        if (nargs < MAX_SAVED_LENGTHS) {
  +            len = saved_lengths[nargs++];
  +        }
  +        else {
  +            len = strlen(argp);
  +        }
  + 
  +        memcpy(cp, argp, len);
  +        cp += len;
  +    }
  +
  +    va_end(adummy);
  +
  +    /* Return the result string */
  +
  +    *cp = '\0';
  +
  +    return res; 
  +}
  +
  +
   
   /* Not used yet */
   int JK_METHOD jk2_pool_factory( jk_env_t *env, void **result,
  @@ -361,6 +421,5 @@
       
       return JK_OK;
   }
  -
   
   
  
  
  
  1.8       +59 -0     jakarta-tomcat-connectors/jk/native2/common/jk_pool_apr.c
  
  Index: jk_pool_apr.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_pool_apr.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- jk_pool_apr.c	4 Feb 2003 07:39:58 -0000	1.7
  +++ jk_pool_apr.c	15 Apr 2003 17:10:18 -0000	1.8
  @@ -170,6 +170,64 @@
       return newPool;
   }
   
  +/** this is used to cache lengths in pstrcat */
  +#define MAX_SAVED_LENGTHS  6
  + 
  +static void *jk2_pool_apr_strcat(jk_env_t *env, jk_pool_t *p, ...)
  +{
  +
  +    char *cp, *argp, *res;
  +    apr_size_t saved_lengths[MAX_SAVED_LENGTHS];
  +    int nargs = 0;
  +
  +    /* Pass one --- find length of required string */
  +
  +    apr_size_t len = 0;
  +    va_list adummy;
  +
  +    va_start(adummy, p);
  +
  +    while ((cp = va_arg(adummy, char *)) != NULL) {
  +        apr_size_t cplen = strlen(cp);
  +        if (nargs < MAX_SAVED_LENGTHS) {
  +            saved_lengths[nargs++] = cplen;
  +        }
  +        len += cplen;
  +    }
  +
  +    va_end(adummy);
  +
  +    /* Allocate the required string */
  +
  +    res = (char *) apr_palloc(p->_private, len+1);
  +    cp = res;
  +
  +    /* Pass two --- copy the argument strings into the result space */
  +
  +    va_start(adummy, p);
  +
  +    nargs = 0;
  +    while ((argp = va_arg(adummy, char *)) != NULL) {
  +        if (nargs < MAX_SAVED_LENGTHS) {
  +            len = saved_lengths[nargs++];
  +        }
  +        else {
  +            len = strlen(argp);
  +        }
  + 
  +        memcpy(cp, argp, len);
  +        cp += len;
  +    }
  +
  +    va_end(adummy);
  +
  +    /* Return the result string */
  +
  +    *cp = '\0';
  +
  +    return res; 
  +}
  +
   
   int JK_METHOD jk2_pool_apr_create( jk_env_t *env, jk_pool_t **newPool, jk_pool_t *parent,
                                      void *aprPoolV)
  @@ -195,6 +253,7 @@
       _this->calloc=jk2_pool_apr_calloc;
       _this->pstrdup=jk2_pool_apr_strdup;
       _this->realloc=jk2_pool_apr_realloc;
  +    _this->pstrcat=jk2_pool_apr_strcat;
   }
   
   
  
  
  

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