home *** CD-ROM | disk | FTP | other *** search
- package java.io;
-
- import java.security.AccessController;
- import sun.security.action.GetPropertyAction;
-
- class Win32FileSystem extends FileSystem {
- private final char slash = ((String)AccessController.doPrivileged(new GetPropertyAction("file.separator"))).charAt(0);
- private final char altSlash;
- private final char semicolon = ((String)AccessController.doPrivileged(new GetPropertyAction("path.separator"))).charAt(0);
- private static String[] driveDirCache = new String[26];
-
- public Win32FileSystem() {
- this.altSlash = (char)(this.slash == '\\' ? 47 : 92);
- }
-
- private boolean isSlash(char var1) {
- return var1 == '\\' || var1 == '/';
- }
-
- private boolean isLetter(char var1) {
- return var1 >= 'a' && var1 <= 'z' || var1 >= 'A' && var1 <= 'Z';
- }
-
- private String slashify(String var1) {
- return var1.length() > 0 && var1.charAt(0) != this.slash ? this.slash + var1 : var1;
- }
-
- public char getSeparator() {
- return this.slash;
- }
-
- public char getPathSeparator() {
- return this.semicolon;
- }
-
- private int normalizePrefix(String var1, int var2, StringBuffer var3) {
- int var4;
- for(var4 = 0; var4 < var2 && this.isSlash(var1.charAt(var4)); ++var4) {
- }
-
- char var5;
- if (var2 - var4 >= 2 && this.isLetter(var5 = var1.charAt(var4)) && var1.charAt(var4 + 1) == ':') {
- var3.append(var5);
- var3.append(':');
- var4 += 2;
- } else {
- var4 = 0;
- if (var2 >= 2 && this.isSlash(var1.charAt(0)) && this.isSlash(var1.charAt(1))) {
- var4 = 1;
- var3.append(this.slash);
- }
- }
-
- return var4;
- }
-
- private String normalize(String var1, int var2, int var3) {
- if (var2 == 0) {
- return var1;
- } else {
- if (var3 < 3) {
- var3 = 0;
- }
-
- char var5 = this.slash;
- StringBuffer var6 = new StringBuffer(var2);
- int var4;
- if (var3 == 0) {
- var4 = this.normalizePrefix(var1, var2, var6);
- } else {
- var4 = var3;
- var6.append(var1.substring(0, var3));
- }
-
- while(var4 < var2) {
- char var7 = var1.charAt(var4++);
- if (!this.isSlash(var7)) {
- var6.append(var7);
- } else {
- while(var4 < var2 && this.isSlash(var1.charAt(var4))) {
- ++var4;
- }
-
- if (var4 == var2) {
- int var8 = var6.length();
- if (var8 == 2 && var6.charAt(1) == ':') {
- var6.append(var5);
- } else if (var8 == 0) {
- var6.append(var5);
- } else if (var8 == 1 && this.isSlash(var6.charAt(0))) {
- var6.append(var5);
- }
- break;
- }
-
- var6.append(var5);
- }
- }
-
- String var9 = var6.toString();
- return var9;
- }
- }
-
- public String normalize(String var1) {
- int var2 = var1.length();
- char var3 = this.slash;
- char var4 = this.altSlash;
- char var5 = 0;
-
- for(int var6 = 0; var6 < var2; ++var6) {
- char var7 = var1.charAt(var6);
- if (var7 == var4) {
- return this.normalize(var1, var2, var5 == var3 ? var6 - 1 : var6);
- }
-
- if (var7 == var3 && var5 == var3 && var6 > 1) {
- return this.normalize(var1, var2, var6 - 1);
- }
-
- if (var7 == ':' && var6 > 1) {
- return this.normalize(var1, var2, 0);
- }
-
- var5 = var7;
- }
-
- return var5 == var3 ? this.normalize(var1, var2, var2 - 1) : var1;
- }
-
- public int prefixLength(String var1) {
- char var2 = this.slash;
- int var3 = var1.length();
- if (var3 == 0) {
- return 0;
- } else {
- char var4 = var1.charAt(0);
- char var5 = var3 > 1 ? var1.charAt(1) : 0;
- if (var4 == var2) {
- return var5 == var2 ? 2 : 1;
- } else if (this.isLetter(var4) && var5 == ':') {
- return var3 > 2 && var1.charAt(2) == var2 ? 3 : 2;
- } else {
- return 0;
- }
- }
- }
-
- public String resolve(String var1, String var2) {
- char var3 = this.slash;
- int var4 = var1.length();
- if (var4 == 0) {
- return var2;
- } else {
- int var5 = var2.length();
- if (var5 == 0) {
- return var1;
- } else {
- String var6 = var2;
- if (var5 > 1 && var2.charAt(0) == var3) {
- if (var2.charAt(1) == var3) {
- var6 = var2.substring(2);
- } else {
- var6 = var2.substring(1);
- }
- }
-
- String var7 = var1;
- if (var1.charAt(var4 - 1) == var3) {
- var7 = var1.substring(0, var4 - 1);
- }
-
- return var7 + this.slashify(var6);
- }
- }
- }
-
- public String getDefaultParent() {
- return "" + this.slash;
- }
-
- public boolean isAbsolute(File var1) {
- int var2 = var1.getPrefixLength();
- return var2 == 2 && var1.getPath().charAt(0) == this.slash || var2 == 3;
- }
-
- private static native String getDriveDirectory(int var0);
-
- private static int driveIndex(char var0) {
- if (var0 >= 'a' && var0 <= 'z') {
- return var0 - 97;
- } else {
- return var0 >= 'A' && var0 <= 'Z' ? var0 - 65 : -1;
- }
- }
-
- private static String getDriveDirectory(char var0) {
- int var1 = driveIndex(var0);
- if (var1 < 0) {
- return null;
- } else {
- String var2 = driveDirCache[var1];
- if (var2 != null) {
- return var2;
- } else {
- var2 = getDriveDirectory(var1 + 1);
- driveDirCache[var1] = var2;
- return var2;
- }
- }
- }
-
- private String getUserPath() {
- return this.normalize(System.getProperty("user.dir"));
- }
-
- private String getDrive(String var1) {
- int var2 = this.prefixLength(var1);
- return var2 == 3 ? var1.substring(0, 2) : null;
- }
-
- public String resolve(File var1) {
- String var2 = var1.getPath();
- int var3 = var1.getPrefixLength();
- if (var3 == 2 && var2.charAt(0) == this.slash) {
- return var2;
- } else if (var3 == 3) {
- return var2;
- } else if (var3 == 0) {
- return this.getUserPath() + this.slashify(var2);
- } else if (var3 == 1) {
- String var13 = this.getUserPath();
- String var14 = this.getDrive(var13);
- return var14 != null ? var14 + var2 : var13 + var2;
- } else if (var3 == 2) {
- String var4 = this.getUserPath();
- String var5 = this.getDrive(var4);
- if (var5 != null && var2.startsWith(var5)) {
- return var4 + this.slashify(var2.substring(2));
- } else {
- char var6 = var2.charAt(0);
- String var7 = getDriveDirectory(var6);
- if (var7 != null) {
- String var9 = "" + var6 + ':' + var7 + this.slashify(var2.substring(2));
- SecurityManager var10 = System.getSecurityManager();
-
- try {
- if (var10 != null) {
- var10.checkRead(var9);
- }
-
- return var9;
- } catch (SecurityException var12) {
- throw new SecurityException("Cannot resolve path " + var2);
- }
- } else {
- return var6 + ":" + this.slashify(var2.substring(2));
- }
- }
- } else {
- throw new InternalError("Unresolvable path: " + var2);
- }
- }
-
- public native String canonicalize(String var1) throws IOException;
-
- public native int getBooleanAttributes(File var1);
-
- public native boolean checkAccess(File var1, boolean var2);
-
- public native long getLastModifiedTime(File var1);
-
- public native long getLength(File var1);
-
- public native boolean createFileExclusively(String var1) throws IOException;
-
- public native boolean delete(File var1);
-
- public synchronized native boolean deleteOnExit(File var1);
-
- public native String[] list(File var1);
-
- public native boolean createDirectory(File var1);
-
- public native boolean rename(File var1, File var2);
-
- public native boolean setLastModifiedTime(File var1, long var2);
-
- public native boolean setReadOnly(File var1);
-
- private boolean access(String var1) {
- try {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkRead(var1);
- }
-
- return true;
- } catch (SecurityException var3) {
- return false;
- }
- }
-
- private static native int listRoots0();
-
- public File[] listRoots() {
- int var1 = listRoots0();
- int var2 = 0;
-
- for(int var3 = 0; var3 < 26; ++var3) {
- if ((var1 >> var3 & 1) != 0) {
- if (!this.access((char)(65 + var3) + ":" + this.slash)) {
- var1 &= ~(1 << var3);
- } else {
- ++var2;
- }
- }
- }
-
- File[] var4 = new File[var2];
- int var5 = 0;
- char var6 = this.slash;
-
- for(int var7 = 0; var7 < 26; ++var7) {
- if ((var1 >> var7 & 1) != 0) {
- var4[var5++] = new File((char)(65 + var7) + ":" + var6);
- }
- }
-
- return var4;
- }
-
- public int compare(File var1, File var2) {
- return var1.getPath().compareToIgnoreCase(var2.getPath());
- }
-
- public int hashCode(File var1) {
- return var1.getPath().toLowerCase().hashCode() ^ 1234321;
- }
-
- private static native void initIDs();
-
- static {
- initIDs();
- }
- }
-