Browse Source

chirp: remove regex dependency

Signed-off-by: Maisem Ali <[email protected]>
Maisem Ali 4 years ago
parent
commit
e64cecac8e
1 changed files with 16 additions and 3 deletions
  1. 16 3
      chirp/chirp.go

+ 16 - 3
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 {