/// <summary>
        /// Mounts a new file system.
        /// </summary>
        /// <param name="source">The source of the filesystem. This is usually a device name, but can also be another directory.</param>
        /// <param name="target">The path including the name of the mount point, where to mount the new filesystem.</param>
        public static void Mount(string source, string target)
        {
            // Retrieve the parent directory of the mount
            DirectoryEntry parent = PathResolver.Resolve(rootNode, ref target, PathResolutionFlags.RetrieveParent);

            if (parent == null)
            {
                throw new System.ArgumentException();
            }

            IFileSystem root = FileSystemFactory.CreateFileSystem(source);

            if (root == null)
            {
                throw new System.ArgumentException();
            }

            PathSplitter path = new PathSplitter(target);

            DirectoryEntry.Allocate(parent, path.Last, root.Root);
        }
Exemple #2
0
		/// <summary>
		/// Performs a standard path lookup.
		/// </summary>
		/// <param name="rootDirectory">The root directory.</param>
		/// <param name="path">The path to resolve.</param>
		/// <returns>The directory entry of the resolved path.</returns>
		/// <exception cref="System.Security.SecurityException">The caller does not have access to the path or a component. For example the caller does not have the right to traverse the path.</exception>
		/// <exception cref="System.IO.PathTooLongException">The path is too long to traverse. This can be the result of circular symbolic links in the path.</exception>
		/// <exception cref="System.IO.FileNotFoundException">The file or folder path not found.</exception>
		/// <exception cref="System.IO.DirectoryNotFoundException">A path component was not found.</exception>
		/// <remarks>
		/// This call my result in other exceptions not specified in the above list. Other exceptions can be thrown by IVfsNode implementations, which are visited during the traversal
		/// process. For example a network file system node may throw an exception, if the server is unreachable.
		/// </remarks>
		public static DirectoryEntry Resolve (DirectoryEntry rootDirectory, ref string path)
		{
			// FIXME: Remove the root argument. The filesystem root should be unique for a process as part of a security model similar to jails, e.g. give apps from
			// untrusted sources their private filesystem regions.

			// FIXME: Get the root from the thread execution block
			DirectoryEntry current = rootDirectory;
			PathResolver resolver = new PathResolver (rootDirectory, current);
			return resolver.Resolve (ref path, PathResolutionFlags.None);
		}
Exemple #3
0
		/// <summary>
		/// Performs a path lookup obeying to the passed flags.
		/// </summary>
		/// <param name="rootDirectory">The root directory.</param>
		/// <param name="path">The path to resolve.</param>
		/// <param name="flags">Controls aspects of the path lookup process.</param>
		/// <returns>The directory entry of the resolved path.</returns>
		/// <exception cref="System.Security.SecurityException">The caller does not have access to the path or a component. For example the caller does not have the right to traverse the path.</exception>
		/// <exception cref="System.IO.PathTooLongException">The path is too long to traverse. This can be the result of circular symbolic links in the path.</exception>
		/// <exception cref="System.IO.FileNotFoundException">The file or folder path was not found. This exception can be prevented by specifying PathResolutionFlags.DoNotThrowNotFoundException.</exception>
		/// <exception cref="System.IO.DirectoryNotFoundException">A path component was not found. This exception can be prevented by specifying PathResolutionFlags.DoNotThrowNotFoundException.</exception>
		/// <remarks>
		/// This call my result in other exceptions not specified in the above list. Other exceptions can be thrown by IVfsNode implementations, which are visited during the traversal
		/// process. For example a network file system node may throw an exception, if the server is unreachable.
		/// </remarks>
		public static DirectoryEntry Resolve (DirectoryEntry rootDirectory, ref string path, PathResolutionFlags flags)
		{
			// FIXME: Get the root from the thread execution block
			DirectoryEntry current = rootDirectory;
			PathResolver resolver = new PathResolver (rootDirectory, current);
			return resolver.Resolve (ref path, flags);
		}
 /// <summary>
 /// Changes the current directory in the thread execution block.
 /// </summary>
 /// <param name="path">The path to change to. This path may be relative or absolute.</param>
 /// <
 public static void ChangeDirectory(string path)
 {
     DirectoryEntry entry = PathResolver.Resolve(rootNode, ref path);
     // FIXME: Set the current directory in the thread execution block
 }