]> Cypherpunks repositories - gostls13.git/commitdiff
net: reimplement toLower to not depend on strings
authorDavid du Colombier <0intro@gmail.com>
Tue, 17 Dec 2013 22:19:11 +0000 (14:19 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 17 Dec 2013 22:19:11 +0000 (14:19 -0800)
R=golang-dev, r, bradfitz
CC=golang-dev, jas
https://golang.org/cl/43610043

src/pkg/net/lookup_plan9.go

index 987412085124b9017cdc909e336da61d8bb6048d..8003d177d0642f7788db94871e597850072a8205 100644 (file)
@@ -7,7 +7,6 @@ package net
 import (
        "errors"
        "os"
-       "strings"
 )
 
 func query(filename, query string, bufSize int) (res []string, err error) {
@@ -70,10 +69,33 @@ func queryDNS(addr string, typ string) (res []string, err error) {
        return query("/net/dns", addr+" "+typ, 1024)
 }
 
+// toLower returns a lower-case version of in. Restricting us to
+// ASCII is sufficient to handle the IP protocol names and allow
+// us to not depend on the strings and unicode packages.
+func toLower(in string) string {
+       isAlreadyLowerCase := true
+       for _, c := range in {
+               if 'A' <= c && c <= 'Z' {
+                       isAlreadyLowerCase = false
+                       break
+               }
+       }
+       if isAlreadyLowerCase {
+               return in
+       }
+       out := []byte(in)
+       for i, c := range out {
+               if 'A' <= c && c <= 'Z' {
+                       out[i] += 'a' - 'A'
+               }
+       }
+       return string(out)
+}
+
 // lookupProtocol looks up IP protocol name and returns
 // the corresponding protocol number.
 func lookupProtocol(name string) (proto int, err error) {
-       lines, err := query("/net/cs", "!protocol="+strings.ToLower(name), 128)
+       lines, err := query("/net/cs", "!protocol="+toLower(name), 128)
        if err != nil {
                return 0, err
        }