os.go raw

   1  // Copyright © 2014 Steve Francia <spf@spf13.com>.
   2  // Copyright 2013 tsuru authors. All rights reserved.
   3  //
   4  // Licensed under the Apache License, Version 2.0 (the "License");
   5  // you may not use this file except in compliance with the License.
   6  // You may obtain a copy of the License at
   7  // http://www.apache.org/licenses/LICENSE-2.0
   8  //
   9  // Unless required by applicable law or agreed to in writing, software
  10  // distributed under the License is distributed on an "AS IS" BASIS,
  11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12  // See the License for the specific language governing permissions and
  13  // limitations under the License.
  14  
  15  package afero
  16  
  17  import (
  18  	"os"
  19  	"time"
  20  )
  21  
  22  var _ Lstater = (*OsFs)(nil)
  23  
  24  // OsFs is a Fs implementation that uses functions provided by the os package.
  25  //
  26  // For details in any method, check the documentation of the os package
  27  // (http://golang.org/pkg/os/).
  28  type OsFs struct{}
  29  
  30  func NewOsFs() Fs {
  31  	return &OsFs{}
  32  }
  33  
  34  func (OsFs) Name() string { return "OsFs" }
  35  
  36  func (OsFs) Create(name string) (File, error) {
  37  	f, e := os.Create(name)
  38  	if f == nil {
  39  		// while this looks strange, we need to return a bare nil (of type nil) not
  40  		// a nil value of type *os.File or nil won't be nil
  41  		return nil, e
  42  	}
  43  	return f, e
  44  }
  45  
  46  func (OsFs) Mkdir(name string, perm os.FileMode) error {
  47  	return os.Mkdir(name, perm)
  48  }
  49  
  50  func (OsFs) MkdirAll(path string, perm os.FileMode) error {
  51  	return os.MkdirAll(path, perm)
  52  }
  53  
  54  func (OsFs) Open(name string) (File, error) {
  55  	f, e := os.Open(name)
  56  	if f == nil {
  57  		// while this looks strange, we need to return a bare nil (of type nil) not
  58  		// a nil value of type *os.File or nil won't be nil
  59  		return nil, e
  60  	}
  61  	return f, e
  62  }
  63  
  64  func (OsFs) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
  65  	f, e := os.OpenFile(name, flag, perm)
  66  	if f == nil {
  67  		// while this looks strange, we need to return a bare nil (of type nil) not
  68  		// a nil value of type *os.File or nil won't be nil
  69  		return nil, e
  70  	}
  71  	return f, e
  72  }
  73  
  74  func (OsFs) Remove(name string) error {
  75  	return os.Remove(name)
  76  }
  77  
  78  func (OsFs) RemoveAll(path string) error {
  79  	return os.RemoveAll(path)
  80  }
  81  
  82  func (OsFs) Rename(oldname, newname string) error {
  83  	return os.Rename(oldname, newname)
  84  }
  85  
  86  func (OsFs) Stat(name string) (os.FileInfo, error) {
  87  	return os.Stat(name)
  88  }
  89  
  90  func (OsFs) Chmod(name string, mode os.FileMode) error {
  91  	return os.Chmod(name, mode)
  92  }
  93  
  94  func (OsFs) Chown(name string, uid, gid int) error {
  95  	return os.Chown(name, uid, gid)
  96  }
  97  
  98  func (OsFs) Chtimes(name string, atime time.Time, mtime time.Time) error {
  99  	return os.Chtimes(name, atime, mtime)
 100  }
 101  
 102  func (OsFs) LstatIfPossible(name string) (os.FileInfo, bool, error) {
 103  	fi, err := os.Lstat(name)
 104  	return fi, true, err
 105  }
 106  
 107  func (OsFs) SymlinkIfPossible(oldname, newname string) error {
 108  	return os.Symlink(oldname, newname)
 109  }
 110  
 111  func (OsFs) ReadlinkIfPossible(name string) (string, error) {
 112  	return os.Readlink(name)
 113  }
 114