summaryrefslogtreecommitdiff
path: root/recipes/classpath/files
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/classpath/files
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/classpath/files')
-rw-r--r--recipes/classpath/files/SimpleName.diff66
-rw-r--r--recipes/classpath/files/autotools.patch24
-rw-r--r--recipes/classpath/files/cp-byte-loophelper.patch68
-rw-r--r--recipes/classpath/files/decimalformat.patch31
-rw-r--r--recipes/classpath/files/ecj_java_dir.patch34
-rw-r--r--recipes/classpath/files/getopt-filelist.patch271
-rw-r--r--recipes/classpath/files/gjar-prefix-patch.diff40
-rw-r--r--recipes/classpath/files/javanet-local.patch37
-rw-r--r--recipes/classpath/files/miscompilation-0.93.patch13
-rw-r--r--recipes/classpath/files/miscompilation.patch13
-rw-r--r--recipes/classpath/files/netif_16.patch269
-rw-r--r--recipes/classpath/files/sun-security-getproperty_0.96.1.patch503
-rw-r--r--recipes/classpath/files/xmlstream-fix.patch93
13 files changed, 1462 insertions, 0 deletions
diff --git a/recipes/classpath/files/SimpleName.diff b/recipes/classpath/files/SimpleName.diff
new file mode 100644
index 0000000000..ff2bec0f1c
--- /dev/null
+++ b/recipes/classpath/files/SimpleName.diff
@@ -0,0 +1,66 @@
+Index: vm/reference/java/lang/VMClass.java
+===================================================================
+RCS file: /sources/classpath/classpath/vm/reference/java/lang/VMClass.java,v
+retrieving revision 1.20
+diff -u -r1.20 VMClass.java
+--- vm/reference/java/lang/VMClass.java 18 Sep 2007 21:52:38 -0000 1.20
++++ vm/reference/java/lang/VMClass.java 19 Apr 2008 15:19:00 -0000
+@@ -296,27 +296,43 @@
+ */
+ static String getSimpleName(Class klass)
+ {
++ int arrayCount = 0;
++ while (klass.isArray())
++ {
++ klass = klass.getComponentType();
++ ++arrayCount;
++ }
++ // now klass is the component type
++
++ String simpleComponentName = null;
+ if (isAnonymousClass(klass))
+- return "";
+- if (isArray(klass))
+ {
+- return getComponentType(klass).getSimpleName() + "[]";
++ simpleComponentName = "";
+ }
+- String fullName = getName(klass);
+- int pos = fullName.lastIndexOf("$");
+- if (pos == -1)
+- pos = 0;
+ else
+ {
+- ++pos;
+- while (Character.isDigit(fullName.charAt(pos)))
+- ++pos;
++ String fullName = getName(klass);
++ int pos = fullName.lastIndexOf("$");
++ if (pos != -1)
++ { //inner class or local class
++ // skip digits of local classes
++ while (Character.isDigit(fullName.charAt(pos+1)))
++ pos++;
++ }
++ else
++ {
++ pos = fullName.lastIndexOf(".");
++ }
++ simpleComponentName = fullName.substring(pos+1);
+ }
+- int packagePos = fullName.lastIndexOf(".", pos);
+- if (packagePos == -1)
+- return fullName.substring(pos);
+- else
+- return fullName.substring(packagePos + 1);
++
++ if (arrayCount == 0)
++ return simpleComponentName;
++
++ StringBuffer sb = new StringBuffer(simpleComponentName);
++ while (arrayCount-- > 0)
++ sb.append("[]");
++ return sb.toString();
+ }
+
+ /**
diff --git a/recipes/classpath/files/autotools.patch b/recipes/classpath/files/autotools.patch
new file mode 100644
index 0000000000..663c0340cd
--- /dev/null
+++ b/recipes/classpath/files/autotools.patch
@@ -0,0 +1,24 @@
+Index: classpath-0.93/configure.ac
+===================================================================
+--- classpath-0.93.orig/configure.ac 2006-12-08 20:22:50.000000000 +0100
++++ classpath-0.93/configure.ac 2008-08-25 22:07:40.711946598 +0200
+@@ -41,6 +41,11 @@
+ AC_CONFIG_HEADERS([include/config.h])
+ AC_PREFIX_DEFAULT(/usr/local/classpath)
+
++AC_CONFIG_MACRO_DIR([m4])
++
++
++AM_ICONV_LINK
++
+ dnl -----------------------------------------------------------
+ dnl Enable collections.jar (disabled by default)
+ dnl -----------------------------------------------------------
+@@ -312,6 +317,7 @@
+ dnl AC_PROG_AWK
+ AC_PROG_CC
+ AC_PROG_CPP
++AM_PROG_CC_C_O
+
+ # Handle -Werror default case.
+ if test "$ENABLE_WERROR" = default; then
diff --git a/recipes/classpath/files/cp-byte-loophelper.patch b/recipes/classpath/files/cp-byte-loophelper.patch
new file mode 100644
index 0000000000..4fac362cba
--- /dev/null
+++ b/recipes/classpath/files/cp-byte-loophelper.patch
@@ -0,0 +1,68 @@
+Index: gnu/java/nio/charset/ByteDecodeLoopHelper.java
+===================================================================
+RCS file: /sources/classpath/classpath/gnu/java/nio/charset/ByteDecodeLoopHelper.java,v
+retrieving revision 1.1
+diff -u -r1.1 ByteDecodeLoopHelper.java
+--- gnu/java/nio/charset/ByteDecodeLoopHelper.java 23 Nov 2007 16:11:17 -0000 1.1
++++ gnu/java/nio/charset/ByteDecodeLoopHelper.java 3 Sep 2008 23:11:29 -0000
+@@ -119,6 +119,8 @@
+ int inRemaining = in.remaining();
+ int outRemaining = out.remaining();
+ CoderResult result;
++
++ bailOut:
+ if (inRemaining <= outRemaining)
+ {
+ for (int i = 0; i < inRemaining; i++)
+@@ -129,7 +131,7 @@
+ {
+ inPos--;
+ result = CoderResult.unmappableForLength(1);
+- break;
++ break bailOut;
+ }
+ char c = mapToChar(b);
+ outArray[outPos] = c;
+@@ -147,7 +149,7 @@
+ {
+ inPos--;
+ result = CoderResult.unmappableForLength(1);
+- break;
++ break bailOut;
+ }
+ char c = mapToChar(b);
+ outArray[outPos] = c;
+Index: gnu/java/nio/charset/ByteEncodeLoopHelper.java
+===================================================================
+RCS file: /sources/classpath/classpath/gnu/java/nio/charset/ByteEncodeLoopHelper.java,v
+retrieving revision 1.1
+diff -u -r1.1 ByteEncodeLoopHelper.java
+--- gnu/java/nio/charset/ByteEncodeLoopHelper.java 23 Nov 2007 16:11:17 -0000 1.1
++++ gnu/java/nio/charset/ByteEncodeLoopHelper.java 3 Sep 2008 23:11:29 -0000
+@@ -120,6 +120,8 @@
+ int inRemaining = in.remaining();
+ int outRemaining = out.remaining();
+ CoderResult result;
++
++ bailOut:
+ if (inRemaining <= outRemaining)
+ {
+ for (int i = 0; i < inRemaining; i++)
+@@ -130,7 +132,7 @@
+ {
+ inPos--;
+ result = CoderResult.unmappableForLength(1);
+- break;
++ break bailOut;
+ }
+ byte b = mapToByte(inChar);
+ outArray[outPos] = b;
+@@ -148,7 +150,7 @@
+ {
+ inPos--;
+ result = CoderResult.unmappableForLength(1);
+- break;
++ break bailOut;
+ }
+ byte b = mapToByte(inChar);
+ outArray[outPos] = b;
diff --git a/recipes/classpath/files/decimalformat.patch b/recipes/classpath/files/decimalformat.patch
new file mode 100644
index 0000000000..4997523830
--- /dev/null
+++ b/recipes/classpath/files/decimalformat.patch
@@ -0,0 +1,31 @@
+Index: classpath-0.97.2/java/text/DecimalFormat.java
+===================================================================
+--- classpath-0.97.2.orig/java/text/DecimalFormat.java
++++ classpath-0.97.2/java/text/DecimalFormat.java
+@@ -1296,7 +1296,7 @@ public class DecimalFormat extends Numbe
+ currencySymbol = this.symbols.getCurrencySymbol();
+
+ // if \u00A4 is doubled, we use the international currency symbol
+- if (i < len && pattern.charAt(i + 1) == '\u00A4')
++ if ((i + 1) < len && pattern.charAt(i + 1) == '\u00A4')
+ {
+ currencySymbol = this.symbols.getInternationalCurrencySymbol();
+ i++;
+@@ -1320,7 +1320,7 @@ public class DecimalFormat extends Numbe
+ else if (ch == '\'')
+ {
+ // QUOTE
+- if (i < len && pattern.charAt(i + 1) == '\'')
++ if ((i + 1) < len && pattern.charAt(i + 1) == '\'')
+ {
+ // we need to add ' to the buffer
+ buffer.append(ch);
+@@ -1692,7 +1692,7 @@ public class DecimalFormat extends Numbe
+ else if (ch == '\'')
+ {
+ // QUOTE
+- if (i < len && pattern.charAt(i + 1) == '\'')
++ if ((i + 1) < len && pattern.charAt(i + 1) == '\'')
+ {
+ // we need to add ' to the buffer
+ buffer.append(ch);
diff --git a/recipes/classpath/files/ecj_java_dir.patch b/recipes/classpath/files/ecj_java_dir.patch
new file mode 100644
index 0000000000..e310567516
--- /dev/null
+++ b/recipes/classpath/files/ecj_java_dir.patch
@@ -0,0 +1,34 @@
+Index: classpath-0.97.2/lib/gen-classlist.sh.in
+===================================================================
+--- classpath-0.97.2.orig/lib/gen-classlist.sh.in 2008-06-02 03:37:29.000000000 +0200
++++ classpath-0.97.2/lib/gen-classlist.sh.in 2008-08-01 00:00:58.055208770 +0200
+@@ -148,4 +148,7 @@
+ done
+ fi
+
++# hack for javac that uses -d and do not make the directories
++awk -F " " '{print $1}' classes.1 | uniq | awk -F " " '{system("mkdir -p " $0)}'
++
+ exit 0
+Index: classpath-0.97.2/tools/Makefile.am
+===================================================================
+--- classpath-0.97.2.orig/tools/Makefile.am 2008-06-02 04:01:47.000000000 +0200
++++ classpath-0.97.2/tools/Makefile.am 2008-08-01 00:11:18.531985989 +0200
+@@ -180,6 +180,8 @@
+ mkdir classes asm
+ ## Compile ASM separately as it is latin-1 encoded.
+ find $(srcdir)/external/asm -name '*.java' -print > asm.lst
++ awk -F "/" '{OFS=FS;gsub("/"$$2"/"$$3,"",$$0);gsub("/"$$NF,"",$$0); print $$0}' asm.lst | \
++ sort | uniq | awk -F " " '{system("mkdir -p asm/" $$0)}'
+ AC=`echo $(JCOMPILER) | sed -e 's/UTF-8/ISO-8859-1/g'`; \
+ $$AC -g -d asm @asm.lst
+ find $(srcdir)/gnu/classpath/tools \
+@@ -189,6 +191,8 @@
+ $(srcdir)/com/sun/tools/javah \
+ $(srcdir)/sun/rmi/rmic \
+ -name '*.java' -print > classes.lst
++ awk -F "/" '{OFS=FS;gsub("/"$$NF,"",$$0); print $$0}' classes.lst | \
++ sort | uniq | awk -F " " '{system("mkdir -p classes/" $$0)}'
+ $(JCOMPILER) -g -d classes @classes.lst
+ cat classes.lst asm.lst > all-classes.lst
+ ## Copy over tools resource files.
diff --git a/recipes/classpath/files/getopt-filelist.patch b/recipes/classpath/files/getopt-filelist.patch
new file mode 100644
index 0000000000..7b5e2740bf
--- /dev/null
+++ b/recipes/classpath/files/getopt-filelist.patch
@@ -0,0 +1,271 @@
+? tools/generated
+Index: tools/gnu/classpath/tools/common/ClasspathToolParser.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/common/ClasspathToolParser.java,v
+retrieving revision 1.1
+diff -u -r1.1 ClasspathToolParser.java
+--- tools/gnu/classpath/tools/common/ClasspathToolParser.java 22 Sep 2006 01:01:26 -0000 1.1
++++ tools/gnu/classpath/tools/common/ClasspathToolParser.java 3 Jun 2008 16:34:45 -0000
+@@ -38,9 +38,16 @@
+
+ package gnu.classpath.tools.common;
+
++import java.io.BufferedReader;
++import java.io.IOException;
++import java.io.FileNotFoundException;
++import java.io.FileReader;
++import java.io.Reader;
+ import java.text.MessageFormat;
++import java.util.ArrayList;
+
+ import gnu.classpath.Configuration;
++import gnu.classpath.tools.getopt.FileArgumentCallback;
+ import gnu.classpath.tools.getopt.Option;
+ import gnu.classpath.tools.getopt.OptionException;
+ import gnu.classpath.tools.getopt.Parser;
+@@ -84,4 +91,137 @@
+ }
+ });
+ }
++
++ public void parse(String[] inArgs, FileArgumentCallback files,
++ boolean handleFileLists)
++ {
++ FileArgumentCallback cb;
++
++ if (handleFileLists)
++ cb = new AtFileArgumentCallback(files);
++ else
++ cb = files;
++
++ parse(inArgs, cb);
++ }
++
++ public String[] parse(String[] inArgs, boolean handleFileLists)
++ {
++ final ArrayList fileResult = new ArrayList();
++
++ final FileArgumentCallback cb = new FileArgumentCallback()
++ {
++ public void notifyFile(String fileArgument)
++ {
++ fileResult.add(fileArgument);
++ }
++ };
++
++ if (handleFileLists)
++ parse(inArgs, new AtFileArgumentCallback(cb));
++ else
++ parse(inArgs, cb);
++
++ return (String[]) fileResult.toArray(new String[0]);
++ }
++
++
++ /** Simple function that takes the given {@link Reader}, treats it like
++ * a textfile and reads all the whitespace separated entries from it
++ * and adds them to the @{link FileArgumentCallback} instance.
++ */
++ public void parseFileList(Reader reader, FileArgumentCallback cb)
++ throws OptionException
++ {
++ BufferedReader breader = new BufferedReader(reader);
++ String line = null;
++
++ try
++ {
++ while ((line = breader.readLine()) != null)
++ parseLine(line, cb);
++
++ reader.close();
++ }
++ catch (IOException ioe)
++ {
++ System.err.println(programName + ": IO error while reading from inputstream");
++ System.exit(1);
++ }
++
++ }
++
++ /** Parses whitespace separated file entries.
++ *
++ * Note: This is not coping with whitespace in files or quoting.
++ */
++ private void parseLine(String line, FileArgumentCallback cb)
++ throws IOException, OptionException
++ {
++ final int length = line.length();
++ int start = 0;
++ int end = 0;
++
++ // While not reached end of line ...
++ while (start < length)
++ {
++ // Search for first non-whitespace character for the start of a word.
++ while (Character.isWhitespace(line.codePointAt(start)))
++ {
++ start++;
++
++ if (start == length)
++ return;
++ }
++
++ end = start + 1;
++
++ // Search for first whitespace character for the end of a word.
++ while (end < length && !Character.isWhitespace(line.codePointAt(end)))
++ end++;
++
++ cb.notifyFile(line.substring(start, end));
++
++ start = end + 1;
++ }
++ }
++
++ /** Implementation of {@link FileArgumentCallback} that handles
++ * file arguments in {@link #notifyFile} starting with a <code>@</code>
++ * through {@link ClasspathToolParser#parseFileList}.
++ */
++ class AtFileArgumentCallback extends FileArgumentCallback
++ {
++ FileArgumentCallback cb;
++
++ AtFileArgumentCallback(FileArgumentCallback cb)
++ {
++ this.cb = cb;
++ }
++
++ public void notifyFile(String fileArgument)
++ throws OptionException
++ {
++ if (fileArgument.codePointAt(0) == '@')
++ {
++ FileReader fr = null;
++
++ try
++ {
++ fr = new FileReader(fileArgument.substring(1));
++ }
++ catch (FileNotFoundException fnfe)
++ {
++ System.err.println(programName + ": file not found " + fileArgument.substring(1));
++ System.exit(1);
++ }
++
++ ClasspathToolParser.this.parseFileList(fr, cb);
++ }
++ else
++ cb.notifyFile(fileArgument);
++ }
++
++ }
++
+ }
+Index: tools/gnu/classpath/tools/getopt/Parser.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/getopt/Parser.java,v
+retrieving revision 1.10
+diff -u -r1.10 Parser.java
+--- tools/gnu/classpath/tools/getopt/Parser.java 20 Mar 2008 18:04:44 -0000 1.10
++++ tools/gnu/classpath/tools/getopt/Parser.java 3 Jun 2008 16:34:45 -0000
+@@ -58,7 +58,7 @@
+ /** The maximum right column position. */
+ public static final int MAX_LINE_LENGTH = 80;
+
+- private String programName;
++ protected String programName;
+
+ private String headerText;
+
+Index: tools/gnu/classpath/tools/jar/Main.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/jar/Main.java,v
+retrieving revision 1.11
+diff -u -r1.11 Main.java
+--- tools/gnu/classpath/tools/jar/Main.java 3 Jun 2008 14:02:13 -0000 1.11
++++ tools/gnu/classpath/tools/jar/Main.java 3 Jun 2008 16:34:45 -0000
+@@ -172,9 +172,9 @@
+ }
+ }
+
+- private Parser initializeParser()
++ private ClasspathToolParser initializeParser()
+ {
+- Parser p = new JarParser("jar"); //$NON-NLS-1$
++ ClasspathToolParser p = new JarParser("jar"); //$NON-NLS-1$
+ p.setHeader(Messages.getString("Main.Usage")); //$NON-NLS-1$
+
+ OptionGroup grp = new OptionGroup(Messages.getString("Main.OpMode")); //$NON-NLS-1$
+@@ -265,11 +265,11 @@
+ private void run(String[] args)
+ throws InstantiationException, IllegalAccessException, IOException
+ {
+- Parser p = initializeParser();
++ ClasspathToolParser p = initializeParser();
+ // Special hack to emulate old tar-style commands.
+ if (args.length > 0 && args[0].charAt(0) != '-')
+ args[0] = '-' + args[0];
+- p.parse(args, new HandleFile());
++ p.parse(args, new HandleFile(), true);
+ if (readNamesFromStdin)
+ readNames();
+ Action t = (Action) operationMode.newInstance();
+Index: tools/gnu/classpath/tools/javah/GcjhMain.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/javah/GcjhMain.java,v
+retrieving revision 1.1
+diff -u -r1.1 GcjhMain.java
+--- tools/gnu/classpath/tools/javah/GcjhMain.java 6 Mar 2007 18:52:34 -0000 1.1
++++ tools/gnu/classpath/tools/javah/GcjhMain.java 3 Jun 2008 16:34:46 -0000
+@@ -38,10 +38,11 @@
+
+ package gnu.classpath.tools.javah;
+
++import gnu.classpath.tools.common.ClasspathToolParser;
++
+ import gnu.classpath.tools.getopt.Option;
+ import gnu.classpath.tools.getopt.OptionException;
+ import gnu.classpath.tools.getopt.OptionGroup;
+-import gnu.classpath.tools.getopt.Parser;
+
+ import java.io.IOException;
+ import java.util.ArrayList;
+@@ -60,9 +61,9 @@
+ return "gcjh";
+ }
+
+- protected Parser getParser()
++ protected ClasspathToolParser getParser()
+ {
+- Parser result = super.getParser();
++ ClasspathToolParser result = super.getParser();
+
+ result.setHeader("usage: gcjh [OPTION]... CLASS...");
+
+Index: tools/gnu/classpath/tools/javah/Main.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/javah/Main.java,v
+retrieving revision 1.10
+diff -u -r1.10 Main.java
+--- tools/gnu/classpath/tools/javah/Main.java 31 Jul 2007 16:15:53 -0000 1.10
++++ tools/gnu/classpath/tools/javah/Main.java 3 Jun 2008 16:34:46 -0000
+@@ -188,7 +188,7 @@
+ return "javah";
+ }
+
+- protected Parser getParser()
++ protected ClasspathToolParser getParser()
+ {
+ ClasspathToolParser result = new ClasspathToolParser(getName(), true);
+ result.setHeader("usage: javah [OPTIONS] CLASS...");
+@@ -339,8 +339,8 @@
+
+ protected void run(String[] args) throws IOException
+ {
+- Parser p = getParser();
+- String[] classNames = p.parse(args);
++ ClasspathToolParser p = getParser();
++ String[] classNames = p.parse(args, true);
+ postParse(classNames);
+ loader = classpath.getLoader();
+
diff --git a/recipes/classpath/files/gjar-prefix-patch.diff b/recipes/classpath/files/gjar-prefix-patch.diff
new file mode 100644
index 0000000000..64b262cb41
--- /dev/null
+++ b/recipes/classpath/files/gjar-prefix-patch.diff
@@ -0,0 +1,40 @@
+Index: tools/gnu/classpath/tools/jar/Entry.java
+===================================================================
+RCS file: /sources/classpath/classpath/tools/gnu/classpath/tools/jar/Entry.java,v
+retrieving revision 1.1
+diff -u -r1.1 Entry.java
+--- tools/gnu/classpath/tools/jar/Entry.java 8 May 2006 18:38:20 -0000 1.1
++++ tools/gnu/classpath/tools/jar/Entry.java 10 Dec 2007 22:20:05 -0000
+@@ -1,5 +1,5 @@
+ /* Entry.java - represent a single file to write to a jar
+- Copyright (C) 2006 Free Software Foundation, Inc.
++ Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+@@ -49,12 +49,22 @@
+ public Entry(File file, String name)
+ {
+ this.file = file;
+- this.name = name;
++
++ /* Removes any './' prefixes automatically. Those caused trouble
++ * in (boot) classpath use-cases. See #32516.
++ */
++ int start = 0;
++ while (name.length() > start + 2
++ && name.codePointAt(start) == '.'
++ && name.codePointAt(start + 1) == File.separatorChar)
++ start += 2;
++
++ this.name = name.substring(start);
+ }
+
+ public Entry(File file)
+ {
+- this.file = file;
+- this.name = file.toString();
++ this(file, file.toString());
+ }
++
+ }
diff --git a/recipes/classpath/files/javanet-local.patch b/recipes/classpath/files/javanet-local.patch
new file mode 100644
index 0000000000..b8d1584e7c
--- /dev/null
+++ b/recipes/classpath/files/javanet-local.patch
@@ -0,0 +1,37 @@
+Index: native/jni/java-net/local.c
+===================================================================
+RCS file: /sources/classpath/classpath/native/jni/java-net/local.c,v
+retrieving revision 1.4
+diff -u -r1.4 local.c
+--- native/jni/java-net/local.c 17 Apr 2007 21:46:27 -0000 1.4
++++ native/jni/java-net/local.c 27 Jun 2008 13:14:40 -0000
+@@ -73,27 +73,18 @@
+ return socket (PF_UNIX, stream ? SOCK_STREAM : SOCK_DGRAM, 0);
+ }
+
+-static int gcc_sucks = 0;
+-
+ int
+ local_bind (int fd, const char *addr)
+ {
+ struct sockaddr_un saddr;
+
+- /* For some reason, GCC 4.0.1 on Darwin/x86 MODIFIES the `addr'
+- pointer in the CALLER's STACK FRAME after calling this function,
+- but if we add this statement below, it doesn't! */
+- if (gcc_sucks)
+- fprintf (stderr, "bind %p\n", addr);
+-
+- if (strlen (addr) > sizeof (saddr.sun_path))
++ if (strlen (addr) >= sizeof (saddr.sun_path))
+ {
+ errno = ENAMETOOLONG;
+ return -1;
+ }
+
+- strncpy (saddr.sun_path, addr, sizeof (saddr.sun_path));
+- saddr.sun_path[sizeof (saddr.sun_path)] = '\0';
++ strcpy (saddr.sun_path, addr);
+ saddr.sun_family = AF_LOCAL;
+
+ return bind (fd, (struct sockaddr *) &saddr, SUN_LEN (&saddr));
diff --git a/recipes/classpath/files/miscompilation-0.93.patch b/recipes/classpath/files/miscompilation-0.93.patch
new file mode 100644
index 0000000000..99db6f3003
--- /dev/null
+++ b/recipes/classpath/files/miscompilation-0.93.patch
@@ -0,0 +1,13 @@
+Index: classpath-0.93/native/jni/java-io/java_io_VMFile.c
+===================================================================
+--- classpath-0.93.orig/native/jni/java-io/java_io_VMFile.c 2006-09-23 07:17:45.000000000 +0200
++++ classpath-0.93/native/jni/java-io/java_io_VMFile.c 2008-11-14 13:41:27.000000000 +0100
+@@ -239,7 +239,7 @@
+ {
+ #ifndef WITHOUT_FILESYSTEM
+ const char *filename;
+- int result;
++ volatile int result;
+
+ /* Don't use the JCL convert function because it throws an exception
+ on failure */
diff --git a/recipes/classpath/files/miscompilation.patch b/recipes/classpath/files/miscompilation.patch
new file mode 100644
index 0000000000..c61b214f44
--- /dev/null
+++ b/recipes/classpath/files/miscompilation.patch
@@ -0,0 +1,13 @@
+Index: classpath-0.97.2/native/jni/java-io/java_io_VMFile.c
+===================================================================
+--- classpath-0.97.2.orig/native/jni/java-io/java_io_VMFile.c 2008-10-10 15:24:54.000000000 +0200
++++ classpath-0.97.2/native/jni/java-io/java_io_VMFile.c 2008-10-10 15:25:36.000000000 +0200
+@@ -439,7 +439,7 @@
+ {
+ #ifndef WITHOUT_FILESYSTEM
+ const char *filename;
+- int result;
++ volatile int result;
+
+ /* Don't use the JCL convert function because it throws an exception
+ on failure */
diff --git a/recipes/classpath/files/netif_16.patch b/recipes/classpath/files/netif_16.patch
new file mode 100644
index 0000000000..f9dbe6c4cd
--- /dev/null
+++ b/recipes/classpath/files/netif_16.patch
@@ -0,0 +1,269 @@
+Index: java/net/NetworkInterface.java
+===================================================================
+--- java/net/NetworkInterface.java.orig 2006-12-18 22:37:39.000000000 +0100
++++ java/net/NetworkInterface.java 2008-06-06 14:00:44.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* NetworkInterface.java --
+- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
++ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+@@ -265,4 +265,50 @@
+
+ return result.toString();
+ }
++
++ /**
++ * Determines whether this interface is ready to transfer data.
++ *
++ * @return whether the interface is up
++ */
++ public boolean isUp()
++ throws SocketException
++ {
++ return VMNetworkInterface.isUp(netif.name);
++ }
++
++ /**
++ * Determines whether this interface does point to point
++ * transmission.
++ *
++ * @return whether the interface does point to point transmission
++ */
++ public boolean isPointToPoint()
++ throws SocketException
++ {
++ return VMNetworkInterface.isPointToPoint(netif.name);
++ }
++
++ /**
++ * Determines whether this interface is the loopback interface.
++ *
++ * @return whether the interface is the loopback interface
++ */
++ public boolean isLoopback()
++ throws SocketException
++ {
++ return VMNetworkInterface.isLoopback(netif.name);
++ }
++
++ /**
++ * Determines whether this interface supports multicast transmission.
++ *
++ * @return whether the interface supports multicast transmission.
++ */
++ public boolean supportsMulticast()
++ throws SocketException
++ {
++ return VMNetworkInterface.supportsMulticast(netif.name);
++ }
++
+ }
+Index: vm/reference/java/net/VMNetworkInterface.java
+===================================================================
+--- vm/reference/java/net/VMNetworkInterface.java.orig 2006-12-18 22:37:39.000000000 +0100
++++ vm/reference/java/net/VMNetworkInterface.java 2008-06-06 14:00:44.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* VMNetworkInterface.java --
+- Copyright (C) 2005 Free Software Foundation, Inc.
++ Copyright (C) 2005, 2008 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+@@ -119,4 +119,13 @@
+ else
+ throw new SocketException("invalid interface address");
+ }
++
++ static native boolean isUp(String name) throws SocketException;
++
++ static native boolean isLoopback(String name) throws SocketException;
++
++ static native boolean isPointToPoint(String name) throws SocketException;
++
++ static native boolean supportsMulticast(String name) throws SocketException;
++
+ }
+Index: native/jni/java-net/java_net_VMNetworkInterface.c
+===================================================================
+--- native/jni/java-net/java_net_VMNetworkInterface.c.orig 2007-04-05 14:34:19.000000000 +0200
++++ native/jni/java-net/java_net_VMNetworkInterface.c 2008-06-06 14:00:44.000000000 +0200
+@@ -1,5 +1,5 @@
+ /* VMNetworkInterface.c - Native methods for NetworkInterface class
+- Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
++ Copyright (C) 2003, 2005, 2006, 2008 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+@@ -50,11 +50,18 @@
+ #include <stdio.h>
+ #include <string.h>
+
++#include <net/if.h>
++#include <sys/ioctl.h>
++
+ #include <jni.h>
+ #include <jcl.h>
+
++#include <cpnative.h>
++#include <cpnet.h>
++
+ #include "java_net_VMNetworkInterface.h"
+
++int iff_flags(JNIEnv *, jstring, jint *);
+
+ static jmethodID java_net_VMNetworkInterface_init;
+ static jmethodID java_net_VMNetworkInterface_addAddress;
+@@ -251,4 +258,136 @@
+ #endif /* HAVE_IFADDRS_H && HAVE_GETIFADDRS */
+ }
+
++int iff_flags(JNIEnv *env, jstring name, jint *flags)
++{
++ struct ifreq iff;
++ const char *iff_name;
++ jint socket;
++ int error, retval;
++
++ if ((error = cpnet_openSocketDatagram(env, &socket, AF_INET)))
++ {
++ return error;
++ }
++
++ iff_name = JCL_jstring_to_cstring(env, name);
++ memset(&iff, 0, sizeof(iff));
++ strcpy(iff.ifr_name, iff_name);
++
++ if (ioctl(socket, SIOCGIFFLAGS, &iff) >= 0)
++ {
++ *flags = (jint) iff.ifr_flags;
++
++ retval = 0;
++ }
++ else
++ {
++ retval = errno;
++ }
++
++ cpnet_close(env, socket);
++
++ JCL_free_cstring(env, name, iff_name);
++
++ return retval;
++}
++
++JNIEXPORT jboolean JNICALL
++Java_java_net_VMNetworkInterface_isUp (JNIEnv *env, jclass class UNUSED,
++ jstring name)
++{
++ jint flags;
++ int error;
++ jboolean retval;
++
++ if ((error = iff_flags(env, name, &flags)))
++ {
++ JCL_ThrowException(env, "java/net/SocketException",
++ cpnative_getErrorString(error));
++
++ retval = JNI_FALSE;
++ }
++ else
++ {
++ retval = (flags & (IFF_UP | IFF_RUNNING))
++ ? JNI_TRUE
++ : JNI_FALSE;
++ }
++
++ return retval;
++}
++
++JNIEXPORT jboolean JNICALL
++Java_java_net_VMNetworkInterface_isPointToPoint (JNIEnv *env,
++ jclass class UNUSED,
++ jstring name)
++{
++ jint flags;
++ int error;
++ jboolean retval;
++
++ if ((error = iff_flags(env, name, &flags)))
++ {
++ JCL_ThrowException(env, "java/net/SocketException",
++ cpnative_getErrorString(error));
++
++ retval = JNI_FALSE;
++ }
++ else
++ {
++ retval = (flags & IFF_POINTOPOINT) ? JNI_TRUE
++ : JNI_FALSE;
++ }
++
++ return retval;
++}
++
++JNIEXPORT jboolean JNICALL
++Java_java_net_VMNetworkInterface_isLoopback (JNIEnv *env,
++ jclass class UNUSED,
++ jstring name)
++{
++ jint flags;
++ int error;
++ jboolean retval;
++
++ if ((error = iff_flags(env, name, &flags)))
++ {
++ JCL_ThrowException(env, "java/net/SocketException",
++ cpnative_getErrorString(error));
++
++ retval = JNI_FALSE;
++ }
++ else
++ {
++ retval = (flags & IFF_LOOPBACK) ? JNI_TRUE : JNI_FALSE;
++ }
++
++ return retval;
++}
++
++JNIEXPORT jboolean JNICALL
++Java_java_net_VMNetworkInterface_supportsMulticast (JNIEnv *env,
++ jclass class UNUSED,
++ jstring name)
++{
++ jint flags;
++ int error;
++ jboolean retval;
++
++ if ((error = iff_flags(env, name, &flags)))
++ {
++ JCL_ThrowException(env, "java/net/SocketException",
++ cpnative_getErrorString(error));
++
++ retval = JNI_FALSE;
++ }
++ else
++ {
++ retval = (flags & IFF_MULTICAST) ? JNI_TRUE : JNI_FALSE;
++ }
++
++ return retval;
++}
++
+ /* end of file */
+Index: include/java_net_VMNetworkInterface.h
+===================================================================
+--- include/java_net_VMNetworkInterface.h.orig 2008-06-06 14:21:27.000000000 +0200
++++ include/java_net_VMNetworkInterface.h 2008-06-06 14:22:12.000000000 +0200
+@@ -12,6 +12,10 @@
+
+ JNIEXPORT void JNICALL Java_java_net_VMNetworkInterface_initIds (JNIEnv *env, jclass);
+ JNIEXPORT jobjectArray JNICALL Java_java_net_VMNetworkInterface_getVMInterfaces (JNIEnv *env, jclass);
++JNIEXPORT jboolean JNICALL Java_java_net_VMNetworkInterface_isUp (JNIEnv *env, jclass, jstring);
++JNIEXPORT jboolean JNICALL Java_java_net_VMNetworkInterface_isLoopback (JNIEnv *env, jclass, jstring);
++JNIEXPORT jboolean JNICALL Java_java_net_VMNetworkInterface_isPointToPoint (JNIEnv *env, jclass, jstring);
++JNIEXPORT jboolean JNICALL Java_java_net_VMNetworkInterface_supportsMulticast (JNIEnv *env, jclass, jstring);
+
+ #ifdef __cplusplus
+ }
diff --git a/recipes/classpath/files/sun-security-getproperty_0.96.1.patch b/recipes/