podman

Форк
0
41 строка · 1.1 Кб
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 file.
4

5
package objabi
6

7
import "strings"
8

9
// PathToPrefix converts raw string to the prefix that will be used in the
10
// symbol table. All control characters, space, '%' and '"', as well as
11
// non-7-bit clean bytes turn into %xx. The period needs escaping only in the
12
// last segment of the path, and it makes for happier users if we escape that as
13
// little as possible.
14
func PathToPrefix(s string) string {
15
	slash := strings.LastIndex(s, "/")
16
	// check for chars that need escaping
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
	// quick exit
25
	if n == 0 {
26
		return s
27
	}
28

29
	// escape
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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.