github.com/mdempsky/go@v0.0.0-20151201204031-5dd372bd1e70/src/os/error_plan9.go (about)

     1  // Copyright 2011 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 os
     6  
     7  func isExist(err error) bool {
     8  	switch pe := err.(type) {
     9  	case nil:
    10  		return false
    11  	case *PathError:
    12  		err = pe.Err
    13  	case *LinkError:
    14  		err = pe.Err
    15  	case *SyscallError:
    16  		err = pe.Err
    17  	}
    18  	return contains(err.Error(), " exists")
    19  }
    20  
    21  func isNotExist(err error) bool {
    22  	switch pe := err.(type) {
    23  	case nil:
    24  		return false
    25  	case *PathError:
    26  		err = pe.Err
    27  	case *LinkError:
    28  		err = pe.Err
    29  	case *SyscallError:
    30  		err = pe.Err
    31  	}
    32  	return contains(err.Error(), "does not exist") || contains(err.Error(), "not found") ||
    33  		contains(err.Error(), "has been removed") || contains(err.Error(), "no parent")
    34  }
    35  
    36  func isPermission(err error) bool {
    37  	switch pe := err.(type) {
    38  	case nil:
    39  		return false
    40  	case *PathError:
    41  		err = pe.Err
    42  	case *LinkError:
    43  		err = pe.Err
    44  	case *SyscallError:
    45  		err = pe.Err
    46  	}
    47  	return contains(err.Error(), "permission denied")
    48  }
    49  
    50  // contains is a local version of strings.Contains. It knows len(sep) > 1.
    51  func contains(s, sep string) bool {
    52  	n := len(sep)
    53  	c := sep[0]
    54  	for i := 0; i+n <= len(s); i++ {
    55  		if s[i] == c && s[i:i+n] == sep {
    56  			return true
    57  		}
    58  	}
    59  	return false
    60  }