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]>

Reply via email to