diff options
Diffstat (limited to 'packages/classpath/files/getopt-filelist.patch')
-rw-r--r-- | packages/classpath/files/getopt-filelist.patch | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/packages/classpath/files/getopt-filelist.patch b/packages/classpath/files/getopt-filelist.patch new file mode 100644 index 0000000000..7b5e2740bf --- /dev/null +++ b/packages/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(); + |