MCPcopy
hub / github.com/uber/aresdb / ScanString

Function ScanString

query/expr/scanner.go:519–551  ·  view source on GitHub ↗

ScanString reads a quoted string from a rune reader.

(r io.RuneScanner)

Source from the content-addressed store, hash-verified

517
518// ScanString reads a quoted string from a rune reader.
519func ScanString(r io.RuneScanner) (string, error) {
520 ending, _, err := r.ReadRune()
521 if err != nil {
522 return "", errBadString
523 }
524
525 var buf bytes.Buffer
526 for {
527 ch0, _, err := r.ReadRune()
528 if ch0 == ending {
529 return buf.String(), nil
530 } else if err != nil || ch0 == '\n' {
531 return buf.String(), errBadString
532 } else if ch0 == '\\' {
533 // If the next character is an escape then write the escaped char.
534 // If it's not a valid escape then return an error.
535 ch1, _, _ := r.ReadRune()
536 if ch1 == 'n' {
537 _, _ = buf.WriteRune('\n')
538 } else if ch1 == '\\' {
539 _, _ = buf.WriteRune('\\')
540 } else if ch1 == '"' {
541 _, _ = buf.WriteRune('"')
542 } else if ch1 == '\'' {
543 _, _ = buf.WriteRune('\'')
544 } else {
545 return string(ch0) + string(ch1), errBadEscape
546 }
547 } else {
548 _, _ = buf.WriteRune(ch0)
549 }
550 }
551}
552
553var errBadString = errors.New("bad string")
554var errBadEscape = errors.New("bad escape")

Callers 2

TestScanStringFunction · 0.92
scanStringMethod · 0.85

Calls 2

ReadRuneMethod · 0.80
StringMethod · 0.65

Tested by 1

TestScanStringFunction · 0.74