Copyright (c) 2005, 2016 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation Martin Oberhuber (Wind River) - [170317] add symbolic link support to API Martin Oberhuber (Wind River) - [183137] liblocalfile for solaris-sparc Martin Oberhuber (Wind River) - [184433] liblocalfile for Linux x86_64 Martin Oberhuber (Wind River) - [184534] get attributes from native lib
/******************************************************************************* * Copyright (c) 2005, 2016 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation * Martin Oberhuber (Wind River) - [170317] add symbolic link support to API * Martin Oberhuber (Wind River) - [183137] liblocalfile for solaris-sparc * Martin Oberhuber (Wind River) - [184433] liblocalfile for Linux x86_64 * Martin Oberhuber (Wind River) - [184534] get attributes from native lib *******************************************************************************/
package org.eclipse.core.internal.filesystem.local; import java.io.File; import java.net.URI; import org.eclipse.core.filesystem.*; import org.eclipse.core.filesystem.provider.FileSystem; import org.eclipse.core.runtime.IPath; import org.eclipse.osgi.service.environment.Constants;
File system provider for the "file" scheme. This file system provides access to the local file system that is available via java.io.File.
/** * File system provider for the "file" scheme. This file system provides access to * the local file system that is available via java.io.File. */
public class LocalFileSystem extends FileSystem {
Cached constant indicating if the current OS is Mac OSX
/** * Cached constant indicating if the current OS is Mac OSX */
static final boolean MACOSX = LocalFileSystem.getOS().equals(Constants.OS_MACOSX);
Whether the current file system is case sensitive
/** * Whether the current file system is case sensitive */
private static final boolean caseSensitive = MACOSX ? false : new java.io.File("a").compareTo(new java.io.File("A")) != 0; //$NON-NLS-1$ //$NON-NLS-2$
The attributes of this file system. The initial value of -1 is used to indicate that the attributes have not yet been computed.
/** * The attributes of this file system. The initial value of -1 is used * to indicate that the attributes have not yet been computed. */
private int attributes = -1;
The singleton instance of this file system.
/** * The singleton instance of this file system. */
private static IFileSystem instance;
Returns the instance of this file system
Returns:The instance of this file system.
/** * Returns the instance of this file system * * @return The instance of this file system. */
public static IFileSystem getInstance() { return instance; }
Returns the current OS. This is equivalent to Platform.getOS(), but is tolerant of the platform runtime not being present.
/** * Returns the current OS. This is equivalent to Platform.getOS(), but * is tolerant of the platform runtime not being present. */
static String getOS() { return System.getProperty("osgi.os", ""); //$NON-NLS-1$ //$NON-NLS-2$ }
Creates a new local file system.
/** * Creates a new local file system. */
public LocalFileSystem() { super(); instance = this; } @Override public int attributes() { if (attributes != -1) return attributes; attributes = 0; //try to query supported attributes from native lib impl int nativeAttributes = LocalFileNativesManager.getSupportedAttributes(); if (nativeAttributes >= 0) { attributes = nativeAttributes; return attributes; } //fallback for older lib: compute attributes as known before //all known platforms with native implementation support the read only flag attributes |= EFS.ATTRIBUTE_READ_ONLY; // this must be kept in sync with functionality of previous libs not implementing nativeAttributes method String os = getOS(); String arch = System.getProperty("osgi.arch", ""); //$NON-NLS-1$ //$NON-NLS-2$ if (os.equals(Constants.OS_WIN32)) attributes |= EFS.ATTRIBUTE_ARCHIVE | EFS.ATTRIBUTE_HIDDEN; else if (os.equals(Constants.OS_LINUX) || (os.equals(Constants.OS_SOLARIS) && arch.equals(Constants.ARCH_SPARC))) attributes |= EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_SYMLINK | EFS.ATTRIBUTE_LINK_TARGET; else if (os.equals(Constants.OS_MACOSX) || os.equals(Constants.OS_HPUX) || os.equals(Constants.OS_QNX)) attributes |= EFS.ATTRIBUTE_EXECUTABLE; return attributes; } @Override public boolean canDelete() { return true; } @Override public boolean canWrite() { return true; } @Override public IFileStore fromLocalFile(File file) { return new LocalFile(file); } @Override public IFileStore getStore(IPath path) { return new LocalFile(path.toFile()); } @Override public IFileStore getStore(URI uri) { return new LocalFile(new File(uri.getSchemeSpecificPart())); } @Override public boolean isCaseSensitive() { return caseSensitive; } }