Commit 571d3f50 authored by Jaroslavas Počepko's avatar Jaroslavas Počepko Committed by Alex Brainman

os: os.RemoveAll has to check for 2 error codes on Windows. ENOENT is not enough.

os.Lstat can return ENOTDIR as well.

R=golang-dev, r, alex.brainman
CC=golang-dev, rsc
https://golang.org/cl/4984051
parent bb8bbb29
......@@ -46,7 +46,7 @@ func Remove(name string) Error {
// both errors will be ENOTDIR, so it's okay to
// use the error from unlink.
// For windows syscall.ENOTDIR is set
// to syscall.ERROR_DIRECTORY, hopefully it should
// to syscall.ERROR_PATH_NOT_FOUND, hopefully it should
// do the trick.
if e1 != syscall.ENOTDIR {
e = e1
......
......@@ -92,15 +92,6 @@ func OpenFile(name string, flag int, perm uint32) (file *File, err Error) {
if e == nil {
return r, nil
}
// Imitating Unix behavior by replacing syscall.ERROR_PATH_NOT_FOUND with
// os.ENOTDIR. Not sure if we should go into that.
if e2, ok := e.(*PathError); ok {
if e3, ok := e2.Error.(Errno); ok {
if e3 == Errno(syscall.ERROR_PATH_NOT_FOUND) {
return nil, &PathError{"open", name, ENOTDIR}
}
}
}
return nil, e
}
......
......@@ -68,7 +68,7 @@ func RemoveAll(path string) Error {
// Otherwise, is this a directory we need to recurse into?
dir, serr := Lstat(path)
if serr != nil {
if serr, ok := serr.(*PathError); ok && serr.Error == ENOENT {
if serr, ok := serr.(*PathError); ok && (serr.Error == ENOENT || serr.Error == ENOTDIR) {
return nil
}
return serr
......
......@@ -76,7 +76,7 @@ done
# These are go errors that will be mapped directly to windows errors
goerrors='
ENOENT:ERROR_FILE_NOT_FOUND
ENOTDIR:ERROR_DIRECTORY
ENOTDIR:ERROR_PATH_NOT_FOUND
'
# Pull out just the error names for later.
......
......@@ -6,7 +6,7 @@ package syscall
// Go names for Windows errors.
const (
ENOENT = ERROR_FILE_NOT_FOUND
ENOTDIR = ERROR_DIRECTORY
ENOTDIR = ERROR_PATH_NOT_FOUND
)
// Windows reserves errors >= 1<<29 for application use.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment