Copyright 2009 The Go Authors. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

package os

import (
	
)
MkdirAll creates a directory named path, along with any necessary parents, and returns nil, or else returns an error. The permission bits perm (before umask) are used for all directories that MkdirAll creates. If path is already a directory, MkdirAll does nothing and returns nil.
Fast path: if we can tell whether path is a directory or file, stop with success or error.
	,  := Stat()
	if  == nil {
		if .IsDir() {
			return nil
		}
		return &PathError{Op: "mkdir", Path: , Err: syscall.ENOTDIR}
	}
Slow path: make sure parent exists and then call Mkdir for path.
	 := len()
	for  > 0 && IsPathSeparator([-1]) { // Skip trailing path separator.
		--
	}

	 := 
	for  > 0 && !IsPathSeparator([-1]) { // Scan backward over element.
		--
	}

Create parent.
		 = (fixRootDirectory([:-1]), )
		if  != nil {
			return 
		}
	}
Parent now exists; invoke Mkdir and use its result.
	 = Mkdir(, )
Handle arguments like "foo/." by double-checking that directory doesn't exist.
		,  := Lstat()
		if  == nil && .IsDir() {
			return nil
		}
		return 
	}
	return nil
}
RemoveAll removes path and any children it contains. It removes everything it can but returns the first error it encounters. If the path does not exist, RemoveAll returns nil (no error). If there is an error, it will be of type *PathError.
func ( string) error {
	return removeAll()
}
endsWithDot reports whether the final component of path is ".".
func ( string) bool {
	if  == "." {
		return true
	}
	if len() >= 2 && [len()-1] == '.' && IsPathSeparator([len()-2]) {
		return true
	}
	return false