diff options
| author | Ian Lance Taylor <iant@golang.org> | 2009-12-04 11:46:56 -0800 | 
|---|---|---|
| committer | Ian Lance Taylor <iant@golang.org> | 2009-12-04 11:46:56 -0800 | 
| commit | c9dba4936625c585c3b0a1bccb7d1b941889271a (patch) | |
| tree | 81bc32098bd8010d05dc65f9d7c10f64b6f979d7 /src | |
| parent | b9c658aaeb201a2fd0e6782ffcb39dc147ec72d6 (diff) | |
| download | golang-c9dba4936625c585c3b0a1bccb7d1b941889271a.tar.gz | |
Add os.Rename.
R=rsc
http://codereview.appspot.com/166058
Diffstat (limited to 'src')
| -rw-r--r-- | src/pkg/os/file.go | 11 | ||||
| -rw-r--r-- | src/pkg/os/os_test.go | 21 | 
2 files changed, 31 insertions, 1 deletions
| diff --git a/src/pkg/os/file.go b/src/pkg/os/file.go index dc722055a..03c6d5701 100644 --- a/src/pkg/os/file.go +++ b/src/pkg/os/file.go @@ -370,7 +370,7 @@ func Remove(name string) Error {  	return &PathError{"remove", name, Errno(e)};  } -// LinkError records an error during a link or symlink +// LinkError records an error during a link or symlink or rename  // system call and the paths that caused it.  type LinkError struct {  	Op	string; @@ -418,6 +418,15 @@ func Readlink(name string) (string, Error) {  	return "", nil;  } +// Rename renames a file. +func Rename(oldname, newname string) Error { +	e := syscall.Rename(oldname, newname); +	if e != 0 { +		return &LinkError{"rename", oldname, newname, Errno(e)} +	} +	return nil; +} +  // Chmod changes the mode of the named file to mode.  // If the file is a symbolic link, it changes the uid and gid of the link's target.  func Chmod(name string, mode int) Error { diff --git a/src/pkg/os/os_test.go b/src/pkg/os/os_test.go index ed3d955cb..7ff2bddb3 100644 --- a/src/pkg/os/os_test.go +++ b/src/pkg/os/os_test.go @@ -315,6 +315,27 @@ func TestLongSymlink(t *testing.T) {  	}  } +func TestRename(t *testing.T) { +	from, to := "renamefrom", "renameto"; +	Remove(to);	// Just in case. +	file, err := Open(from, O_CREAT|O_WRONLY, 0666); +	if err != nil { +		t.Fatalf("open %q failed: %v", to, err) +	} +	if err = file.Close(); err != nil { +		t.Errorf("close %q failed: %v", to, err) +	} +	err = Rename(from, to); +	if err != nil { +		t.Fatalf("rename %q, %q failed: %v", to, from, err) +	} +	defer Remove(to); +	_, err = Stat(to); +	if err != nil { +		t.Errorf("stat %q failed: %v", to, err) +	} +} +  func TestForkExec(t *testing.T) {  	r, w, err := Pipe();  	if err != nil { | 
