costin 02/03/18 10:42:50 Modified: jk/native2/common jk_map.c Log: Remove the config-related methods. This is just a map now Revision Changes Path 1.15 +2 -429 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.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- jk_map.c 21 Feb 2002 11:11:15 -0000 1.14 +++ jk_map.c 18 Mar 2002 18:42:50 -0000 1.15 @@ -58,7 +58,7 @@ /*************************************************************************** * Description: General purpose map object * * Author: Gal Shachor <[EMAIL PROTECTED]> * - * Version: $Revision: 1.14 $ * + * Version: $Revision: 1.15 $ * ***************************************************************************/ #include "jk_global.h" @@ -78,8 +78,6 @@ } jk_map_private_t; static int jk2_map_default_realloc(jk_env_t *env, jk_map_t *m); -static void jk2_trim_prp_comment(char *prp); -static int jk2_trim(char *s); static void *jk2_map_default_get(jk_env_t *env, jk_map_t *m, const char *name) @@ -225,7 +223,7 @@ } -int jk2_map_append(jk_env_t *env, jk_map_t * dst, jk_map_t * src ) +static int jk2_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); @@ -242,398 +240,7 @@ } return JK_TRUE; } - - -/* ==================== */ -/* General purpose map utils - independent of the map impl */ - - -char *jk2_map_getString(jk_env_t *env, jk_map_t *m, - const char *name, char *def) -{ - char *val= m->get( env, m, name ); - if( val==NULL ) - return def; - return val; -} - -int jk2_map_getBool(jk_env_t *env, jk_map_t *m, - const char *prop, const char *def) -{ - char *val=jk2_map_getString( env, m, prop, (char *)def ); - - if( val==NULL ) - return JK_FALSE; - - if( strcmp( val, "1" ) == 0 || - strcasecmp( val, "TRUE" ) == 0 || - strcasecmp( val, "ON" ) == 0 ) { - return JK_TRUE; - } - return JK_FALSE; -} - -/** Get a string property, using the worker's style - for properties. - Example worker.ajp13.host=localhost. -*/ -char *jk2_map_getStrProp(jk_env_t *env, jk_map_t *m, - const char *objType, const char *objName, - const char *pname, - char *def) -{ - char buf[1024]; - char *res; - - if( m==NULL || objName==NULL || pname==NULL ) { - return def; - } - if( objType==NULL ) - sprintf(buf, "%s.%s", objName, pname); - else - sprintf(buf, "%s.%s.%s", objType, objName, pname); - res = m->get(env, m, buf ); - if (res==NULL) - return(def); - return res; -} - -int jk2_map_getIntProp(jk_env_t *env, jk_map_t *m, - const char *objType, const char *objName, - const char *pname, - int def) -{ - char *val=jk2_map_getStrProp( env, m, objType, objName, pname, NULL ); - - if( val==NULL ) - return def; - - return jk2_map_str2int( env, val ); -} - -/* ==================== */ -/* Conversions */ - -/* Convert a string to int, using 'M', 'K' suffixes - */ -int jk2_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 **jk2_map_split(jk_env_t *env, jk_map_t *m, - jk_pool_t *pool, - const char *listStr, - const char *sep, - unsigned *list_len ) -{ - char **ar = NULL; - unsigned capacity = 0; - unsigned idex = 0; - char *v; - char *l; - - if( sep==NULL ) - sep=" \t,*"; - - if( pool == NULL && m!=NULL ) - pool=m->pool; - - if( list_len != NULL ) - *list_len = 0; - - if(listStr==NULL) - return NULL; - - v = pool->pstrdup( env, pool, listStr); - - if(v==NULL) { - return NULL; - } - - /* - * GS, in addition to VG's patch, we now need to - * strtok also by a "*" - */ - - for(l = strtok(v, sep) ; l ; l = strtok(NULL, sep)) { - /* We want at least one space after idex for the null*/ - if(idex+1 >= capacity) { - ar = pool->realloc(env, pool, - sizeof(char *) * (capacity + 5), - ar, - sizeof(char *) * capacity); - if(!ar) { - return NULL; - } - capacity += 5; - } - ar[idex] = pool->pstrdup(env, pool, l); - idex ++; - } - - /* Append a NULL, we have space */ - ar[idex]=NULL; - - if( list_len != NULL ) - *list_len = idex; - - return ar; -} - - -/* ==================== */ -/* Reading / parsing */ - -int jk2_map_readFileProperties(jk_env_t *env, jk_map_t *m, - const char *f) -{ - int rc = JK_FALSE; - FILE *fp; - char buf[LENGTH_OF_LINE + 1]; - char *prp; - char *v; - - if(m==NULL || f==NULL ) - return JK_FALSE; - - fp= fopen(f, "r"); - - if(fp==NULL) - return JK_FALSE; - - rc = JK_TRUE; - - while(NULL != (prp = fgets(buf, LENGTH_OF_LINE, fp))) { - char *oldv; - - jk2_trim_prp_comment(prp); - - if( jk2_trim(prp)==0 ) - continue; - - v = strchr(prp, '='); - if(v==NULL) - continue; - - *v = '\0'; - v++; - - if(strlen(v)==0 || strlen(prp)==0) - continue; - - v = jk2_map_replaceProperties(env, m, m->pool, v); - - /* We don't contatenate the values - but use multi-value - fields. This eliminates the ugly hack where readProperties - tried to 'guess' the separator, and the code is much - cleaner. If we have multi-valued props, it's better - to deal with that instead of forcing a single-valued - model. - */ - m->add( env, m, m->pool->pstrdup(env, m->pool, prp), - m->pool->pstrdup(env, m->pool, v)); - } - - fclose(fp); - return rc; -} - -/** For multi-value properties, return the concatenation - * of all values. - * - * @param sep Separators used to separate multi-values and - * when concatenating the values, NULL for none. The first - * char will be used on the result, the other will be - * used to split. ( i.e. the map may either have multiple - * values or values separated by one of the sep's chars ) - * - */ -char *jk2_map_getValuesString(jk_env_t *env, jk_map_t *m, - struct jk_pool *resultPool, - char *name, - char *sep ) -{ - char **values; - int valuesCount; - int i; - int len=0; - int pos=0; - int sepLen=0; - char *result; - char sepStr[2]; - - if(sep==NULL) - values=jk2_map_getValues( env, m, resultPool, name," \t,*", &valuesCount ); - else - values=jk2_map_getValues( env, m, resultPool, name, sep, &valuesCount ); - - if( values==NULL ) return NULL; - if( valuesCount<=0 ) return NULL; - - if( sep!= NULL ) - sepLen=strlen( sep ); - - for( i=0; i< valuesCount; i++ ) { - len+=strlen( values[i] ); - if( sep!= NULL ) - len+=1; /* Separator */ - } - - result=(char *)resultPool->alloc( env, resultPool, len + 1 ); - - result[0]='\0'; - if( sep!=NULL ) { - sepStr[0]=sep[0]; - sepStr[1]='\0'; - } - - for( i=0; i< valuesCount; i++ ) { - strcat( values[i], result ); - if( sep!=NULL ) - strcat( sepStr, result ); - } - return result; -} - -/** For multi-value properties, return the array containing - * all values. - * - * @param sep Optional separator, it'll be used to split existing values. - * Curently only single-char separators are supported. - */ -char **jk2_map_getValues(jk_env_t *env, jk_map_t *m, - struct jk_pool *resultPool, - char *name, - char *sep, - int *countP) -{ - char **result; - int count=0; - int capacity=8; - int mapSz= m->size(env, m ); - int i; - char *l; - - *countP=0; - result=(char **)resultPool->alloc( env, resultPool, - capacity * sizeof( char *)); - for(i=0; i<mapSz; i++ ) { - char *cName= m->nameAt( env, m, i ); - char *cVal= m->valueAt( env, m, i ); - - if(0 == strcmp(cName, name)) { - /* Split the value by sep, and add it to the result list - */ - for(l = strtok(cVal, sep) ; l ; l = strtok(NULL, sep)) { - if(count == capacity) { - result = resultPool->realloc(env, resultPool, - sizeof(char *) * (capacity + 5), - result, - sizeof(char *) * capacity); - if(result==NULL) - return NULL; - capacity += 5; - } - result[count] = resultPool->pstrdup(env, resultPool, l); - count++; - } - } - } - *countP=count; - return result; -} - -/** - * Replace $(property) in value. - * - */ -char *jk2_map_replaceProperties(jk_env_t *env, jk_map_t *m, - struct jk_pool *resultPool, - char *value) -{ - char *rc = 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 = m->get(env, m, env_name); - if(env_value == NULL ) { - env_value=getenv( env_name ); - } - /* fprintf(stderr, "XXXjk_map %s %s \n", env_name, env_value ); */ - - if(env_value != NULL ) { - int offset=0; - char *new_value = resultPool->alloc(env, 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; - } - } else { - break; - } - } - - return rc; -} - - /* ==================== */ /* Internal utils */ @@ -687,33 +294,6 @@ /* } */ -static void jk2_trim_prp_comment(char *prp) -{ - char *comment = strchr(prp, '#'); - if(comment) { - *comment = '\0'; - } -} - -static int jk2_trim(char *s) -{ - int i; - - for(i = strlen(s) - 1 ; (i >= 0) && isspace(s[i]) ; i--) - ; - - s[i + 1] = '\0'; - - for(i = 0 ; ('\0' != s[i]) && isspace(s[i]) ; i++) - ; - - if(i > 0) { - strcpy(s, &s[i]); - } - - return strlen(s); -} - static int jk2_map_default_realloc(jk_env_t *env, jk_map_t *m) { jk_map_private_t *mPriv=m->_private; @@ -745,10 +325,3 @@ return JK_FALSE; } - - - - - - -
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>