You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hg...@apache.org on 2002/09/25 09:42:29 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_pool.c jk_config_file.c jk_channel_jni.c
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: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>