carnold     2005/03/14 21:37:51

  Modified:    .        apriconv-build.xml build.xml
               src      transcoder.cpp
  Added:       .        apr-iconv-1.0.1.patch
               src      iconv_module.cpp
  Log:
  LOGCXX-10: Override apr-iconv's module locating logic, utf-8 decoding
  
  Revision  Changes    Path
  1.13      +22 -21    logging-log4cxx/apriconv-build.xml
  
  Index: apriconv-build.xml
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/apriconv-build.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- apriconv-build.xml        13 Mar 2005 06:20:45 -0000      1.12
  +++ apriconv-build.xml        15 Mar 2005 05:37:50 -0000      1.13
  @@ -72,15 +72,15 @@
                          <equals arg1="${os.family}" arg2="windows"/>
                     </or>
                </and>
  -        </condition>
  +        </condition>
   </target>
   
   
   <target name="win-init" depends="os-detect" if="is-windows">
       <property name="compiler" value="msvc"/>
       <property name="arch" value="win32"/>
  -    <property name="project.type" value="msvc6"/>
  -    <property name="apriconv.mod.suffix" value=".so"/>
  +    <property name="project.type" value="msvc6"/>
  +    <property name="apriconv.mod.suffix" value=".so"/>
   </target>
   
   <target name="unix-init" depends="os-detect" if="is-unix">
  @@ -93,15 +93,15 @@
       </condition>
       <property name="arch" value="unix"/>
       <property name="project.type" value="cbuilderx"/>
  -    <property name="apriconv.mod.suffix" value=".so"/>
  -    <!--   
  -        can't use Windows path names if building cygwin   
  -        assuming typical location.
  -    -->
  -    <basename property="with-apr-base" file="${apr.dir}"/>
  -    <condition property="with-apr" value="../${with-apr-base}">
  -        <os family="windows"/>
  -    </condition>
  +    <property name="apriconv.mod.suffix" value=".so"/>
  +    <!--
  +        can't use Windows path names if building cygwin
  +        assuming typical location.
  +    -->
  +    <basename property="with-apr-base" file="${apr.dir}"/>
  +    <condition property="with-apr" value="../${with-apr-base}/apr--config">
  +        <os family="windows"/>
  +    </condition>
   </target>
   
   <target name="init" depends="win-init, unix-init">
  @@ -127,9 +127,9 @@
           <condition property="is-bcc" value="true">
               <equals arg1="${compiler}" arg2="bcc"/>
           </condition>
  -        <condition property="is-msvc" value="true">
  -            <equals arg1="${compiler}" arg2="msvc"/>
  -        </condition>
  +        <condition property="is-msvc" value="true">
  +            <equals arg1="${compiler}" arg2="msvc"/>
  +        </condition>
   
           <condition property="is-apr-shared" value="true">
               <equals arg1="${apr.lib.type}" arg2="shared"/>
  @@ -141,8 +141,8 @@
           <condition property="project.if" value="true">
               <istrue value="${project.if.value}"/>
           </condition>
  -
  -        <property name="with-apr" value="${apr.dir}"/>
  +
  +        <property name="with-apr" value="${apr.dir}/apr--config"/>
   
   </target>
   
  @@ -169,7 +169,7 @@
   </target>
   
   <target name="unix-configure" depends="configure-check" if="is-unix" 
unless="config-available">
  -        <exec executable="sh" dir="${apriconv.dir}">
  +        <exec executable="sh" dir="${apriconv.dir}">
              <arg value="./configure"/>
              <arg value="--with-apr=${with-apr}"/>
           </exec>
  @@ -190,11 +190,12 @@
           outtype="${apriconv.lib.type}"
           objdir="${apriconv.lib.dir}/apriconv_obj"
           debug="${debug}">
  -        <fileset dir="${apriconv.dir}" includes="lib/*.c lib/*.h"/>
  +        <fileset dir="${apriconv.dir}" includes="lib/*.c lib/*.h lib/*.cpp"/>
           <fileset dir="${include.dir}" includes="*.h"/>
           <includepath path="${apriconv.dir}/lib"/>
           <includepath path="${include.dir}"/>
           <includepath path="${apriconv.dir}/lib"/>
  +        <includepath path="${apriconv.dir}"/>
           <includepath path="${apr.include.dir}"/>
           <includepath path="${apr.include.dir}/private"/>
           <defineset define="API_DECLARE_EXPORT" if="is-apriconv-shared"/>
  @@ -221,7 +222,7 @@
           <includepath path="${apriconv.dir}/lib"/>
           <includepath path="${apr.include.dir}"/>
           <includepath path="${apr.include.dir}/private"/>
  -        <defineset define="API_DECLARE_STATIC" unless="is-apriconv-shared"/>
  +        <defineset define="API_DECLARE_STATIC" unless="is-apriconv-shared"/>
           <defineset define="APR_DECLARE_STATIC" unless="is-apr-shared"/>
           <defineset define="WIN32" if="is-windows"/>
           <defineset define="_HAVE_CONFIG_H _REENTRANT _GNU_SOURCE" 
if="is-gcc"/>
  @@ -229,7 +230,7 @@
           <libset libs="apriconv${lib-suffix}" dir="${apriconv.lib.dir}"/>
           <libset libs="apr-1${lib-suffix}" dir="${apr.lib.dir}"/>
           <libset libs="advapi32 ws2_32 mswsock rpcrt4" if="is-windows"/>
  -        <libset libs="cw32mt" if="is-bcc"/>
  +        <libset libs="cw32mt" if="is-bcc"/>
           <linkerarg value="/export:iconv_module,DATA" if="is-msvc"/>
           <project type="${project.type}" 
outfile="${project.dir}/${module}${apriconv.mod.suffix}" if="project.if"/>
       </cc>
  
  
  
  1.55      +11 -4     logging-log4cxx/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/build.xml,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- build.xml 13 Mar 2005 06:52:45 -0000      1.54
  +++ build.xml 15 Mar 2005 05:37:50 -0000      1.55
  @@ -411,10 +411,10 @@
       </ant>
   
       <!--  configure can't handle a Windows path   -->
  -    <condition property="with-apr" value="../apr-${apr.version}">
  +    <condition property="with-apr" value="../apr-${apr.version}/apr--config">
            <isset property="is-cygwin"/>
       </condition>
  -    <property name="with-apr" location="${apr.dir}"/>
  +    <property name="with-apr" location="${apr.dir}/apr--config"/>
   </target>
   
   <target name="get-apriconv-src" unless="apriconv-src-available">
  @@ -430,6 +430,13 @@
           <param name="module" value="apr-iconv"/>
           <param name="module.version" value="${apriconv.version}"/>
       </antcall>
  +    <patch patchfile="${base.dir}/apr-iconv-${apriconv.version}.patch"
  +           dir="${lib.dir}/apr-iconv-${apriconv.version}"
  +           strip="0"/>
  +    <delete 
file="${lib.dir}/apr-iconv-${apriconv.version}/lib/iconv_module.c"/>
  +    <copy todir="${lib.dir}/apr-iconv-${apriconv.version}/lib">
  +        <fileset dir="${src.dir}" includes="iconv_module.cpp"/>
  +    </copy>
   </target>
   
   <target name="build-apriconv" depends="build-apr" 
unless="apriconv-available">
  @@ -618,7 +625,7 @@
                   objdir="${log4cxx.lib.dir}/log4cxx_obj"
                   debug="${debug}"
                   projectsOnly="${projectsOnly}">
  -        <fileset dir="${src.dir}" includes="*.cpp"/>
  +        <fileset dir="${src.dir}" includes="*.cpp" 
excludes="**/iconv_module.cpp"/>
           <fileset dir="${include.dir}" includes="**/*.h"/>
           <includepath path="${include.dir}"/>
           <includepath path="/usr/include/libxml2" if="is-unix"/>
  @@ -890,7 +897,7 @@
                   objdir="${executable.dir}/static/log4cxx-standalone-test_obj"
                   debug="${debug}"
                   projectsOnly="${projectsOnly}">
  -        <fileset dir="${src.dir}" includes="*.cpp"/>
  +        <fileset dir="${src.dir}" includes="*.cpp" 
excludes="**/iconv_module.cpp"/>
           <fileset dir="${include.dir}" includes="**/*.h"/>
           <fileset dir="${tests.dir}/src" includes="**/*.cpp **/*.h">
                <exclude name="shortsocketserver.cpp"/>
  
  
  
  1.1                  logging-log4cxx/apr-iconv-1.0.1.patch
  
  Index: apr-iconv-1.0.1.patch
  ===================================================================
  Index: ces/iso-10646-ucs-2.c
  ===================================================================
  --- ces/iso-10646-ucs-2.c     (revision 157480)
  +++ ces/iso-10646-ucs-2.c     (working copy)
  @@ -50,7 +50,7 @@
        unsigned char **outbuf, apr_size_t *outbytesleft)
   {
        apr_size_t bytes;
  -     int *state = ces->data;
  +     int *state = (int*) ces->data;
   
        if (in == UCS_CHAR_NONE)
                return 1;       /* No state reinitialization for table charsets 
*/
  @@ -81,7 +81,7 @@
        apr_size_t *inbytesleft)
   {
        ucs_t res;
  -     int *state = ces->data;
  +     int *state = (int*) ces->data;
        int mark;
   
        if (*inbytesleft < 2)
  Index: ces/_tbl_simple.c
  ===================================================================
  --- ces/_tbl_simple.c (revision 157480)
  +++ ces/_tbl_simple.c (working copy)
  @@ -38,7 +38,7 @@
   static int
   table_open(struct iconv_ces *ces, apr_pool_t *ctx)
   {
  -        struct iconv_module *ccsmod = ces->mod->im_private;
  +        struct iconv_module *ccsmod = (struct iconv_module*) 
ces->mod->im_private;
           ces->data = (void *)(ccsmod->im_desc->imd_data);
        return 0;
   }
  @@ -77,7 +77,7 @@
   convert_from_ucs(struct iconv_ces *ces, ucs_t in,
        unsigned char **outbuf, apr_size_t *outbytesleft)
   {
  -     struct iconv_ccs_desc *ccsd = ces->data;
  +     struct iconv_ccs_desc *ccsd = (struct iconv_ccs_desc*) ces->data;
        ucs_t res;
        apr_size_t bytes;
   
  @@ -105,7 +105,7 @@
   convert_to_ucs(struct iconv_ces *ces, const unsigned char **inbuf,
        apr_size_t *inbytesleft)
   {
  -     struct iconv_ccs_desc *ccsd = ces->data;
  +     struct iconv_ccs_desc *ccsd = (struct iconv_ccs_desc*) ces->data;
        unsigned char byte = *(*inbuf);
        ucs_t res = ICONV_CCS_CONVERT_TO_UCS(ccsd, byte);
        apr_size_t bytes = (res == UCS_CHAR_INVALID && table_nbits(ces) > 8) ? 
2 : 1;
  @@ -132,7 +132,7 @@
                return APR_EINVAL;
           if (mod->im_private != NULL)
               return APR_EINVAL;
  -     error = apr_iconv_mod_load(mod->im_args, ICMOD_UC_CCS, NULL, &ccsmod, 
ctx);
  +     error = apr_iconv_mod_load((const char*) mod->im_args, ICMOD_UC_CCS, 
NULL, &ccsmod, ctx);
        if (error)
                return error;
           mod->im_private = ccsmod;
  @@ -142,7 +142,7 @@
   static apr_status_t
   table_unload_ccs(struct iconv_module *mod, apr_pool_t *ctx)
   {
  -    struct iconv_module *ccsmod = mod->im_private;
  +    struct iconv_module *ccsmod = (struct iconv_module*) mod->im_private;
       if (ccsmod == NULL)
           return APR_EINVAL;
       mod->im_private = NULL;
  
  
  
  1.14      +2 -5      logging-log4cxx/src/transcoder.cpp
  
  Index: transcoder.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/transcoder.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- transcoder.cpp    12 Mar 2005 06:37:27 -0000      1.13
  +++ transcoder.cpp    15 Mar 2005 05:37:50 -0000      1.14
  @@ -273,13 +273,10 @@
                apr_size_t outBytesLeft = BUFSIZE;
                apr_status_t stat = apr_xlate_conv_buffer(decoder,
                    in, &inBytesLeft, buf, &outBytesLeft);
  -             if (stat != APR_INCOMPLETE && stat != APR_SUCCESS) {
  -               throw TranscoderException(stat);
  -             }
                dst.append(buf, BUFSIZE - outBytesLeft);
  -             if (stat == APR_INCOMPLETE) {
  +             if (stat != APR_SUCCESS) {
                  dst.append(1, '?');
  -               return;
  +               inBytesLeft--;
                }
                in = end - inBytesLeft;
             }
  
  
  
  1.1                  logging-log4cxx/src/iconv_module.cpp
  
  Index: iconv_module.cpp
  ===================================================================
  #define ICONV_INTERNAL
  extern "C" {
    #include <apr.h>
    #include <iconv.h>
  }
  #include <stdlib.h>
  
  namespace log4cxx {
  
  namespace adobe_stdenc {
    #include "ccs/adobe-stdenc.c"
    #undef NBITS
  }
  namespace adobe_symbol {
    #include "ccs/adobe-symbol.c"
    #undef NBITS
  }
  namespace adobe_zdingbats {
    #include "ccs/adobe-zdingbats.c"
    #undef NBITS
  }
  namespace big5 {
    #include "ccs/big5.c"
    #undef NBITS
  }
  namespace cns11643_plane14 {
    #include "ccs/cns11643-plane14.c"
    #undef NBITS
    }
  namespace cns11643_plane1 {
    #include "ccs/cns11643-plane1.c"
    #undef NBITS
    }
  namespace cns11643_plane2 {
    #include "ccs/cns11643-plane2.c"
    #undef NBITS
    }
  namespace cp037 {
    #include "ccs/cp037.c"
    #undef NBITS
    }
  namespace cp038 {
    #include "ccs/cp038.c"
    }
  namespace cp10000 {
    #include "ccs/cp10000.c"
    #undef NBITS
    }
  namespace cp10006 {
    #include "ccs/cp10006.c"
    #undef NBITS
    }
  namespace cp10007 {
    #include "ccs/cp10007.c"
    #undef NBITS
    }
  namespace cp10029 {
    #include "ccs/cp10029.c"
    #undef NBITS
    }
  namespace cp1006 {
    #include "ccs/cp1006.c"
    #undef NBITS
    }
  namespace cp10079 {
    #include "ccs/cp10079.c"
    #undef NBITS
    }
  namespace cp10081 {
    #include "ccs/cp10081.c"
    #undef NBITS
    }
  namespace cp1026 {
    #include "ccs/cp1026.c"
    #undef NBITS
    }
  namespace cp273 {
    #include "ccs/cp273.c"
    #undef NBITS
    }
  namespace cp274 {
    #include "ccs/cp274.c"
    #undef NBITS
    }
  namespace cp275 {
    #include "ccs/cp275.c"
    #undef NBITS
    }
  namespace cp277 {
    #include "ccs/cp277.c"
    #undef NBITS
    }
  namespace cp278 {
    #include "ccs/cp278.c"
    #undef NBITS
    }
  namespace cp280 {
    #include "ccs/cp280.c"
    #undef NBITS
    }
  namespace cp281 {
    #include "ccs/cp281.c"
    #undef NBITS
    }
  namespace cp284 {
    #include "ccs/cp284.c"
    #undef NBITS
    }
  namespace cp285 {
    #include "ccs/cp285.c"
    #undef NBITS
    }
  namespace cp290 {
    #include "ccs/cp290.c"
    #undef NBITS
    }
  namespace cp297 {
    #include "ccs/cp297.c"
    #undef NBITS
    }
  namespace cp420 {
    #include "ccs/cp420.c"
    #undef NBITS
    }
  namespace cp423 {
    #include "ccs/cp423.c"
    #undef NBITS
    }
  namespace cp424 {
    #include "ccs/cp424.c"
    #undef NBITS
    }
  namespace cp437 {
    #include "ccs/cp437.c"
    #undef NBITS
    }
  namespace cp500 {
    #include "ccs/cp500.c"
    #undef NBITS
    }
  namespace cp737 {
    #include "ccs/cp737.c"
    #undef NBITS
    }
  namespace cp775 {
    #include "ccs/cp775.c"
    #undef NBITS
    }
  namespace cp850 {
    #include "ccs/cp850.c"
    #undef NBITS
    }
  namespace cp851 {
    #include "ccs/cp851.c"
    #undef NBITS
    }
  namespace cp852 {
    #include "ccs/cp852.c"
    #undef NBITS
    }
  namespace cp855 {
    #include "ccs/cp855.c"
    #undef NBITS
    }
  namespace cp856 {
    #include "ccs/cp856.c"
    #undef NBITS
    }
  namespace cp857 {
    #include "ccs/cp857.c"
    #undef NBITS
    }
  namespace cp860 {
    #include "ccs/cp860.c"
    #undef NBITS
    }
  namespace cp861 {
    #include "ccs/cp861.c"
    #undef NBITS
    }
  namespace cp862 {
    #include "ccs/cp862.c"
    #undef NBITS
    }
  namespace cp863 {
    #include "ccs/cp863.c"
    #undef NBITS
    }
  namespace cp864 {
    #include "ccs/cp864.c"
    #undef NBITS
    }
  namespace cp865 {
    #include "ccs/cp865.c"
    #undef NBITS
    }
  namespace cp866 {
    #include "ccs/cp866.c"
    #undef NBITS
    }
  namespace cp868 {
    #include "ccs/cp868.c"
    #undef NBITS
    }
  namespace cp869 {
    #include "ccs/cp869.c"
    #undef NBITS
    }
  namespace cp870 {
    #include "ccs/cp870.c"
    #undef NBITS
    }
  namespace cp871 {
    #include "ccs/cp871.c"
    #undef NBITS
    }
  namespace cp874 {
    #include "ccs/cp874.c"
    #undef NBITS
    }
  namespace cp875 {
    #include "ccs/cp875.c"
    #undef NBITS
    }
  namespace cp880 {
    #include "ccs/cp880.c"
    #undef NBITS
    }
  namespace cp891 {
    #include "ccs/cp891.c"
    #undef NBITS
    }
  namespace cp903 {
    #include "ccs/cp903.c"
    #undef NBITS
    }
  namespace cp904 {
    #include "ccs/cp904.c"
    #undef NBITS
    }
  namespace cp905 {
    #include "ccs/cp905.c"
    #undef NBITS
    }
  namespace cp918 {
    #include "ccs/cp918.c"
    #undef NBITS
    }
  namespace cp932 {
    #include "ccs/cp932.c"
    #undef NBITS
    }
  namespace cp936 {
    #include "ccs/cp936.c"
    #undef NBITS
    }
  namespace cp949 {
    #include "ccs/cp949.c"
    #undef NBITS
    }
  namespace cp950 {
    #include "ccs/cp950.c"
    #undef NBITS
    }
  namespace dec_mcs {
    #include "ccs/dec-mcs.c"
    #undef NBITS
    }
  namespace ebcdic_at_de_a {
    #include "ccs/ebcdic-at-de-a.c"
    #undef NBITS
    }
  namespace ebcdic_at_de {
    #include "ccs/ebcdic-at-de.c"
    #undef NBITS
    }
  namespace ebcdic_ca_fr {
    #include "ccs/ebcdic-ca-fr.c"
    #undef NBITS
    }
  namespace ebcdic_dk_no_a {
    #include "ccs/ebcdic-dk-no-a.c"
    #undef NBITS
    }
  namespace ebcdic_dk_no {
    #include "ccs/ebcdic-dk-no.c"
    #undef NBITS
    }
  namespace ebcdic_es_a {
    #include "ccs/ebcdic-es-a.c"
    #undef NBITS
    }
  namespace ebcdic_es {
    #include "ccs/ebcdic-es.c"
    #undef NBITS
    }
  namespace ebcdic_es_s {
    #include "ccs/ebcdic-es-s.c"
    #undef NBITS
    }
  namespace ebcdic_fi_se_a {
    #include "ccs/ebcdic-fi-se-a.c"
    #undef NBITS
    }
  namespace ebcdic_fi_se {
    #include "ccs/ebcdic-fi-se.c"
    #undef NBITS
    }
  namespace ebcdic_fr {
    #include "ccs/ebcdic-fr.c"
    #undef NBITS
    }
  namespace ebcdic_it {
    #include "ccs/ebcdic-it.c"
    #undef NBITS
    }
  namespace ebcdic_pt {
    #include "ccs/ebcdic-pt.c"
    #undef NBITS
    }
  namespace ebcdic_uk {
    #include "ccs/ebcdic-uk.c"
    #undef NBITS
    }
  namespace ebcdic_us {
    #include "ccs/ebcdic-us.c"
    #undef NBITS
    }
  namespace gb12345 {
    #include "ccs/gb12345.c"
    #undef NBITS
    }
  namespace gb_2312_80 {
    #include "ccs/gb_2312-80.c"
    #undef NBITS
    }
  namespace hp_roman8 {
    #include "ccs/hp-roman8.c"
    #undef NBITS
    }
  namespace iso646_dk {
    #include "ccs/iso646-dk.c"
    #undef NBITS
    }
  namespace iso646_kr {
    #include "ccs/iso646-kr.c"
    #undef NBITS
    }
  namespace iso_8859_10 {
    #include "ccs/iso-8859-10.c"
    #undef NBITS
    }
  namespace iso_8859_13 {
    #include "ccs/iso-8859-13.c"
    #undef NBITS
    }
  namespace iso_8859_14 {
    #include "ccs/iso-8859-14.c"
    #undef NBITS
    }
  namespace iso_8859_15 {
    #include "ccs/iso-8859-15.c"
    #undef NBITS
    }
  namespace iso_8859_1 {
    #include "ccs/iso-8859-1.c"
    #undef NBITS
    }
  namespace iso_8859_2 {
    #include "ccs/iso-8859-2.c"
    #undef NBITS
    }
  namespace iso_8859_3 {
    #include "ccs/iso-8859-3.c"
    #undef NBITS
    }
  namespace iso_8859_4 {
    #include "ccs/iso-8859-4.c"
    #undef NBITS
    }
  namespace iso_8859_5 {
    #include "ccs/iso-8859-5.c"
    #undef NBITS
    }
  namespace iso_8859_6 {
    #include "ccs/iso-8859-6.c"
    #undef NBITS
    }
  namespace iso_8859_7 {
    #include "ccs/iso-8859-7.c"
    #undef NBITS
    }
  namespace iso_8859_8 {
    #include "ccs/iso-8859-8.c"
    #undef NBITS
    }
  namespace iso_8859_9 {
    #include "ccs/iso-8859-9.c"
    #undef NBITS
    }
  namespace iso_ir_102 {
    #include "ccs/iso-ir-102.c"
    #undef NBITS
    }
  namespace iso_ir_103 {
    #include "ccs/iso-ir-103.c"
    #undef NBITS
    }
  namespace iso_ir_10 {
    #include "ccs/iso-ir-10.c"
    #undef NBITS
    }
  namespace iso_ir_111 {
    #include "ccs/iso-ir-111.c"
    #undef NBITS
    }
  namespace iso_ir_11 {
    #include "ccs/iso-ir-11.c"
    #undef NBITS
    }
  namespace iso_ir_121 {
    #include "ccs/iso-ir-121.c"
    #undef NBITS
    }
  namespace iso_ir_122 {
    #include "ccs/iso-ir-122.c"
    #undef NBITS
    }
  namespace iso_ir_123 {
    #include "ccs/iso-ir-123.c"
    #undef NBITS
    }
  namespace iso_ir_128 {
    #include "ccs/iso-ir-128.c"
    #undef NBITS
    }
  namespace iso_ir_139 {
    #include "ccs/iso-ir-139.c"
    #undef NBITS
    }
  namespace iso_ir_13 {
    #include "ccs/iso-ir-13.c"
    #undef NBITS
    }
  namespace iso_ir_141 {
    #include "ccs/iso-ir-141.c"
    #undef NBITS
    }
  namespace iso_ir_142 {
    #include "ccs/iso-ir-142.c"
    #undef NBITS
    }
  namespace iso_ir_143 {
    #include "ccs/iso-ir-143.c"
    #undef NBITS
    }
  namespace iso_ir_146 {
    #include "ccs/iso-ir-146.c"
    #undef NBITS
    }
  namespace iso_ir_147 {
    #include "ccs/iso-ir-147.c"
    #undef NBITS
    }
  namespace iso_ir_14 {
    #include "ccs/iso-ir-14.c"
    #undef NBITS
    }
  namespace iso_ir_150 {
    #include "ccs/iso-ir-150.c"
    #undef NBITS
    }
  namespace iso_ir_151 {
    #include "ccs/iso-ir-151.c"
    #undef NBITS
    }
  namespace iso_ir_152 {
    #include "ccs/iso-ir-152.c"
    #undef NBITS
    }
  namespace iso_ir_153 {
    #include "ccs/iso-ir-153.c"
    #undef NBITS
    }
  namespace iso_ir_154 {
    #include "ccs/iso-ir-154.c"
    #undef NBITS
    }
  namespace iso_ir_155 {
    #include "ccs/iso-ir-155.c"
    #undef NBITS
    }
  namespace iso_ir_158 {
    #include "ccs/iso-ir-158.c"
    #undef NBITS
    }
  namespace iso_ir_15 {
    #include "ccs/iso-ir-15.c"
    #undef NBITS
    }
  namespace iso_ir_16 {
    #include "ccs/iso-ir-16.c"
    #undef NBITS
    }
  namespace iso_ir_17 {
    #include "ccs/iso-ir-17.c"
    #undef NBITS
  }
  namespace iso_ir_18 {
    #include "ccs/iso-ir-18.c"
    #undef NBITS
    }
  namespace iso_ir_19 {
    #include "ccs/iso-ir-19.c"
    #undef NBITS
    }
  namespace iso_ir_21 {
    #include "ccs/iso-ir-21.c"
    #undef NBITS
    }
  namespace iso_ir_25 {
    #include "ccs/iso-ir-25.c"
    #undef NBITS
    }
  namespace iso_ir_27 {
    #include "ccs/iso-ir-27.c"
    #undef NBITS
    }
  namespace iso_ir_2 {
    #include "ccs/iso-ir-2.c"
    #undef NBITS
    }
  namespace iso_ir_37 {
    #include "ccs/iso-ir-37.c"
    #undef NBITS
    }
  namespace iso_ir_47 {
    #include "ccs/iso-ir-47.c"
    #undef NBITS
    }
  namespace iso_ir_49 {
    #include "ccs/iso-ir-49.c"
    #undef NBITS
    }
  namespace iso_ir_4 {
    #include "ccs/iso-ir-4.c"
    #undef NBITS
    }
  namespace iso_ir_50 {
    #include "ccs/iso-ir-50.c"
    #undef NBITS
    }
  namespace iso_ir_51 {
    #include "ccs/iso-ir-51.c"
    #undef NBITS
    }
  namespace iso_ir_54 {
    #include "ccs/iso-ir-54.c"
    #undef NBITS
    }
  namespace iso_ir_55 {
    #include "ccs/iso-ir-55.c"
    #undef NBITS
    }
  namespace iso_ir_57 {
    #include "ccs/iso-ir-57.c"
    #undef NBITS
    }
  namespace iso_ir_60 {
    #include "ccs/iso-ir-60.c"
    #undef NBITS
    }
  namespace iso_ir_61 {
    #include "ccs/iso-ir-61.c"
    #undef NBITS
    }
  namespace iso_ir_69 {
    #include "ccs/iso-ir-69.c"
    #undef NBITS
    }
  namespace iso_ir_70 {
    #include "ccs/iso-ir-70.c"
    #undef NBITS
    }
  namespace iso_ir_8_1 {
    #include "ccs/iso-ir-8-1.c"
    #undef NBITS
    }
  namespace iso_ir_8_2 {
    #include "ccs/iso-ir-8-2.c"
    #undef NBITS
    }
  namespace iso_ir_84 {
    #include "ccs/iso-ir-84.c"
    #undef NBITS
    }
  namespace iso_ir_85 {
    #include "ccs/iso-ir-85.c"
    #undef NBITS
    }
  namespace iso_ir_86 {
    #include "ccs/iso-ir-86.c"
    #undef NBITS
    }
  namespace iso_ir_88 {
    #include "ccs/iso-ir-88.c"
    #undef NBITS
    }
  namespace iso_ir_89 {
    #include "ccs/iso-ir-89.c"
    #undef NBITS
    }
  namespace iso_ir_90 {
    #include "ccs/iso-ir-90.c"
    #undef NBITS
    }
  namespace iso_ir_9_1 {
    #include "ccs/iso-ir-9-1.c"
    #undef NBITS
    }
  namespace iso_ir_91 {
    #include "ccs/iso-ir-91.c"
    #undef NBITS
    }
  namespace iso_ir_9_2 {
    #include "ccs/iso-ir-9-2.c"
    #undef NBITS
    }
  namespace iso_ir_92 {
    #include "ccs/iso-ir-92.c"
    #undef NBITS
    }
  namespace iso_ir_93 {
    #include "ccs/iso-ir-93.c"
    #undef NBITS
    }
  namespace iso_ir_94 {
    #include "ccs/iso-ir-94.c"
    #undef NBITS
    }
  namespace iso_ir_95 {
    #include "ccs/iso-ir-95.c"
    #undef NBITS
    }
  namespace iso_ir_96 {
    #include "ccs/iso-ir-96.c"
    #undef NBITS
    }
  namespace iso_ir_98 {
    #include "ccs/iso-ir-98.c"
    #undef NBITS
    }
  namespace iso_ir_99 {
    #include "ccs/iso-ir-99.c"
    #undef NBITS
    }
  namespace jis_x0201 {
    #include "ccs/jis_x0201.c"
    #undef NBITS
    }
  namespace jis_x0208_1983 {
    #include "ccs/jis_x0208-1983.c"
    #undef NBITS
    }
  namespace jis_x0212_1990 {
    #include "ccs/jis_x0212-1990.c"
    #undef NBITS
    }
  namespace johab {
    #include "ccs/johab.c"
    #undef NBITS
    }
  namespace koi8_r {
    #include "ccs/koi8-r.c"
    #undef NBITS
    }
  namespace koi8_ru {
    #include "ccs/koi8-ru.c"
    #undef NBITS
    }
  namespace koi8_u {
    #include "ccs/koi8-u.c"
    #undef NBITS
    }
  namespace ksx1001 {
    #include "ccs/ksx1001.c"
    #undef NBITS
    }
  namespace mac_ce {
    #include "ccs/mac-ce.c"
    #undef NBITS
    }
  namespace mac_croatian {
    #include "ccs/mac-croatian.c"
    #undef NBITS
    }
  namespace mac_cyrillic {
    #include "ccs/mac-cyrillic.c"
    #undef NBITS
    }
  namespace mac_dingbats {
    #include "ccs/mac-dingbats.c"
    #undef NBITS
    }
  namespace mac_greek {
    #include "ccs/mac-greek.c"
    #undef NBITS
    }
  namespace mac_iceland {
    #include "ccs/mac-iceland.c"
    #undef NBITS
    }
  namespace macintosh {
    #include "ccs/macintosh.c"
    #undef NBITS
    }
  namespace mac_japan {
    #include "ccs/mac-japan.c"
    #undef NBITS
    }
  namespace mac_roman {
    #include "ccs/mac-roman.c"
    #undef NBITS
    }
  namespace mac_romania {
    #include "ccs/mac-romania.c"
    #undef NBITS
    }
  namespace mac_thai {
    #include "ccs/mac-thai.c"
    #undef NBITS
    }
  namespace mac_turkish {
    #include "ccs/mac-turkish.c"
    #undef NBITS
    }
  namespace mac_ukraine {
    #include "ccs/mac-ukraine.c"
    #undef NBITS
    }
  namespace osd_ebcdic_df04_15 {
    #include "ccs/osd_ebcdic_df04_15.c"
    #undef NBITS
    }
  namespace osd_ebcdic_df04_1 {
    #include "ccs/osd_ebcdic_df04_1.c"
    #undef NBITS
    }
  namespace shift_jis {
    #include "ccs/shift_jis.c"
    #undef NBITS
    }
  namespace us_ascii {
    #include "ccs/us-ascii.c"
    #undef NBITS
    }
  namespace windows_1250 {
    #include "ccs/windows-1250.c"
    #undef NBITS
    }
  namespace windows_1251 {
    #include "ccs/windows-1251.c"
    #undef NBITS
    }
  namespace windows_1252 {
    #include "ccs/windows-1252.c"
    #undef NBITS
    }
  namespace windows_1253 {
    #include "ccs/windows-1253.c"
    #undef NBITS
    }
  namespace windows_1254 {
    #include "ccs/windows-1254.c"
    #undef NBITS
    }
  namespace windows_1255 {
    #include "ccs/windows-1255.c"
    #undef NBITS
    }
  namespace windows_1256 {
    #include "ccs/windows-1256.c"
    #undef NBITS
    }
  namespace windows_1257 {
    #include "ccs/windows-1257.c"
    #undef NBITS
    }
  namespace windows_1258 {
    #include "ccs/windows-1258.c"
    #undef NBITS
    }
  namespace euc_jp {
    #include "ces/euc-jp.c"
    #undef NBITS
    }
  namespace euc_kr {
    #include "ces/euc-kr.c"
    #undef NBITS
    }
  namespace euc_tw {
    #include "ces/euc-tw.c"
    #undef NBITS
    }
  namespace gb2312 {
    #include "ces/gb2312.c"
    #undef NBITS
    }
  namespace iso_10646_ucs_2 {
    #include "ces/iso-10646-ucs-2.c"
    #undef NBITS
    }
  namespace iso_10646_ucs_4 {
    #include "ces/iso-10646-ucs-4.c"
    #undef NBITS
    }
  namespace iso_2022_cn {
    #include "ces/iso-2022-cn.c"
    #undef NBITS
    }
  namespace iso_2022_jp_2 {
    #include "ces/iso-2022-jp-2.c"
    #undef NBITS
    }
  namespace iso_2022_jp {
    #include "ces/iso-2022-jp.c"
    #undef NBITS
    }
  namespace iso_2022_kr {
    #include "ces/iso-2022-kr.c"
    #undef NBITS
    }
  namespace _tbl_simple {
    #include "ces/_tbl_simple.c"
    #undef NBITS
    }
  namespace ucs2_internal {
    #include "ces/ucs2-internal.c"
    #undef NBITS
    }
  namespace ucs4_internal {
    #include "ces/ucs4-internal.c"
    #undef NBITS
    }
  namespace unicode_1_1_utf_7 {
    #include "ces/unicode-1-1-utf-7.c"
    #undef NBITS
    }
  namespace utf_16 {
    #include "ces/utf-16.c"
    #undef NBITS
    }
  namespace utf_8 {
    #include "ces/utf-8.c"
    #undef NBITS
    }
  namespace iconv {
    apr_status_t iconv_getpath(char *buf, const char *name, apr_pool_t *ctx)
    {
      strcpy(buf, name);
      return APR_SUCCESS;
    }
  
  #define LOCAL_MODULE(modname, ns) if (strcmp(name, modname) == 0) { *dpp = 
&ns::iconv_module; stat = 0; } else
  #define LAST_LOCAL_MODULE(modname, ns) if (strcmp(name, modname) == 0) { *dpp 
= &ns::iconv_module;  stat = 0; }
  
    int iconv_dlopen(const char *name,
        const char *symbol,
        void **hpp,
        void **dpp,
        apr_pool_t *ctx) {
        int stat = EINVAL;
        switch(name[0]) {
          case 'a':
          LOCAL_MODULE("adobe-stdenc", adobe_stdenc)
          LOCAL_MODULE("adobe-symbol", adobe_symbol)
          LAST_LOCAL_MODULE("adobe-zdingbats", adobe_zdingbats)
          break;
  
          case 'b':
          LAST_LOCAL_MODULE("big5", big5)
          break;
  
          case 'c':
          LOCAL_MODULE("cns11643-plane14", cns11643_plane14)
          LOCAL_MODULE("cns11643-plane1", cns11643_plane1)
          LOCAL_MODULE("cns11643-plane2", cns11643_plane2)
          LOCAL_MODULE("cp037", cp037)
          LOCAL_MODULE("cp038", cp038)
          LOCAL_MODULE("cp10000", cp10000)
          LOCAL_MODULE("cp10006", cp10006)
          LOCAL_MODULE("cp10007", cp10007)
          LOCAL_MODULE("cp10029", cp10029)
          LOCAL_MODULE("cp1006", cp1006)
          LOCAL_MODULE("cp10079", cp10079)
          LOCAL_MODULE("cp10081", cp10081)
          LOCAL_MODULE("cp1026", cp1026)
          LOCAL_MODULE("cp273", cp273)
          LOCAL_MODULE("cp274", cp274)
          LOCAL_MODULE("cp275", cp275)
          LOCAL_MODULE("cp277", cp277)
          LOCAL_MODULE("cp278", cp278)
          LOCAL_MODULE("cp280", cp280)
          LOCAL_MODULE("cp281", cp281)
          LOCAL_MODULE("cp284", cp284)
          LOCAL_MODULE("cp285", cp285)
          LOCAL_MODULE("cp290", cp290)
          LOCAL_MODULE("cp297", cp297)
          LOCAL_MODULE("cp420", cp420)
          LOCAL_MODULE("cp423", cp423)
          LOCAL_MODULE("cp424", cp424)
          LOCAL_MODULE("cp437", cp437)
          LOCAL_MODULE("cp500", cp500)
          LOCAL_MODULE("cp737", cp737)
          LOCAL_MODULE("cp775", cp775)
          LOCAL_MODULE("cp850", cp850)
          LOCAL_MODULE("cp851", cp851)
          LOCAL_MODULE("cp852", cp852)
          LOCAL_MODULE("cp855", cp855)
          LOCAL_MODULE("cp856", cp856)
          LOCAL_MODULE("cp857", cp857)
          LOCAL_MODULE("cp860", cp860)
          LOCAL_MODULE("cp861", cp861)
          LOCAL_MODULE("cp862", cp862)
          LOCAL_MODULE("cp863", cp863)
          LOCAL_MODULE("cp864", cp864)
          LOCAL_MODULE("cp865", cp865)
          LOCAL_MODULE("cp866", cp866)
          LOCAL_MODULE("cp868", cp868)
          LOCAL_MODULE("cp869", cp869)
          LOCAL_MODULE("cp870", cp870)
          LOCAL_MODULE("cp871", cp871)
          LOCAL_MODULE("cp874", cp874)
          LOCAL_MODULE("cp875", cp875)
          LOCAL_MODULE("cp880", cp880)
          LOCAL_MODULE("cp891", cp891)
          LOCAL_MODULE("cp903", cp903)
          LOCAL_MODULE("cp904", cp904)
          LOCAL_MODULE("cp905", cp905)
          LOCAL_MODULE("cp918", cp918)
          LOCAL_MODULE("cp932", cp932)
          LOCAL_MODULE("cp936", cp936)
          LOCAL_MODULE("cp949", cp949)
          LAST_LOCAL_MODULE("cp950", cp950)
          break;
  
          case 'd':
          LAST_LOCAL_MODULE("dec-mcs", dec_mcs)
          break;
  
          case 'e':
          LOCAL_MODULE("ebcdic-at-de-a", ebcdic_at_de_a)
          LOCAL_MODULE("ebcdic-at-de", ebcdic_at_de)
          LOCAL_MODULE("ebcdic-ca-fr", ebcdic_ca_fr)
          LOCAL_MODULE("ebcdic-dk-no-a", ebcdic_dk_no_a)
          LOCAL_MODULE("ebcdic-dk-no", ebcdic_dk_no)
          LOCAL_MODULE("ebcdic-es-a", ebcdic_es_a)
          LOCAL_MODULE("ebcdic-es", ebcdic_es)
          LOCAL_MODULE("ebcdic-es-s", ebcdic_es_s)
          LOCAL_MODULE("ebcdic-fi-se-a", ebcdic_fi_se_a)
          LOCAL_MODULE("ebcdic-fi-se", ebcdic_fi_se)
          LOCAL_MODULE("ebcdic-fr", ebcdic_fr)
          LOCAL_MODULE("ebcdic-it", ebcdic_it)
          LOCAL_MODULE("ebcdic-pt", ebcdic_pt)
          LOCAL_MODULE("ebcdic-uk", ebcdic_uk)
          LAST_LOCAL_MODULE("ebcdic-us", ebcdic_us)
          break;
  
          case 'g':
          LOCAL_MODULE("gb12345", gb12345)
          LAST_LOCAL_MODULE("gb_2312-80", gb_2312_80)
          break;
  
          case 'h':
          LAST_LOCAL_MODULE("hp-roman8", hp_roman8)
          break;
  
          case 'i':
          LOCAL_MODULE("iso646-dk", iso646_dk)
          LOCAL_MODULE("iso646-kr", iso646_kr)
          LOCAL_MODULE("iso-8859-10", iso_8859_10)
          LOCAL_MODULE("iso-8859-13", iso_8859_13)
          LOCAL_MODULE("iso-8859-14", iso_8859_14)
          LOCAL_MODULE("iso-8859-15", iso_8859_15)
          LOCAL_MODULE("iso-8859-1", iso_8859_1)
          LOCAL_MODULE("iso-8859-2", iso_8859_2)
          LOCAL_MODULE("iso-8859-3", iso_8859_3)
          LOCAL_MODULE("iso-8859-4", iso_8859_4)
          LOCAL_MODULE("iso-8859-5", iso_8859_5)
          LOCAL_MODULE("iso-8859-6", iso_8859_6)
          LOCAL_MODULE("iso-8859-7", iso_8859_7)
          LOCAL_MODULE("iso-8859-8", iso_8859_8)
          LOCAL_MODULE("iso-8859-9", iso_8859_9)
          LOCAL_MODULE("iso-ir-102", iso_ir_102)
          LOCAL_MODULE("iso-ir-103", iso_ir_103)
          LOCAL_MODULE("iso-ir-10", iso_ir_10)
          LOCAL_MODULE("iso-ir-111", iso_ir_111)
          LOCAL_MODULE("iso-ir-11", iso_ir_11)
          LOCAL_MODULE("iso-ir-121", iso_ir_121)
          LOCAL_MODULE("iso-ir-122", iso_ir_122)
          LOCAL_MODULE("iso-ir-123", iso_ir_123)
          LOCAL_MODULE("iso-ir-128", iso_ir_128)
          LOCAL_MODULE("iso-ir-139", iso_ir_139)
          LOCAL_MODULE("iso-ir-13", iso_ir_13)
          LOCAL_MODULE("iso-ir-141", iso_ir_141)
          LOCAL_MODULE("iso-ir-142", iso_ir_142)
          LOCAL_MODULE("iso-ir-143", iso_ir_143)
          LOCAL_MODULE("iso-ir-146", iso_ir_146)
          LOCAL_MODULE("iso-ir-147", iso_ir_147)
          LOCAL_MODULE("iso-ir-14", iso_ir_14)
          LOCAL_MODULE("iso-ir-150", iso_ir_150)
          LOCAL_MODULE("iso-ir-151", iso_ir_151)
          LOCAL_MODULE("iso-ir-152", iso_ir_152)
          LOCAL_MODULE("iso-ir-153", iso_ir_153)
          LOCAL_MODULE("iso-ir-154", iso_ir_154)
          LOCAL_MODULE("iso-ir-155", iso_ir_155)
          LOCAL_MODULE("iso-ir-158", iso_ir_158)
          LOCAL_MODULE("iso-ir-15", iso_ir_15)
          LOCAL_MODULE("iso-ir-16", iso_ir_16)
          LOCAL_MODULE("iso-ir-17", iso_ir_17)
          LOCAL_MODULE("iso-ir-18", iso_ir_18)
          LOCAL_MODULE("iso-ir-19", iso_ir_19)
          LOCAL_MODULE("iso-ir-21", iso_ir_21)
          LOCAL_MODULE("iso-ir-25", iso_ir_25)
          LOCAL_MODULE("iso-ir-27", iso_ir_27)
          LOCAL_MODULE("iso-ir-2", iso_ir_2)
          LOCAL_MODULE("iso-ir-37", iso_ir_37)
          LOCAL_MODULE("iso-ir-47", iso_ir_47)
          LOCAL_MODULE("iso-ir-49", iso_ir_49)
          LOCAL_MODULE("iso-ir-4", iso_ir_4)
          LOCAL_MODULE("iso-ir-50", iso_ir_50)
          LOCAL_MODULE("iso-ir-51", iso_ir_51)
          LOCAL_MODULE("iso-ir-54", iso_ir_54)
          LOCAL_MODULE("iso-ir-55", iso_ir_55)
          LOCAL_MODULE("iso-ir-57", iso_ir_57)
          LOCAL_MODULE("iso-ir-60", iso_ir_60)
          LOCAL_MODULE("iso-ir-61", iso_ir_61)
          LOCAL_MODULE("iso-ir-69", iso_ir_69)
          LOCAL_MODULE("iso-ir-70", iso_ir_70)
          LOCAL_MODULE("iso-ir-8-1", iso_ir_8_1)
          LOCAL_MODULE("iso-ir-8-2", iso_ir_8_2)
          LOCAL_MODULE("iso-ir-84", iso_ir_84)
          LOCAL_MODULE("iso-ir-85", iso_ir_85)
          LOCAL_MODULE("iso-ir-86", iso_ir_86)
          LOCAL_MODULE("iso-ir-88", iso_ir_88)
          LOCAL_MODULE("iso-ir-89", iso_ir_89)
          LOCAL_MODULE("iso-ir-90", iso_ir_90)
          LOCAL_MODULE("iso-ir-9-1", iso_ir_9_1)
          LOCAL_MODULE("iso-ir-91", iso_ir_91)
          LOCAL_MODULE("iso-ir-9-2", iso_ir_9_2)
          LOCAL_MODULE("iso-ir-92", iso_ir_92)
          LOCAL_MODULE("iso-ir-93", iso_ir_93)
          LOCAL_MODULE("iso-ir-94", iso_ir_94)
          LOCAL_MODULE("iso-ir-95", iso_ir_95)
          LOCAL_MODULE("iso-ir-96", iso_ir_96)
          LOCAL_MODULE("iso-ir-98", iso_ir_98)
          LAST_LOCAL_MODULE("iso-ir-99", iso_ir_99)
          break;
  
          case 'j':
          LOCAL_MODULE("jis_x0201", jis_x0201)
          LOCAL_MODULE("jis_x0208-1983", jis_x0208_1983)
          LOCAL_MODULE("jis_x0212-1990", jis_x0212_1990)
          LAST_LOCAL_MODULE("johab", johab)
          break;
  
          case 'k':
          LOCAL_MODULE("koi8-r", koi8_r)
          LOCAL_MODULE("koi8-ru", koi8_ru)
          LOCAL_MODULE("koi8-u", koi8_u)
          LAST_LOCAL_MODULE("ksx1001", ksx1001)
          break;
  
          case 'm':
          LOCAL_MODULE("mac-ce", mac_ce)
          LOCAL_MODULE("mac-croatian", mac_croatian)
          LOCAL_MODULE("mac-cyrillic", mac_cyrillic)
          LOCAL_MODULE("mac-dingbats", mac_dingbats)
          LOCAL_MODULE("mac-greek", mac_greek)
          LOCAL_MODULE("mac-iceland", mac_iceland)
          LOCAL_MODULE("macintosh", macintosh)
          LOCAL_MODULE("mac-japan", mac_japan)
          LOCAL_MODULE("mac-roman", mac_roman)
          LOCAL_MODULE("mac-romania", mac_romania)
          LOCAL_MODULE("mac-thai", mac_thai)
          LOCAL_MODULE("mac-turkish", mac_turkish)
          LAST_LOCAL_MODULE("mac-ukraine", mac_ukraine)
          break;
  
          case 'o':
          LOCAL_MODULE("osd_ebcdic_df04_15", osd_ebcdic_df04_15)
          LAST_LOCAL_MODULE("osd_ebcdic_df04_1", osd_ebcdic_df04_1)
          break;
  
          case 's':
          LAST_LOCAL_MODULE("shift_jis", shift_jis)
          break;
  
          case 'u':
          LOCAL_MODULE("us-ascii", us_ascii)
          break;
  
          case 'w':
          LOCAL_MODULE("windows-1250", windows_1250)
          LOCAL_MODULE("windows-1251", windows_1251)
          LOCAL_MODULE("windows-1252", windows_1252)
          LOCAL_MODULE("windows-1253", windows_1253)
          LOCAL_MODULE("windows-1254", windows_1254)
          LOCAL_MODULE("windows-1255", windows_1255)
          LOCAL_MODULE("windows-1256", windows_1256)
          LOCAL_MODULE("windows-1257", windows_1257)
          LAST_LOCAL_MODULE("windows-1258", windows_1258)
          break;
        }
        return stat;
      }
    }
  }
  
  using namespace log4cxx::iconv;
  
  API_DECLARE_NONSTD(int)
  apr_iconv_mod_load(const char *modname, int modtype, const void *args,
          struct iconv_module **modpp, apr_pool_t *ctx)
  {
          struct iconv_module_desc *mdesc;
          struct iconv_module *mod, *depmod;
          const struct iconv_module_depend *depend;
          char buffer[APR_PATH_MAX];
          void *handle;
          int error;
  
          if (iconv_getpath(buffer, modname, ctx) != 0)
                  return EINVAL;
  
          error = iconv_dlopen(buffer, "iconv_module", &handle, (void**)&mdesc, 
ctx);
          if (error)
                  return error;
          mod = (iconv_module*) malloc(sizeof(*mod));
          if (mod == NULL) {
                  return ENOMEM;
          }
          memset(mod, 0, sizeof(*mod));
          mod->im_handle = handle;
          mod->im_desc = mdesc;
          mod->im_args = args;
          depend = mdesc->imd_depend;
          error = ICONV_MOD_DYN_LOAD(mod,ctx);
          if (error)
                  goto bad;
          error = ICONV_MOD_LOAD(mod,ctx);
          if (error)
                  goto bad;
          mod->im_flags |= ICMODF_LOADED;
          *modpp = mod;
          return 0;
  bad:
          apr_iconv_mod_unload(mod,ctx);
          return error;
  }
  
  API_DECLARE_NONSTD(int)
  apr_iconv_mod_unload(struct iconv_module *mod, apr_pool_t *ctx)
  {
          if (mod == NULL)
                  return -1;
          free(mod);
          return 0;
  }
  
  API_DECLARE_NONSTD(int)
  apr_iconv_mod_noevent(struct iconv_module *mod, int event, apr_pool_t *ctx)
  {
          switch (event) {
              case ICMODEV_LOAD:
              case ICMODEV_UNLOAD:
              case ICMODEV_DYN_LOAD:
              case ICMODEV_DYN_UNLOAD:
                  break;
              default:
                  return APR_EINVAL;
          }
          return 0;
  }
  
  
  

Reply via email to