github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/internal/robustio/robustio_windows.go (about)

     1  // Copyright 2019 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package robustio
     6  
     7  import (
     8  	"os"
     9  	"syscall"
    10  )
    11  
    12  const errFileNotFound = syscall.ERROR_FILE_NOT_FOUND
    13  
    14  // isEphemeralError returns true if err may be resolved by waiting.
    15  func isEphemeralError(err error) bool {
    16  	switch werr := err.(type) {
    17  	case *os.PathError:
    18  		err = werr.Err
    19  	case *os.LinkError:
    20  		err = werr.Err
    21  	case *os.SyscallError:
    22  		err = werr.Err
    23  	}
    24  	if errno, ok := err.(syscall.Errno); ok {
    25  		switch errno {
    26  		case syscall.ERROR_ACCESS_DENIED,
    27  			syscall.ERROR_FILE_NOT_FOUND,
    28  			ERROR_SHARING_VIOLATION:
    29  			return true
    30  		}
    31  	}
    32  	return false
    33  }