java/lang/reflect/Member.java \
java/lang/reflect/Method.java \
java/lang/reflect/Modifier.java \
+java/lang/reflect/ReflectPermission.java \
java/io/BlockDataException.java \
java/io/BufferedInputStream.java \
java/io/BufferedOutputStream.java \
java/io/Externalizable.java \
java/io/File.java \
java/io/FileDescriptor.java \
+java/io/FileFilter.java \
java/io/FileInputStream.java \
java/io/FileNotFoundException.java \
java/io/FileOutputStream.java \
+java/io/FilePermission.java \
java/io/FileReader.java \
java/io/FileWriter.java \
java/io/FilenameFilter.java \
.deps/java/io/DataOutput.P .deps/java/io/DataOutputStream.P \
.deps/java/io/EOFException.P .deps/java/io/Externalizable.P \
.deps/java/io/File.P .deps/java/io/FileDescriptor.P \
-.deps/java/io/FileInputStream.P .deps/java/io/FileNotFoundException.P \
-.deps/java/io/FileOutputStream.P .deps/java/io/FileReader.P \
+.deps/java/io/FileFilter.P .deps/java/io/FileInputStream.P \
+.deps/java/io/FileNotFoundException.P .deps/java/io/FileOutputStream.P \
+.deps/java/io/FilePermission.P .deps/java/io/FileReader.P \
.deps/java/io/FileWriter.P .deps/java/io/FilenameFilter.P \
.deps/java/io/FilterInputStream.P .deps/java/io/FilterOutputStream.P \
.deps/java/io/FilterReader.P .deps/java/io/FilterWriter.P \
.deps/java/lang/reflect/Field.P \
.deps/java/lang/reflect/InvocationTargetException.P \
.deps/java/lang/reflect/Member.P .deps/java/lang/reflect/Method.P \
-.deps/java/lang/reflect/Modifier.P .deps/java/lang/reflect/natArray.P \
+.deps/java/lang/reflect/Modifier.P \
+.deps/java/lang/reflect/ReflectPermission.P \
+.deps/java/lang/reflect/natArray.P \
.deps/java/lang/reflect/natConstructor.P \
.deps/java/lang/reflect/natField.P .deps/java/lang/reflect/natMethod.P \
.deps/java/lang/s_atan.P .deps/java/lang/s_ceil.P \
--- /dev/null
+/* FileFilter.java -- Filter a list of pathnames
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.io;
+
+/**
+ * This interface has one method which is used for filtering pathnames
+ * returned in a pathname listing. It is currently used by the
+ * <code>File.listFiles()</code> method.
+ * <p>
+ * The method in this interface determines if a particular pathname should
+ * or should not be included in the pathname listing.
+ *
+ * @version 0.0
+ *
+ * @author Aaron M. Renn (arenn@urbanophile.com)
+ */
+public interface FileFilter
+{
+
+/**
+ * This method determines whether or not a given pathname should be included
+ * in a pathname listing.
+ *
+ * @param pathname The pathname to test
+ *
+ * @return <code>true</code> if the path should be included in the list, <code>false</code> otherwise.
+ */
+public abstract boolean
+accept(File pathname);
+
+} // interface FileFilter
+
--- /dev/null
+/* java.lang.FilePermission
+ Copyright (C) 1998 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+As a special exception, if you link this library with other files to
+produce an executable, this library does not by itself cause the
+resulting executable to be covered by the GNU General Public License.
+This exception does not however invalidate any other reasons why the
+executable file might be covered by the GNU General Public License. */
+
+
+package java.io;
+
+import java.security.*;
+
+
+public class FilePermission extends Permission implements Serializable {
+ private static final String CURRENT_DIRECTORY = System.getProperty("user.dir");
+ private boolean usingPerms = false;
+ private boolean readPerm = false;
+ private boolean writePerm = false;
+ private boolean executePerm = false;
+ private boolean deletePerm = false;
+ private String actionsString;
+
+ private void cachePerms() {
+ // While race conditions could occur, they don't matter at all.
+
+ String action;
+ int i = actionsString.indexOf(',');
+ int startI = 0;
+ while(i != -1) {
+ action = actionsString.substring(startI,i);
+ if(action.equals("read"))
+ readPerm = true;
+ else if(action.equals("write"))
+ writePerm = true;
+ else if(action.equals("execute"))
+ executePerm = true;
+ else if(action.equals("delete"))
+ deletePerm = true;
+
+ startI = i+1;
+ i = actionsString.indexOf(',',startI);
+ }
+
+ action = actionsString.substring(startI);
+ if(action.equals("read"))
+ readPerm = true;
+ else if(action.equals("write"))
+ writePerm = true;
+ else if(action.equals("execute"))
+ executePerm = true;
+ else if(action.equals("delete"))
+ deletePerm = true;
+ }
+
+ /** Create a new FilePermission.
+ ** @param pathExpression an expression specifying the paths this
+ ** permission represents.
+ ** @param actionsString a comma-separated list of the actions this
+ ** permission represents.
+ ** @XXX what to do when the file string is malformed?
+ **/
+ public FilePermission(String pathExpression, String actionsString)
+ {
+ super(pathExpression);
+ this.actionsString = actionsString;
+ }
+
+ /** Get the actions this FilePermission supports.
+ ** @return the String representing the actions this FilePermission supports.
+ **/
+ public String getActions() {
+ return actionsString;
+ }
+
+ /** Get the hash code for this Object.<P>
+ ** FilePermission's hash code is calculated as the exclusive or of the target
+ ** String's hash code and the action String's hash code.
+ ** @specnote Sun did not specify how to calculate the hash code; I made this up.
+ ** @return the hash code for this Object.
+ **/
+ public int hashCode() {
+ return getName().hashCode() ^ actionsString.hashCode();
+ }
+
+ /** Check two FilePermissions for semantic equality.
+ ** Two FilePermissions are exactly equivalent if they have identical path
+ ** expressions and have exactly the same access permissions.
+ ** @param o the Object to compare to.
+ ** @return whether the Objects are semantically equivalent.
+ **/
+ public boolean equals(Object o) {
+ if(!(o instanceof FilePermission))
+ return false;
+ FilePermission p = (FilePermission)o;
+ if(!usingPerms)
+ cachePerms();
+ if(!p.usingPerms)
+ p.cachePerms();
+
+ String f1 = getName();
+ String f2 = p.getName();
+
+ /* Compare names, taking into account if they refer to a
+ * directory and one has a separator and the other does not.
+ */
+ if(f1.charAt(f1.length()) == File.separatorChar) {
+ if(f2.charAt(f2.length()) == File.separatorChar) {
+ if(!f2.equals(f1))
+ return false;
+ } else {
+ if(!f2.equals(f1.substring(0,f1.length()-1)))
+ return false;
+ }
+ } else {
+ if(f2.charAt(f2.length()) == File.separatorChar) {
+ if(!f1.equals(f2.substring(0,f2.length()-1)))
+ return false;
+ } else {
+ if(!f1.equals(f2))
+ return false;
+ }
+ }
+ return readPerm == p.readPerm && writePerm == p.writePerm && executePerm == p.executePerm && deletePerm == p.deletePerm;
+ }
+
+ /** Check to see if this permission implies another.
+ ** Permission A implies permission B if these things are all true:
+ ** <OL>
+ ** <LI>A and B are both FilePermissions.</LI>
+ ** <LI>All possible files in B are included in A (possibly more are in A).</LI>
+ ** <LI>All actions B supports, A also supports.</LI>
+ ** </OL>
+ ** @param p the Permission to compare against.
+ ** @return whether this Permission implies p
+ **/
+ public boolean implies(Permission p) {
+ FilePermission fp;
+ if(!(p instanceof FilePermission))
+ return false;
+ fp = (FilePermission)p;
+
+ String f1 = getName();
+ String f2 = fp.getName();
+ if(f1.charAt(0) != File.separatorChar) {
+ f1 = CURRENT_DIRECTORY + f1;
+ }
+ if(f2.charAt(0) != File.separatorChar) {
+ f2 = CURRENT_DIRECTORY + f2;
+ }
+
+ String sub1, sub2a, sub2b;
+ switch(f1.charAt(f1.length() - 1)) {
+ case '*':
+ sub1 = f1.substring(0,f1.length() - 1); // chop off "*"
+ if(f2.length() <= sub1.length()) {
+ /* If it's smaller, there is no way it could be part of this directory.
+ * If it's the same (or length - 1), it could be the same directory but
+ * specifies access to the directory rather than the files in it.
+ */
+ return false;
+ } else if(f2.charAt(sub1.length() - 1) == File.separatorChar) {
+ /* Make sure the part before the "/" is the same */
+ if(!f2.substring(0,sub1.length()).equals(sub1))
+ return false;
+ /* Make sure there are no subdirectories specified underneath this one */
+ String sub2 = f2.substring(sub1.length()+1);
+ if(f2.substring(sub1.length()+1).indexOf(File.separatorChar) != -1)
+ return false;
+ } else {
+ /* Obviously not equal: f2 is either not a directory or is not
+ * the same directory (its name continues further than we want)
+ */
+ return false;
+ }
+ break;
+ case '-':
+ sub1 = f1.substring(0,f1.length() - 2); // chop off "/-"
+ if(f2.length() < sub1.length()) {
+ /* If it's smaller, there is no way it could be part of this directory. */
+ return false;
+ } else if(f2.length() > sub1.length() && f2.charAt(sub1.length()) != File.separatorChar) {
+ return false;
+ } else if(!f2.substring(0,sub1.length()).equals(sub1))
+ return false;
+ break;
+/* Looks redundant with default case and won't compile anyway - arenn
+ case File.separatorChar:
+ if(f2.charAt(f2.length()) == File.separatorChar) {
+ if(!f2.equals(f1))
+ return false;
+ } else {
+ if(!f2.equals(f1.substring(0,f1.length()-1)))
+ return false;
+ }
+ break;
+*/
+ default:
+ if(f2.charAt(f2.length()) == File.separatorChar) {
+ if(!f1.equals(f2.substring(0,f2.length()-1)))
+ return false;
+ } else {
+ if(!f1.equals(f2))
+ return false;
+ }
+ break;
+ }
+
+ if(!usingPerms)
+ cachePerms();
+ if(!fp.usingPerms)
+ fp.cachePerms();
+
+ if(readPerm && !fp.readPerm)
+ return false;
+ if(writePerm && !fp.writePerm)
+ return false;
+ if(executePerm && !fp.executePerm)
+ return false;
+ if(deletePerm && !fp.deletePerm)
+ return false;
+
+ return true;
+ }
+}