From e64cecac8e7ecbba5df50d0e2229bb11d00c5686 Mon Sep 17 00:00:00 2001 From: Maisem Ali Date: Thu, 3 Feb 2022 10:25:41 -0800 Subject: [PATCH] chirp: remove regex dependency Signed-off-by: Maisem Ali --- chirp/chirp.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/chirp/chirp.go b/chirp/chirp.go index e76b44817..d465ab7de 100644 --- a/chirp/chirp.go +++ b/chirp/chirp.go @@ -10,7 +10,6 @@ import ( "bufio" "fmt" "net" - "regexp" "strings" ) @@ -89,7 +88,21 @@ func (b *BIRDClient) exec(cmd string, args ...interface{}) (string, error) { return b.readResponse() } -var respCodeRegex = regexp.MustCompile(`^\d{4}[ -]`) +// hasResponseCode reports whether the provided byte slice is +// prefixed with a BIRD response code. +// Equivalent regex: `^\d{4}[ -]`. +func hasResponseCode(s []byte) bool { + if len(s) < 5 { + return false + } + for _, b := range s[:4] { + if '0' <= b && b <= '9' { + continue + } + return false + } + return s[4] == ' ' || s[4] == '-' +} func (b *BIRDClient) readResponse() (string, error) { var resp strings.Builder @@ -105,7 +118,7 @@ func (b *BIRDClient) readResponse() (string, error) { if _, err := resp.Write(out); err != nil { return "", err } - if respCodeRegex.Match(out) { + if hasResponseCode(out) { done = out[4] == ' ' } if !done {