costin      01/12/13 23:09:31

  Modified:    jk/native2/common jk_map.c
  Log:
  The implementation change to support the new interface.
  
  Revision  Changes    Path
  1.7       +379 -354  jakarta-tomcat-connectors/jk/native2/common/jk_map.c
  
  Index: jk_map.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_map.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- jk_map.c  2001/12/12 21:56:43     1.6
  +++ jk_map.c  2001/12/14 07:09:31     1.7
  @@ -58,7 +58,7 @@
   /***************************************************************************
    * Description: General purpose map object                                 *
    * Author:      Gal Shachor <[EMAIL PROTECTED]>                           *
  - * Version:     $Revision: 1.6 $                                           *
  + * Version:     $Revision: 1.7 $                                           *
    ***************************************************************************/
   
   #include "jk_global.h"
  @@ -69,132 +69,241 @@
   #define CAPACITY_INC_SIZE (50)
   #define LENGTH_OF_LINE    (1024)
   
  -struct jk_map {
  -    jk_pool_t *pool;
  +typedef struct jk_map_private {
  +    char **names;
  +    void **values;
  +
  +    int capacity;
  +    int size;
  +} jk_map_private_t;
   
  -    const char **names;
  -    const void **values;
  -
  -    unsigned capacity;
  -    unsigned size;
  -};
  -
  +static int jk_map_default_realloc(jk_map_t *m);
   static void trim_prp_comment(char *prp);
   static int trim(char *s);
  -static int map_realloc(jk_map_t *m);
   
  -int map_alloc(jk_map_t **m, jk_pool_t *pool )
  +static void *jk_map_default_get(jk_env_t *env, jk_map_t *m,
  +                                const char *name)
   {
  -    jk_map_t *_this;
  +    int i;
  +    jk_map_private_t *mPriv;
  +    
  +    if(name==NULL )
  +        return NULL;
  +    mPriv=(jk_map_private_t *)m->_private;
   
  -    if( m== NULL )
  +    for(i = 0 ; i < mPriv->size ; i++) {
  +        if(0 == strcmp(mPriv->names[i], name)) {
  +            return  mPriv->values[i];
  +        }
  +    }
  +    return NULL;
  +}
  +
  +
  +static int jk_map_default_put(jk_env_t *env, jk_map_t *m,
  +                              const char *name, void *value,
  +                              void **old)
  +{
  +    int rc = JK_FALSE;
  +    int i;
  +    jk_map_private_t *mPriv;
  +
  +    if( name==NULL ) 
           return JK_FALSE;
  +
  +    mPriv=(jk_map_private_t *)m->_private;
       
  -    _this=(jk_map_t *)pool->alloc(pool, sizeof(jk_map_t));
  -    *m=_this;
  +    for(i = 0 ; i < mPriv->size ; i++) {
  +        if(0 == strcmp(mPriv->names[i], name)) {
  +            break;
  +        }
  +    }
   
  -    if( _this == NULL )
  -        return JK_FALSE;
  +    /* Old value found */
  +    if(i < mPriv->size) {
  +        if( old!=NULL )
  +            *old = (void *) mPriv->values[i]; /* DIRTY */
  +        mPriv->values[i] = value;
  +        return JK_TRUE;
  +    }
       
  -    _this->pool = pool;
  +    jk_map_default_realloc(m);
       
  -    _this->capacity = 0;
  -    _this->size     = 0;
  -    _this->names    = NULL;
  -    _this->values   = NULL;
  +    if(mPriv->size < mPriv->capacity) {
  +        mPriv->values[mPriv->size] = value;
  +        /* XXX this is wrong - either we take ownership and copy both
  +           name and value,
  +           or none. The caller should do that if he needs !
  +        */
  +        /*     mPriv->names[mPriv->size] = m->pool->pstrdup(m->pool, name); */
  +        mPriv->names[mPriv->size] =  name; 
  +        mPriv->size ++;
  +        rc = JK_TRUE;
  +    }
  +    return rc;
  +}
   
  -    return JK_TRUE;
  +static int jk_map_default_size(jk_env_t *env, jk_map_t *m)
  +{
  +    jk_map_private_t *mPriv;
  +
  +    /* assert(m!=NULL) -- we call it via m->... */
  +    mPriv=(jk_map_private_t *)m->_private;
  +    return mPriv->size;
   }
   
  -int map_free(jk_map_t **m)
  +static char *jk_map_default_nameAt(jk_env_t *env, jk_map_t *m,
  +                                   int idex)
   {
  -    int rc = JK_FALSE;
  +    jk_map_private_t *mPriv;
   
  -    if(m && *m) {
  -        (*m)->pool->close((*m)->pool);
  -        rc = JK_TRUE;
  -        /*  free(*m); */
  -        *m = NULL;
  -    }
  -    return rc;
  +    mPriv=(jk_map_private_t *)m->_private;
  +
  +    if(idex < 0 || idex > mPriv->size ) 
  +        return NULL;
  +    
  +    return (char *)mPriv->names[idex]; 
   }
   
  -void *map_get(jk_map_t *m,
  -              const char *name,
  -              const void *def)
  -{
  -    const void *rc = (void *)def;
  -    
  -    if(m && name) {
  -        unsigned i;
  -        for(i = 0 ; i < m->size ; i++) {
  -            if(0 == strcmp(m->names[i], name)) {
  -                rc = m->values[i];
  -                break;
  -            }
  -        }
  -    }
  +static void *jk_map_default_valueAt(jk_env_t *env, jk_map_t *m,
  +                                    int idex)
  +{
  +    jk_map_private_t *mPriv;
  +
  +    mPriv=(jk_map_private_t *)m->_private;
   
  -    return (void *)rc; /* DIRTY */
  +    if(idex < 0 || idex > mPriv->size )
  +        return NULL;
  +    
  +    return (void *) mPriv->values[idex]; 
   }
   
  -int map_get_int(jk_map_t *m,
  -                const char *name,
  -                int def)
  +static void jk_map_default_clear(jk_env_t *env, jk_map_t *m )
   {
  -    char buf[100];
  -    char *rc;
  -    int  len;
  -    int  int_res;
  -    int  multit = 1;
  +
  +}
  +
  +static void jk_map_default_init(jk_env_t *env, jk_map_t *m, int initialSize,
  +                                void *wrappedObj)
  +{
   
  -    sprintf(buf, "%d", def);
  -    rc = map_get_string(m, name, buf);
  +}
  +
  +
  +
  +/* ==================== */
  +/* General purpose map utils - independent of the map impl */
  +
  +int jk_map_append(jk_env_t *env, jk_map_t * dst, jk_map_t * src )
  +{
  +    /* This was badly broken in the original ! */
  +    int sz = src->size(env, src);
  +    int i;
  +    for(i = 0 ; i < sz ; i++) {
  +        char *name = src->nameAt(env, src, i);
  +        void *value = src->valueAt(env, src, i);
   
  -    len = strlen(rc);
  -    if(len) {        
  -        char *lastchar = rc + len - 1;
  -        if('m' == *lastchar || 'M' == *lastchar) {
  -            *lastchar = '\0';
  -            multit = 1024 * 1024;
  -        } else if('k' == *lastchar || 'K' == *lastchar) {
  -            *lastchar = '\0';
  -            multit = 1024;
  +        if( dst->get(env, dst, name ) == NULL) {
  +            int rc= dst->put(env, dst, name, value, NULL );
  +            if( rc != JK_TRUE )
  +                return rc;
           }
       }
  +    return JK_TRUE;
  +}
   
  -    int_res = atoi(rc);
   
  -    return int_res * multit;
  -}
   
  -double map_get_double(jk_map_t *m,
  -                      const char *name,
  -                      double def)
  +char *jk_map_getString(jk_env_t *env, jk_map_t *m,
  +                       const char *name, char *def)
   {
  -    char buf[100];
  -    char *rc;
  +    char *val= m->get( env, m, name );
  +    if( val==NULL )
  +        return def;
  +    return val;
  +}
   
  -    sprintf(buf, "%f", def);
  -    rc = map_get_string(m, name, buf);
   
  -    return atof(rc);
  +/** Get a string property, using the worker's style
  +    for properties.
  +    Example worker.ajp13.host=localhost.
  +*/
  +char *jk_map_getStrProp(jk_env_t *env, jk_map_t *m,
  +                        const char *objType, const char *objName,
  +                        const char *pname,
  +                        char *def)
  +{
  +    char buf[1024];
  +
  +    if( m==NULL || objType==NULL || objName==NULL || pname==NULL ) {
  +        return def;
  +    }
  +    sprintf(buf, "%s.%s.%s", objType, objName, pname);
  +    return m->get(env, m, buf );
   }
   
  -char *map_get_string(jk_map_t *m,
  -                    const char *name,
  -                    const char *def)
  +int jk_map_getIntProp(jk_env_t *env, jk_map_t *m,
  +                      const char *objType, const char *objName,
  +                      const char *pname,
  +                      int def)
   {
  -    return map_get(m, name, def);
  +    char *val=jk_map_getStrProp( env, m, objType, objName, pname, NULL );
  +
  +    if( val==NULL )
  +        return def;
  +
  +    return jk_map_str2int( env, val );
  +}
  +
  +
  +/* ==================== */
  +/* Conversions */
  +
  +/* Convert a string to int, using 'M', 'K' suffixes
  + */
  +int jk_map_str2int(jk_env_t *env, char *val )
  +{   /* map2int:
  +       char *v=getString();
  +       return (c==NULL) ? def : str2int( v );
  +    */ 
  +    int  len;
  +    int  int_res;
  +    char org='\0';
  +    int  multit = 1;
  +    char *lastchar;
  +
  +    if( val==NULL ) return 0;
  +    
  +    /* sprintf(buf, "%d", def); */
  +    /* rc = map_get_string(m, name, buf); */
  +
  +    len = strlen(val);
  +    if(len==0)
  +        return 0;
  +    
  +    lastchar = val + len - 1;
  +    if('m' == *lastchar || 'M' == *lastchar) {
  +        org=*lastchar;
  +        *lastchar = '\0';
  +        multit = 1024 * 1024;
  +    } else if('k' == *lastchar || 'K' == *lastchar) {
  +        org=*lastchar;
  +        *lastchar = '\0';
  +        multit = 1024;
  +    }
  +
  +    int_res = atoi(val);
  +    if( org!='\0' )
  +        *lastchar=org;
  +
  +    return int_res * multit;
   }
   
  -char **map_get_string_list(jk_map_t *m,
  -                           jk_pool_t *pool,
  -                           const char *name,
  -                           unsigned *list_len,
  -                           const char *def)
  +char **jk_map_split(jk_env_t *env, jk_map_t *m,
  +                    jk_pool_t *pool,
  +                    const char *listStr,
  +                    unsigned *list_len )
   {
  -    char *listStr = map_get_string(m, name, def);
       char **ar = NULL;
       unsigned capacity = 0;
       unsigned idex = 0;    
  @@ -239,119 +348,137 @@
   
       return ar;
   }
  +
   
  -int map_put(jk_map_t *m,
  -            const char *name,
  -            const void *value,
  -            void **old)
  +/* ==================== */
  +/*  Reading / parsing */
  +
  +int jk_map_readFileProperties(jk_env_t *env, jk_map_t *m,
  +                              const char *f)
   {
       int rc = JK_FALSE;
  -    unsigned int i;
  +    FILE *fp;
  +    char buf[LENGTH_OF_LINE + 1];            
  +    char *prp;
  +    char *v;
  +        
  +    if(m==NULL || f==NULL )
  +        return JK_FALSE;
   
  -    if(m==NULL ||  name==NULL )
  +    fp= fopen(f, "r");
  +        
  +    if(fp==NULL)
           return JK_FALSE;
  +
  +    rc = JK_TRUE;
  +
  +    while(NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) {
  +        char *oldv;
  +        
  +        trim_prp_comment(prp);
  +
  +        if( trim(prp)==0 )
  +            continue;
  +
  +        v = strchr(prp, '=');
  +        if(v==NULL)
  +            continue;
  +        
  +        *v = '\0';
  +        v++;                        
  +
  +        if(strlen(v)==0 || strlen(prp)==0)
  +            continue;
  +
  +        oldv = m->get(env, m, prp );
  +        
  +        v = jk_map_replaceProperties(env, m, m->pool, v);
  +                
  +        if(oldv) {
  +            char *tmpv = m->pool->alloc(m->pool, 
  +                                        strlen(v) + strlen(oldv) + 3);
  +            char sep = '*';
  +
  +            if(tmpv==NULL) {
  +                rc=JK_FALSE;
  +                break;
  +            }
   
  -    for(i = 0 ; i < m->size ; i++) {
  -        if(0 == strcmp(m->names[i], name)) {
  +            if(jk_is_some_property(prp, "path")) {
  +                sep = PATH_SEPERATOR;
  +            } else if(jk_is_some_property(prp, "cmd_line")) {
  +                sep = ' ';
  +            }
  +                
  +            sprintf(tmpv, "%s%c%s",  oldv, sep, v);
  +            v = tmpv;
  +        } else {
  +            v = m->pool->pstrdup(m->pool, v);
  +        }
  +        
  +        if(v==NULL) {
  +            /* Allocation error */
  +            rc = JK_FALSE;
               break;
           }
  -    }
   
  -    /* Old value found */
  -    if(i < m->size) {
  -        if( old!=NULL )
  -            *old = (void *) m->values[i]; /* DIRTY */
  -        m->values[i] = value;
  -        return JK_TRUE;
  +        m->put(env, m, prp, v, NULL);
       }
  -    
  -    map_realloc(m);
  -    
  -    if(m->size < m->capacity) {
  -        m->values[m->size] = value;
  -        m->names[m->size] = m->pool->pstrdup(m->pool, name);
  -        m->size ++;
  -        rc = JK_TRUE;
  -    }
  +
  +    fclose(fp);
       return rc;
   }
   
   
  -/* XXX Very strange hack to deal with special properties
  +/**
  + *  Replace $(property) in value.
  + * 
    */
  -int jk_is_some_property(const char *prp_name, const char *suffix)
  +char *jk_map_replaceProperties(jk_env_t *env, jk_map_t *m,
  +                               struct jk_pool *resultPool, 
  +                               const char *value)
   {
  -    if (prp_name && suffix) {
  -        size_t prp_name_len = strlen(prp_name);
  -        size_t suffix_len = strlen(suffix);
  -        if (prp_name_len >= suffix_len) {
  -            const char *prp_suffix = prp_name + prp_name_len - suffix_len;
  -            if(0 == strcmp(suffix, prp_suffix)) {
  -                return JK_TRUE;
  -            }
  -        }
  -    }
  +    char *rc = (char *)value;
  +    char *env_start = rc;
  +    int rec = 0;
   
  -    return JK_FALSE;
  -}
  +    while(env_start = strstr(env_start, "$(")) {
  +        char *env_end = strstr(env_start, ")");
  +        if( rec++ > 20 ) return rc;
  +        if(env_end) {
  +            char env_name[LENGTH_OF_LINE + 1] = ""; 
  +            char *env_value;
   
  -int map_read_properties(jk_map_t *m,
  -                        const char *f)
  -{
  -    int rc = JK_FALSE;
  +            *env_end = '\0';
  +            strcpy(env_name, env_start + 2);
  +            *env_end = ')';
   
  -    if(m && f) {
  -        FILE *fp = fopen(f, "r");
  -        
  -        if(fp) {
  -            char buf[LENGTH_OF_LINE + 1];            
  -            char *prp;
  +            env_value = m->get(env, m, env_name);
               
  -            rc = JK_TRUE;
  +         if(env_value != NULL ) {
  +           env_value=getenv( env_name );
  +         }
   
  -            while(NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) {
  -                trim_prp_comment(prp);
  -                if(trim(prp)) {
  -                    char *v = strchr(prp, '=');
  -                    if(v) {
  -                        *v = '\0';
  -                        v++;                        
  -                        if(strlen(v) && strlen(prp)) {
  -                            char *oldv = map_get_string(m, prp, NULL);
  -                            v = map_replace_properties(v, m);
  -
  -                            if(oldv) {
  -                                char *tmpv = m->pool->alloc(m->pool, 
  -                                                            strlen(v) + 
strlen(oldv) + 3);
  -                                if(tmpv) {
  -                                    char sep = '*';
  -                                    if(jk_is_some_property(prp, "path")) {
  -                                        sep = PATH_SEPERATOR;
  -                                    } else if(jk_is_some_property(prp, "cmd_line")) 
{
  -                                        sep = ' ';
  -                                    }
  -
  -                                    sprintf(tmpv, "%s%c%s", 
  -                                            oldv, sep, v);
  -                                }                                
  -                                v = tmpv;
  -                            } else {
  -                                v = m->pool->pstrdup(m->pool, v);
  -                            }
  -                            
  -                            if(v) {
  -                                void *old = NULL;
  -                                map_put(m, prp, v, &old);
  -                            } else {
  -                                rc = JK_FALSE;
  -                                break;
  -                            }
  -                        }
  -                    }
  +            if(env_value != NULL ) {
  +                int offset=0;
  +                char *new_value = resultPool->alloc(resultPool, 
  +                                                    (strlen(rc) + 
strlen(env_value)));
  +                if(!new_value) {
  +                    break;
                   }
  +                *env_start = '\0';
  +                strcpy(new_value, rc);
  +                strcat(new_value, env_value);
  +                strcat(new_value, env_end + 1);
  +             offset= env_start - rc + strlen( env_value );
  +                rc = new_value;
  +             /* Avoid recursive subst */
  +                env_start = rc + offset; 
  +            } else {
  +                env_start = env_end;
               }
  -            
  -            fclose(fp);
  +        } else {
  +            break;
           }
       }
   
  @@ -359,35 +486,77 @@
   }
   
   
  -int map_size(jk_map_t *m)
  -{
  -    if(m) {
  -        return m->size;
  -    }
  +/* ==================== */
  +/* Internal utils */
   
  -    return -1;
  -}
   
  -char *map_name_at(jk_map_t *m,
  -                  int idex)
  +int jk_map_default_create(jk_env_t *env, jk_map_t **m, jk_pool_t *pool )
   {
  -    if(m && idex >= 0) {
  -        return (char *)m->names[idex]; /* DIRTY */
  -    }
  +    jk_map_t *_this;
  +    jk_map_private_t *mPriv;
   
  -    return NULL;
  +    if( m== NULL )
  +        return JK_FALSE;
  +    
  +    _this=(jk_map_t *)pool->alloc(pool, sizeof(jk_map_t));
  +    mPriv=(jk_map_private_t *)pool->alloc(pool, sizeof(jk_map_private_t));
  +    *m=_this;
  +
  +    if( _this == NULL || mPriv==NULL )
  +        return JK_FALSE;
  +    
  +    _this->pool = pool;
  +    _this->_private=mPriv;
  +    
  +    mPriv->capacity = 0;
  +    mPriv->size     = 0;
  +    mPriv->names    = NULL;
  +    mPriv->values   = NULL;
  +
  +    _this->get=jk_map_default_get;
  +    _this->put=jk_map_default_put;
  +    _this->size=jk_map_default_size;
  +    _this->nameAt=jk_map_default_nameAt;
  +    _this->valueAt=jk_map_default_valueAt;
  +    _this->init=jk_map_default_init;
  +    _this->clear=jk_map_default_clear;
  +    
  +
  +    return JK_TRUE;
   }
  +
  +/* int map_free(jk_map_t **m) */
  +/* { */
  +/*     int rc = JK_FALSE; */
  +
  +/*     if(m && *m) { */
  +/*         (*m)->pool->close((*m)->pool); */
  +/*         rc = JK_TRUE; */
  +/*         *m = NULL; */
  +/*     } */
  +/*     return rc; */
  +/* } */
  +
   
  -void *map_value_at(jk_map_t *m,
  -                   int idex)
  +/* XXX Very strange hack to deal with special properties
  + */
  +int jk_is_some_property(const char *prp_name, const char *suffix)
   {
  -    if(m && idex >= 0) {
  -        return (void *) m->values[idex]; /* DIRTY */
  +    if (prp_name && suffix) {
  +        size_t prp_name_len = strlen(prp_name);
  +        size_t suffix_len = strlen(suffix);
  +        if (prp_name_len >= suffix_len) {
  +            const char *prp_suffix = prp_name + prp_name_len - suffix_len;
  +            if(0 == strcmp(suffix, prp_suffix)) {
  +                return JK_TRUE;
  +            }
  +        }
       }
   
  -    return NULL;
  +    return JK_FALSE;
   }
   
  +
   static void trim_prp_comment(char *prp)
   {
       char *comment = strchr(prp, '#');
  @@ -396,6 +565,7 @@
       }
   }
   
  +
   static int trim(char *s)
   {
       int i;
  @@ -415,26 +585,28 @@
       return strlen(s);
   }
   
  -static int map_realloc(jk_map_t *m)
  +static int jk_map_default_realloc(jk_map_t *m)
   {
  -    if(m->size == m->capacity) {
  +    jk_map_private_t *mPriv=m->_private;
  +    
  +    if(mPriv->size == mPriv->capacity) {
           char **names;
           void **values;
  -        int  capacity = m->capacity + CAPACITY_INC_SIZE;
  +        int  capacity = mPriv->capacity + CAPACITY_INC_SIZE;
   
           names = (char **)m->pool->alloc(m->pool, sizeof(char *) * capacity);
           values = (void **)m->pool->alloc(m->pool, sizeof(void *) * capacity);
           
           if(values && names) {
  -            if (m->capacity && m->names) 
  -                memcpy(names, m->names, sizeof(char *) * m->capacity);
  +            if (mPriv->capacity && mPriv->names) 
  +                memcpy(names, mPriv->names, sizeof(char *) * mPriv->capacity);
   
  -            if (m->capacity && m->values)
  -                memcpy(values, m->values, sizeof(void *) * m->capacity);
  +            if (mPriv->capacity && mPriv->values)
  +                memcpy(values, mPriv->values, sizeof(void *) * mPriv->capacity);
   
  -            m->names = (const char **)names;
  -            m->values = (const void **)values;
  -            m->capacity = capacity;
  +            mPriv->names = ( char **)names;
  +            mPriv->values = ( void **)values;
  +            mPriv->capacity = capacity;
   
               return JK_TRUE;
           }
  @@ -443,156 +615,9 @@
       return JK_FALSE;
   }
   
  -/**
  - *  Replace $(property) in value.
  - * 
  - */
  -char *map_replace_properties(const char *value, jk_map_t *m)
  -{
  -    char *rc = (char *)value;
  -    char *env_start = rc;
  -    int rec = 0;
   
  -    while(env_start = strstr(env_start, "$(")) {
  -        char *env_end = strstr(env_start, ")");
  -        if( rec++ > 20 ) return rc;
  -        if(env_end) {
  -            char env_name[LENGTH_OF_LINE + 1] = ""; 
  -            char *env_value;
  -
  -            *env_end = '\0';
  -            strcpy(env_name, env_start + 2);
  -            *env_end = ')';
  -
  -            env_value = map_get_string(m, env_name, NULL);
  -         if(!env_value) {
  -           env_value=getenv( env_name );
  -         }
  -            if(env_value) {
  -                int offset=0;
  -                char *new_value = m->pool->alloc(m->pool, 
  -                                                 (sizeof(char) * (strlen(rc) + 
strlen(env_value))));
  -                if(!new_value) {
  -                    break;
  -                }
  -                *env_start = '\0';
  -                strcpy(new_value, rc);
  -                strcat(new_value, env_value);
  -                strcat(new_value, env_end + 1);
  -             offset= env_start - rc + strlen( env_value );
  -                rc = new_value;
  -             /* Avoid recursive subst */
  -                env_start = rc + offset; 
  -            } else {
  -                env_start = env_end;
  -            }
  -        } else {
  -            break;
  -        }
  -    }
  -
  -    return rc;
  -}
  -
  -
  -/** Get a string property, using the worker's style
  -    for properties.
  -    Example worker.ajp13.host=localhost.
  -*/
  -char *map_getStrProp(jk_map_t *m,
  -                     const char *objType,
  -                     const char *objName,
  -                     const char *pname,
  -                     char *def)
  -{
  -    char buf[1024];
   
  -    if( m==NULL ||
  -        objType==NULL ||
  -        objName==NULL ||
  -        pname==NULL ) {
  -        return def;
  -    }
  -
  -    sprintf(buf, "%s.%s.%s", objType, objName, pname);
  -    return map_get_string(m, buf, NULL);
  -}
  -
  -int map_getIntProp(jk_map_t *m,
  -                   const char *objType,
  -                   const char *objName,
  -                   const char *pname,
  -                   const int def)
  -{
  -    char buf[1024];
  -
  -    if( m==NULL ||
  -        objType==NULL ||
  -        objName==NULL ||
  -        pname==NULL ) {
  -        return def;
  -    }
  -
  -    sprintf(buf, "%s.%s.%s", objType, objName, pname);
  -    return map_get_int(m, buf, def);
  -}
  -
  -double map_getDoubleProp(jk_map_t *m,
  -                         const char *objType,
  -                         const char *objName,
  -                         const char *pname,
  -                         const double def)
  -{
  -    char buf[1024];
  -
  -    if( m==NULL ||
  -        objType==NULL ||
  -        objName==NULL ||
  -        pname==NULL ) {
  -        return def;
  -    }
  -
  -    sprintf(buf, "%s.%s.%s", objType, objName, pname);
  -    return map_get_double(m, buf, def);
  -}
  -
  -char **map_getListProp(jk_map_t *m,
  -                       const char *objType,
  -                       const char *objName,
  -                       const char *pname, 
  -                       unsigned *size)
  -{
  -    char buf[1024];
   
  -    if( m==NULL ||
  -        objType==NULL ||
  -        objName==NULL ||
  -        pname==NULL ) {
  -        return NULL;
  -    }
   
  -    sprintf(buf, "%s.%s.%s", objType, objName, pname);
   
  -    return map_get_string_list(m, m->pool, buf, size, NULL);
  -}
  -
  -/** Utility - copy a map . XXX Should move to jk_map, it's generic code.
  - */
  -int map_copy(jk_pool_t *pool, jk_map_t * src, jk_map_t * dst )
  -{   
  -    int sz = map_size(src);
  -    int i;
  -    for(i = 0 ; i < sz ; i++) {
  -        void *old;
  -        char *name = map_name_at(src, i);
  -        if(map_get(src, name, NULL) == NULL) {
  -            if(!map_put(dst, name, 
  -                        pool->pstrdup(pool, map_get_string(src, name, NULL)), 
  -                        &old)) {
  -                return JK_FALSE;
  -            }
  -        } 
  -    }
  -    return JK_TRUE;
  -}
   
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to