diff options
Diffstat (limited to 'libgo/go/io/ioutil')
-rw-r--r-- | libgo/go/io/ioutil/ioutil.go | 9 | ||||
-rw-r--r-- | libgo/go/io/ioutil/tempfile.go | 5 | ||||
-rw-r--r-- | libgo/go/io/ioutil/tempfile_test.go | 16 |
3 files changed, 22 insertions, 8 deletions
diff --git a/libgo/go/io/ioutil/ioutil.go b/libgo/go/io/ioutil/ioutil.go index 8ecbb2de764..f0da6168305 100644 --- a/libgo/go/io/ioutil/ioutil.go +++ b/libgo/go/io/ioutil/ioutil.go @@ -88,13 +88,6 @@ func WriteFile(filename string, data []byte, perm os.FileMode) error { return err } -// byName implements sort.Interface. -type byName []os.FileInfo - -func (f byName) Len() int { return len(f) } -func (f byName) Less(i, j int) bool { return f[i].Name() < f[j].Name() } -func (f byName) Swap(i, j int) { f[i], f[j] = f[j], f[i] } - // ReadDir reads the directory named by dirname and returns // a list of directory entries sorted by filename. func ReadDir(dirname string) ([]os.FileInfo, error) { @@ -107,7 +100,7 @@ func ReadDir(dirname string) ([]os.FileInfo, error) { if err != nil { return nil, err } - sort.Sort(byName(list)) + sort.Slice(list, func(i, j int) bool { return list[i].Name() < list[j].Name() }) return list, nil } diff --git a/libgo/go/io/ioutil/tempfile.go b/libgo/go/io/ioutil/tempfile.go index 42718cc73d3..e5e315cfb7d 100644 --- a/libgo/go/io/ioutil/tempfile.go +++ b/libgo/go/io/ioutil/tempfile.go @@ -90,6 +90,11 @@ func TempDir(dir, prefix string) (name string, err error) { } continue } + if os.IsNotExist(err) { + if _, err := os.Stat(dir); os.IsNotExist(err) { + return "", err + } + } if err == nil { name = try } diff --git a/libgo/go/io/ioutil/tempfile_test.go b/libgo/go/io/ioutil/tempfile_test.go index d2a132a110a..6a70aedc324 100644 --- a/libgo/go/io/ioutil/tempfile_test.go +++ b/libgo/go/io/ioutil/tempfile_test.go @@ -51,3 +51,19 @@ func TestTempDir(t *testing.T) { } } } + +// test that we return a nice error message if the dir argument to TempDir doesn't +// exist (or that it's empty and os.TempDir doesn't exist) +func TestTempDir_BadDir(t *testing.T) { + dir, err := TempDir("", "TestTempDir_BadDir") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + badDir := filepath.Join(dir, "not-exist") + _, err = TempDir(badDir, "foo") + if pe, ok := err.(*os.PathError); !ok || !os.IsNotExist(err) || pe.Path != badDir { + t.Errorf("TempDir error = %#v; want PathError for path %q satisifying os.IsNotExist", err, badDir) + } +} |