hgomez 2002/09/25 00:42:29 Modified: jk/native2/common jk_pool.c jk_config_file.c jk_channel_jni.c Log: More AS/400/BS2000 back ports, notably to help JNI on EBCDIC systems Revision Changes Path 1.12 +28 -2 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.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- jk_pool.c 24 Sep 2002 22:40:02 -0000 1.11 +++ jk_pool.c 25 Sep 2002 07:42:29 -0000 1.12 @@ -103,6 +103,10 @@ static void *jk2_pool_strdup(jk_env_t *env, jk_pool_t *p, const char *s); +static void *jk2_pool_strdup2ascii(jk_env_t *env, jk_pool_t *p, const char *s); + +static void *jk2_pool_strdup2ebcdic(jk_env_t *env, jk_pool_t *p, const char *s); + static void *jk2_pool_realloc(jk_env_t *env, jk_pool_t *p, size_t sz,const void *old, size_t old_sz); @@ -139,6 +143,8 @@ _this->alloc=jk2_pool_alloc; _this->calloc=jk2_pool_calloc; _this->pstrdup=jk2_pool_strdup; + _this->pstrdup2ascii=jk2_pool_strdup2ascii; + _this->pstrdup2ebcdic=jk2_pool_strdup2ebcdic; _this->realloc=jk2_pool_realloc; *newPool = _this; @@ -255,7 +261,7 @@ return rc; } -static void *jk2_pool_strdup(jk_env_t *env, jk_pool_t *p, const char *s) +static void *jk2_pool_a_strdup(jk_env_t *env, jk_pool_t *p, const char *s, int convmode) { char *rc = NULL; if(s && p) { @@ -270,9 +276,29 @@ memcpy(rc, s, size); } rc[size]='\0'; + + if (convmode == 1) + jk_xlate_to_ascii(rc, size); + else if (convmode == 2) + jk_xlate_from_ascii(rc, size); } return rc; +} + +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); +} + +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); +} + +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); } /* 1.6 +10 -0 jakarta-tomcat-connectors/jk/native2/common/jk_config_file.c Index: jk_config_file.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_config_file.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- jk_config_file.c 24 Sep 2002 22:37:13 -0000 1.5 +++ jk_config_file.c 25 Sep 2002 07:42:29 -0000 1.6 @@ -62,6 +62,10 @@ * @author: Costin Manolache */ +#ifdef AS400 +#include "apr_xlate.h" +#endif + #include "jk_global.h" #include "jk_map.h" #include "jk_pool.h" @@ -136,7 +140,13 @@ static void jk2_trim_prp_comment(char *prp) { +#ifdef AS400 + char *comment; + /* lots of lines that translate a '#' realtime deleted */ + comment = strchr(prp, *APR_NUMBERSIGN); +#else char *comment = strchr(prp, '#'); +#endif if(comment) { *comment = '\0'; } 1.34 +28 -7 jakarta-tomcat-connectors/jk/native2/common/jk_channel_jni.c Index: jk_channel_jni.c =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_channel_jni.c,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- jk_channel_jni.c 14 Jul 2002 13:36:03 -0000 1.33 +++ jk_channel_jni.c 25 Sep 2002 07:42:29 -0000 1.34 @@ -78,6 +78,7 @@ #include <jni.h> /* default only, is configurable now */ + #define JAVA_BRIDGE_CLASS_NAME ("org/apache/jk/apr/AprImpl") #define JNI_TOMCAT_STARTED 2 @@ -108,6 +109,19 @@ } jk_ch_jni_ep_private_t; +/* + Duplicate string and convert it to ASCII on EBDIC based systems + Needed for at least AS/400 and BS2000 but what about other EBDIC systems ? +*/ +static void *strdup_ascii(jk_env_t *env, + char *s) +{ +#if defined(AS400) || defined(_OSD_POSIX) + return (env->tmpPool->pstrdup2ascii(env, env->tmpPool, s)); +#else + return (env->tmpPool->pstrdup(env, env->tmpPool, s)); +#endif +} static int JK_METHOD jk2_channel_jni_init(jk_env_t *env, jk_bean_t *jniWB) @@ -188,7 +202,8 @@ endpoint->channelData=epData; - jniCh->jniBridge = (*jniEnv)->FindClass(jniEnv, jniCh->className ); + /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */ + jniCh->jniBridge = (*jniEnv)->FindClass(jniEnv, strdup_ascii(env, jniCh->className) ); if( jniCh->jniBridge == NULL ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, @@ -214,8 +229,11 @@ other things - like singnals, etc */ + /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */ jmethod=(*jniEnv)->GetStaticMethodID(jniEnv, jniCh->jniBridge, - "createJavaContext", "(Ljava/lang/String;J)Ljava/lang/Object;"); + strdup_ascii(env, "createJavaContext"), + strdup_ascii(env, "(Ljava/lang/String;J)Ljava/lang/Object;"); + if( jmethod == NULL ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't find createJavaContext\n"); @@ -227,7 +245,8 @@ return JK_ERR; } - jstr=(*jniEnv)->NewStringUTF(jniEnv, "channelJni" ); + /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */ + jstr=(*jniEnv)->NewStringUTF(jniEnv, strdup_ascii(env, "channelJni" )); jobj=(*jniEnv)->CallStaticObjectMethod( jniEnv, jniCh->jniBridge, jmethod, @@ -251,9 +270,10 @@ /* XXX Destroy them in close */ + /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */ jmethod=(*jniEnv)->GetStaticMethodID(jniEnv, jniCh->jniBridge, - "getBuffer", - "(Ljava/lang/Object;I)[B"); + strdup_ascii(env, "getBuffer"), + strdup_ascii(env, "(Ljava/lang/Object;I)[B")); if( jmethod == NULL ) { env->l->jkLog(env, env->l, JK_LOG_ERROR, "channel_jni.open() can't find getBuffer\n"); @@ -274,10 +294,11 @@ epData->carray=(char *)endpoint->mbean->pool->calloc( env, endpoint->mbean->pool, epData->arrayLen); + /* AS400/BS2000 need EBCDIC to ASCII conversion for JNI */ jniCh->writeMethod = (*jniEnv)->GetStaticMethodID(jniEnv, jniCh->jniBridge, - "jniInvoke", - "(JLjava/lang/Object;)I"); + strdup_ascii(env, "jniInvoke"), + strdup_ascii(env, "(JLjava/lang/Object;)I"))s; if( jniCh->writeMethod == NULL ) { env->l->jkLog(env, env->l, JK_LOG_EMERG,
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>