diff options
Diffstat (limited to 'vendor/codeberg.org/gruf/go-kv/format/util.go')
-rw-r--r-- | vendor/codeberg.org/gruf/go-kv/format/util.go | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/vendor/codeberg.org/gruf/go-kv/format/util.go b/vendor/codeberg.org/gruf/go-kv/format/util.go index 674f81be5..b5c672ecb 100644 --- a/vendor/codeberg.org/gruf/go-kv/format/util.go +++ b/vendor/codeberg.org/gruf/go-kv/format/util.go @@ -18,11 +18,22 @@ const ( SingleTermLine = 256 ) +// IsSafeASCII checks whether string is printable (i.e. non-control char) ASCII text. +func IsSafeASCII(str string) bool { + for _, r := range str { + if (r < ' ' && r != '\t') || + r >= 0x7f { + return false + } + } + return true +} + // ContainsSpaceOrTab checks if "s" contains space or tabs. func ContainsSpaceOrTab(s string) bool { - if i := strings.IndexByte(s, ' '); i != -1 { + if i := strings.IndexByte(s, ' '); i >= 0 { return true // note using indexbyte as it is ASM. - } else if i := strings.IndexByte(s, '\t'); i != -1 { + } else if i := strings.IndexByte(s, '\t'); i >= 0 { return true } return false @@ -30,7 +41,7 @@ func ContainsSpaceOrTab(s string) bool { // ContainsDoubleQuote checks if "s" contains a double quote. func ContainsDoubleQuote(s string) bool { - return (strings.IndexByte(s, '"') != -1) + return (strings.IndexByte(s, '"') >= 0) } // AppendEscape will append 's' to 'dst' and escape any double quotes. @@ -57,6 +68,36 @@ func AppendEscape(dst []byte, str string) []byte { return dst } +// Byte2Str returns 'c' as a string, escaping if necessary. +func Byte2Str(c byte) string { + switch c { + case '\a': + return `\a` + case '\b': + return `\b` + case '\f': + return `\f` + case '\n': + return `\n` + case '\r': + return `\r` + case '\t': + return `\t` + case '\v': + return `\v` + case '\'': + return `\\` + default: + if c < ' ' { + const hex = "0123456789abcdef" + return `\x` + + string(hex[c>>4]) + + string(hex[c&0xF]) + } + return string(c) + } +} + // isNil will safely check if 'v' is nil without dealing with weird Go interface nil bullshit. func isNil(i interface{}) bool { type eface struct{ _type, data unsafe.Pointer } //nolint |