Subject: bug#49990: [PATCH] gnu: Fix classpath-bootstrap compilation

From: muradm <[email-masked]>
Date: Fri, 3 Sep 2021 01:27:49 +0300

---
 gnu/packages/java.scm                         |  3 +-
 .../patches/classpath-instruction-order.patch | 35 +++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/classpath-instruction-order.patch

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index 08ef7a8213..1e29cac401 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -230,7 +230,8 @@ only faster.")
               (sha256
                (base32
                 "0i99wf9xd3hw1sj2sazychb9prx8nadxh2clgvk3zlmb28v0jbfz"))
-              (patches (search-patches "classpath-aarch64-support.patch"))))
+              (patches (search-patches "classpath-aarch64-support.patch"
+                                       "classpath-instruction-order.patch"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
diff --git a/gnu/packages/patches/classpath-instruction-order.patch b/gnu/packages/patches/classpath-instruction-order.patch
new file mode 100644
index 0000000000..278ae912c7
--- /dev/null
+++ b/gnu/packages/patches/classpath-instruction-order.patch
@@ -0,0 +1,35 @@
+diff -ruN ../classpath/classpath-0.93/native/jni/java-io/java_io_VMFile.c ./native/jni/java-io/java_io_VMFile.c
+--- ../classpath/classpath-0.93/native/jni/java-io/java_io_VMFile.c	2006-09-23 08:17:45.000000000 +0300
++++ ./native/jni/java-io/java_io_VMFile.c	2021-09-03 01:08:17.073644627 +0300
+@@ -278,6 +278,7 @@
+   const char *filename;
+   int result;
+   jint entryType;
++  int fres;
+ 
+   /* Don't use the JCL convert function because it throws an exception
+      on failure */
+@@ -288,9 +289,22 @@
+     }
+ 
+   result = cpio_checkType (filename, &entryType);
++
++  fres = 1;
++
++  if (result != CPNATIVE_OK)
++    {
++      fres = 0;
++    }
++
++  if (entryType != CPFILE_FILE)
++    {
++      fres = 0;
++    }
++
+   (*env)->ReleaseStringUTFChars (env, name, filename);
+ 
+-  return result == CPNATIVE_OK && entryType == CPFILE_FILE ? 1 : 0;
++  return fres;
+ #else /* not WITHOUT_FILESYSTEM */
+   return 0;
+ #endif /* not WITHOUT_FILESYSTEM */
-- 
2.33.0