github.com/Rookout/GoSDK@v0.1.48/pkg/services/assembler/internal/objabi/path.go (about)

     1  // Copyright 2017 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.assembler file.
     4  
     5  package objabi
     6  
     7  import "strings"
     8  
     9  
    10  
    11  
    12  
    13  
    14  func PathToPrefix(s string) string {
    15  	slash := strings.LastIndex(s, "/")
    16  	
    17  	n := 0
    18  	for r := 0; r < len(s); r++ {
    19  		if c := s[r]; c <= ' ' || (c == '.' && r > slash) || c == '%' || c == '"' || c >= 0x7F {
    20  			n++
    21  		}
    22  	}
    23  
    24  	
    25  	if n == 0 {
    26  		return s
    27  	}
    28  
    29  	
    30  	const hex = "0123456789abcdef"
    31  	p := make([]byte, 0, len(s)+2*n)
    32  	for r := 0; r < len(s); r++ {
    33  		if c := s[r]; c <= ' ' || (c == '.' && r > slash) || c == '%' || c == '"' || c >= 0x7F {
    34  			p = append(p, '%', hex[c>>4], hex[c&0xF])
    35  		} else {
    36  			p = append(p, c)
    37  		}
    38  	}
    39  
    40  	return string(p)
    41  }
    42  
    43  
    44  
    45  
    46  
    47  
    48  
    49  
    50  
    51  
    52  func IsRuntimePackagePath(pkgpath string) bool {
    53  	rval := false
    54  	switch pkgpath {
    55  	case "runtime":
    56  		rval = true
    57  	case "reflect":
    58  		rval = true
    59  	case "syscall":
    60  		rval = true
    61  	case "internal/bytealg":
    62  		rval = true
    63  	default:
    64  		rval = strings.HasPrefix(pkgpath, "runtime/internal")
    65  	}
    66  	return rval
    67  }