Should be fixed now.

Thanks,

        - Godmar

> 
> Hello.
> 
> I have run into another problem with kaffe. This example code
> shows how the classloader works in the JDK and that Kaffe
> just calls exit(). I tried to implement a fix for this problem
> in the file kaffe/kaffevm/readClass.c but the code does not
> want to compile. Could someone with more knowledge of the kaffe
> internals take a look at this problem and my partial fix?
> 
> 
> 
> public class ClassDefineBug {
> 
>     public static void main(String[] argv) throws Exception {
> 
>       MyClassLoader mcl = new MyClassLoader();
>       
>       String data = "somestring";
>       
>       Class result = mcl.defineClass(null, data.getBytes());
> 
>       System.out.println("result is " + result);
>     }
> }
> 
> class MyClassLoader extends ClassLoader {
> 
> Class defineClass(String className, byte[] classData) {
>     Class result = null;
>     try {
>       result = defineClass(null, classData, 0, classData.length);
>     } catch (ClassFormatError e) {
>       System.out.println("ClassFormatError caught \"" + e.getMessage()
>                          + "\"");
>     }
>     return result;
> }
> 
> 
> protected Class loadClass(String className,boolean resolveIt)
>     throws ClassNotFoundException, SecurityException
> {
>     return Class.forName(className);
> }
> 
> }
> 
> 
> 
> 
> 
> 
> JDK output
> 
> % java ClassDefineBug
> ClassFormatError caught "Bad magic number"
> result is null
> 
> 
> 
> Kaffe output
> 
> % kaffe ClassDefineBug
> Bad magic 736f6d65 in class
> 
> 
> 
> 
> 
> Index: readClass.c
> ===================================================================
> RCS file: /home/cvspublic/kaffe/kaffe/kaffevm/readClass.c,v
> retrieving revision 1.5
> diff -u -r1.5 readClass.c
> --- readClass.c 1999/01/07 21:03:19     1.5
> +++ readClass.c 1999/03/18 03:13:31
> @@ -19,6 +19,7 @@
>  #include "file.h"
>  #include "access.h"
>  #include "object.h"
> +#include "errors.h"
>  #include "constants.h"
>  #ifdef KAFFEH
>  #include <readClassConfig.h>
> @@ -41,8 +42,13 @@
>         /* Read in class info */
>         readu4(&magic, fp);
>         if (magic != JAVAMAGIC) {
> +               /*
>                 fprintf(stderr, "Bad magic %x in class\n", magic);
>                 EXIT(1);
> +                */
> +                SET_LANG_EXCEPTION_MESSAGE(einfo,
> +                       ClassFormatError, "Bad magic number");
> +               return (0);
>         }
>         readu2(&minor_version, fp);
>         readu2(&major_version, fp);
> 
> 
> 
> 
> thanks
> 
> Mo DeJong
> dejong at cs.umn.edu
> 
> 

Reply via email to