I've applied a couple of patches (attached) to fix some long standing
javah issues:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40188
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45527

These fixes allow gjavah to generate header files during the OpenJDK
build in the same way as the OpenJDK javah.

ChangeLog:

2011-07-07  Andrew John Hughes  <ahug...@redhat.com>

        PR classpath/45527
        * tools/gnu/classpath/tools/javah/JniHelper.java:
        (mangle(String)): Replace '$' with '_' rather than
        encoding it as hex.

2011-07-07  Andrew John Hughes  <ahug...@redhat.com>

        PR classpath/40188
        * tools/gnu/classpath/tools/javah/JniIncludePrinter.java:
        (writeFields(ClassWrapper,JniPrintStream)): Retain a
        reference to the original class and use it in naming
        fields, as opposed to the class in which it occurs.

-- 
Andrew :)

Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)

Support Free Java!
Contribute to GNU Classpath and IcedTea
http://www.gnu.org/software/classpath
http://icedtea.classpath.org
PGP Key: F5862A37 (https://keys.indymedia.org/)
Fingerprint = EA30 D855 D50F 90CD F54D  0698 0713 C3ED F586 2A37
Index: tools/gnu/classpath/tools/javah/JniIncludePrinter.java
===================================================================
RCS file: 
/sources/classpath/classpath/tools/gnu/classpath/tools/javah/JniIncludePrinter.java,v
retrieving revision 1.11
diff -u -u -r1.11 JniIncludePrinter.java
--- tools/gnu/classpath/tools/javah/JniIncludePrinter.java      3 Jun 2010 
19:14:37 -0000       1.11
+++ tools/gnu/classpath/tools/javah/JniIncludePrinter.java      7 Jul 2011 
10:13:22 -0000
@@ -63,6 +63,7 @@
   {
     klass.linkSupers();
     boolean wroteAny = false;
+    ClassWrapper headerClass = klass;
     for (; klass != null; klass = klass.superClass)
       {
         Iterator<?> i = klass.fields.iterator();
@@ -77,7 +78,7 @@
               continue;
 
             // Note that we don't want to mangle the field name.
-            String name = (JniHelper.mangle(klass.name) + "_" + field.name);
+            String name = (JniHelper.mangle(headerClass.name) + "_" + 
field.name);
             out.print("#undef ");
             out.println(name);
             out.print("#define ");
Index: tools/gnu/classpath/tools/javah/JniHelper.java
===================================================================
RCS file: 
/sources/classpath/classpath/tools/gnu/classpath/tools/javah/JniHelper.java,v
retrieving revision 1.4
diff -u -u -r1.4 JniHelper.java
--- tools/gnu/classpath/tools/javah/JniHelper.java      3 Jun 2010 19:14:37 
-0000       1.4
+++ tools/gnu/classpath/tools/javah/JniHelper.java      7 Jul 2011 11:27:22 
-0000
@@ -104,6 +104,8 @@
           result.append("_3");
         else if (c == '/')
           result.append("_");
+        else if (c == '$')
+          result.append("_");
         else if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')
                  || (c >= 'A' && c <= 'Z'))
           result.append(c);

Reply via email to