Package osfs provides a billy filesystem for the OS.
package osfs // import "github.com/go-git/go-billy/v5/osfs"

import (
	
	
	
	

	
	
)

const (
	defaultDirectoryMode = 0755
	defaultCreateMode    = 0666
)
OS is a filesystem based on the os filesystem.
type OS struct{}
New returns a new OS filesystem.
func ( string) billy.Filesystem {
	return chroot.New(&OS{}, )
}

func ( *OS) ( string) (billy.File, error) {
	return .OpenFile(, os.O_RDWR|os.O_CREATE|os.O_TRUNC, defaultCreateMode)
}

func ( *OS) ( string,  int,  os.FileMode) (billy.File, error) {
	if &os.O_CREATE != 0 {
		if  := .createDir();  != nil {
			return nil, 
		}
	}

	,  := os.OpenFile(, , )
	if  != nil {
		return nil, 
	}
	return &file{File: }, 
}

func ( *OS) ( string) error {
	 := filepath.Dir()
	if  != "." {
		if  := os.MkdirAll(, defaultDirectoryMode);  != nil {
			return 
		}
	}

	return nil
}

func ( *OS) ( string) ([]os.FileInfo, error) {
	,  := ioutil.ReadDir()
	if  != nil {
		return nil, 
	}

	var  = make([]os.FileInfo, len())
	for ,  := range  {
		[] = 
	}

	return , nil
}

func ( *OS) (,  string) error {
	if  := .createDir();  != nil {
		return 
	}

	return rename(, )
}

func ( *OS) ( string,  os.FileMode) error {
	return os.MkdirAll(, defaultDirectoryMode)
}

func ( *OS) ( string) (billy.File, error) {
	return .OpenFile(, os.O_RDONLY, 0)
}

func ( *OS) ( string) (os.FileInfo, error) {
	return os.Stat()
}

func ( *OS) ( string) error {
	return os.Remove()
}

func ( *OS) (,  string) (billy.File, error) {
	if  := .createDir( + string(os.PathSeparator));  != nil {
		return nil, 
	}

	,  := ioutil.TempFile(, )
	if  != nil {
		return nil, 
	}
	return &file{File: }, nil
}

func ( *OS) ( ...string) string {
	return filepath.Join(...)
}

func ( *OS) ( string) error {
	return os.RemoveAll(filepath.Clean())
}

func ( *OS) ( string) (os.FileInfo, error) {
	return os.Lstat(filepath.Clean())
}

func ( *OS) (,  string) error {
	if  := .createDir();  != nil {
		return 
	}

	return os.Symlink(, )
}

func ( *OS) ( string) (string, error) {
	return os.Readlink()
}
Capabilities implements the Capable interface.
file is a wrapper for an os.File which adds support for file locking.
type file struct {
	*os.File
	m sync.Mutex