Commit f22ba1f2 authored by Marvin Stenger's avatar Marvin Stenger Committed by Ian Lance Taylor

all: prefer strings.IndexByte over strings.Index

strings.IndexByte was introduced in go1.2 and it can be used
effectively wherever the second argument to strings.Index is
exactly one byte long.

This avoids generating unnecessary string symbols and saves
a few calls to strings.Index.

Change-Id: I1ab5edb7c4ee9058084cfa57cbcc267c2597e793
Reviewed-on: https://go-review.googlesource.com/65930
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 5e92c411
......@@ -189,7 +189,7 @@ func main() {
features = append(features, f)
continue
}
comma := strings.Index(f, ",")
comma := strings.IndexByte(f, ',')
for cname := range cmap {
f2 := fmt.Sprintf("%s (%s)%s", f[:comma], cname, f[comma:])
features = append(features, f2)
......
......@@ -204,7 +204,7 @@ func (p *Package) loadDefines(f *File) {
line = strings.TrimSpace(line[8:])
var key, val string
spaceIndex := strings.Index(line, " ")
spaceIndex := strings.IndexByte(line, ' ')
tabIndex := strings.Index(line, "\t")
if spaceIndex == -1 && tabIndex == -1 {
......@@ -364,11 +364,11 @@ func (p *Package) guessKinds(f *File) []*Name {
continue
}
c1 := strings.Index(line, ":")
c1 := strings.IndexByte(line, ':')
if c1 < 0 {
continue
}
c2 := strings.Index(line[c1+1:], ":")
c2 := strings.IndexByte(line[c1+1:], ':')
if c2 < 0 {
continue
}
......@@ -2538,7 +2538,7 @@ func fieldPrefix(fld []*ast.Field) string {
if strings.HasPrefix(n.Name, "orig_") || strings.HasPrefix(n.Name, "_") {
continue
}
i := strings.Index(n.Name, "_")
i := strings.IndexByte(n.Name, '_')
if i < 0 {
continue
}
......
......@@ -41,7 +41,7 @@ func (p *Package) godefs(f *File, srcfile string) string {
continue
}
s := strings.TrimSpace(c.Text[i+len("+godefs map"):])
i = strings.Index(s, " ")
i = strings.IndexByte(s, ' ')
if i < 0 {
fmt.Fprintf(os.Stderr, "invalid +godefs map comment: %s\n", c.Text)
continue
......
......@@ -540,7 +540,7 @@ func init() {
for key, val := range knownFormats {
// key must be "typename format", and format starts with a '%'
// (formats containing '*' alone are not collected in this table)
i := strings.Index(key, "%")
i := strings.IndexByte(key, '%')
if i < 0 || !oneFormat(key[i:]) {
log.Fatalf("incorrect knownFormats key: %q", key)
}
......
......@@ -364,7 +364,7 @@ func Main(archInit func(*Arch)) {
// _ in phase name also matches space
phase := name[4:]
flag := "debug" // default flag is debug
if i := strings.Index(phase, "/"); i >= 0 {
if i := strings.IndexByte(phase, '/'); i >= 0 {
flag = phase[i+1:]
phase = phase[:i]
}
......@@ -689,7 +689,7 @@ func addImportMap(s string) {
if strings.Count(s, "=") != 1 {
log.Fatal("-importmap argument must be of the form source=actual")
}
i := strings.Index(s, "=")
i := strings.IndexByte(s, '=')
source, actual := s[:i], s[i+1:]
if source == "" || actual == "" {
log.Fatal("-importmap argument must be of the form source=actual; source and actual must be non-empty")
......@@ -712,13 +712,13 @@ func readImportCfg(file string) {
}
var verb, args string
if i := strings.Index(line, " "); i < 0 {
if i := strings.IndexByte(line, ' '); i < 0 {
verb = line
} else {
verb, args = line[:i], strings.TrimSpace(line[i+1:])
}
var before, after string
if i := strings.Index(args, "="); i >= 0 {
if i := strings.IndexByte(args, '='); i >= 0 {
before, after = args[:i], args[i+1:]
}
switch verb {
......
......@@ -1224,7 +1224,7 @@ func (p *noder) pragma(pos src.Pos, text string) syntax.Pragma {
fallthrough // because of //go:cgo_unsafe_args
default:
verb := text
if i := strings.Index(text, " "); i >= 0 {
if i := strings.IndexByte(text, ' '); i >= 0 {
verb = verb[:i]
}
prag := pragmaValue(verb)
......
......@@ -1045,7 +1045,7 @@ func (lv *Liveness) showlive(v *ssa.Value, live bvec) {
s += fmt.Sprintf("entry to %s:", lv.fn.funcname())
} else if sym, ok := v.Aux.(*obj.LSym); ok {
fn := sym.Name
if pos := strings.Index(fn, "."); pos >= 0 {
if pos := strings.IndexByte(fn, '.'); pos >= 0 {
fn = fn[pos+1:]
}
s += fmt.Sprintf("call to %s:", fn)
......
......@@ -475,8 +475,8 @@ func genMatch0(w io.Writer, arch arch, match, v string, m map[string]struct{}, t
}
// compound sexpr
var argname string
colon := strings.Index(arg, ":")
openparen := strings.Index(arg, "(")
colon := strings.IndexByte(arg, ':')
openparen := strings.IndexByte(arg, '(')
if colon >= 0 && openparen >= 0 && colon < openparen {
// rule-specified name
argname = arg[:colon]
......@@ -817,7 +817,7 @@ func commute1(m string, cnt map[string]int, arch arch) []string {
}
// Split up input.
var prefix string
colon := strings.Index(m, ":")
colon := strings.IndexByte(m, ':')
if colon >= 0 && isVariable(m[:colon]) {
prefix = m[:colon+1]
m = m[colon+1:]
......@@ -912,7 +912,7 @@ func varCount1(m string, cnt map[string]int) {
return
}
// Split up input.
colon := strings.Index(m, ":")
colon := strings.IndexByte(m, ':')
if colon >= 0 && isVariable(m[:colon]) {
cnt[m[:colon]]++
m = m[colon+1:]
......
......@@ -313,7 +313,7 @@ func testPos(t *testing.T, list []test, prefix, suffix string, extract func(*Fil
}
func stripAt(s string) (string, int) {
if i := strings.Index(s, "@"); i >= 0 {
if i := strings.IndexByte(s, '@'); i >= 0 {
return s[:i] + s[i+1:], i
}
return s, -1
......
......@@ -137,7 +137,7 @@ func main() {
// so OS X 10.6 is uname version 10 and OS X 10.8 is uname version 12.
if gohostos == "darwin" {
rel := run("", CheckExit, "uname", "-r")
if i := strings.Index(rel, "."); i >= 0 {
if i := strings.IndexByte(rel, '.'); i >= 0 {
rel = rel[:i]
}
osx, _ := strconv.Atoi(rel)
......
......@@ -215,7 +215,7 @@ func parseArgs(args []string) (pkg *build.Package, path, symbol string, more boo
// slash+1: if there's no slash, the value is -1 and start is 0; otherwise
// start is the byte after the slash.
for start := slash + 1; start < len(arg); start = period + 1 {
period = strings.Index(arg[start:], ".")
period = strings.IndexByte(arg[start:], '.')
symbol := ""
if period < 0 {
period = len(arg)
......
......@@ -791,7 +791,7 @@ func renameFix(tab []rename) func(*ast.File) bool {
}
func parseName(s string) (ptr bool, pkg, nam string) {
i := strings.Index(s, ".")
i := strings.IndexByte(s, '.')
if i < 0 {
panic("parseName: invalid name " + s)
}
......
......@@ -471,7 +471,7 @@ func typecheck1(cfg *TypeConfig, f interface{}, typeof map[interface{}]string, a
if strings.HasPrefix(t, "[") || strings.HasPrefix(t, "map[") {
// Lazy: assume there are no nested [] in the array
// length or map key type.
if i := strings.Index(t, "]"); i >= 0 {
if i := strings.IndexByte(t, ']'); i >= 0 {
typeof[n] = t[i+1:]
}
}
......@@ -512,11 +512,11 @@ func typecheck1(cfg *TypeConfig, f interface{}, typeof map[interface{}]string, a
key, value = "int", "rune"
} else if strings.HasPrefix(t, "[") {
key = "int"
if i := strings.Index(t, "]"); i >= 0 {
if i := strings.IndexByte(t, ']'); i >= 0 {
value = t[i+1:]
}
} else if strings.HasPrefix(t, "map[") {
if i := strings.Index(t, "]"); i >= 0 {
if i := strings.IndexByte(t, ']'); i >= 0 {
key, value = t[4:i], t[i+1:]
}
}
......
......@@ -223,7 +223,7 @@ func (tg *testgoData) parallel() {
}
for _, e := range tg.env {
if strings.HasPrefix(e, "GOROOT=") || strings.HasPrefix(e, "GOPATH=") || strings.HasPrefix(e, "GOBIN=") {
val := e[strings.Index(e, "=")+1:]
val := e[strings.IndexByte(e, '=')+1:]
if strings.HasPrefix(val, "testdata") || strings.HasPrefix(val, "./testdata") {
tg.t.Fatalf("internal testsuite error: call to parallel with testdata in environment (%s)", e)
}
......
......@@ -54,7 +54,7 @@ var Commands []*Command
// Name returns the command's name: the first word in the usage line.
func (c *Command) Name() string {
name := c.UsageLine
i := strings.Index(name, " ")
i := strings.IndexByte(name, ' ')
if i >= 0 {
name = name[:i]
}
......
......@@ -87,7 +87,7 @@ func Parse(cmd string, defns []*Defn, args []string, i int) (f *Defn, value stri
name := arg[1:]
// If there's already a prefix such as "test.", drop it for now.
name = strings.TrimPrefix(name, cmd+".")
equals := strings.Index(name, "=")
equals := strings.IndexByte(name, '=')
if equals >= 0 {
value = name[equals+1:]
name = name[:equals]
......
......@@ -496,7 +496,7 @@ func downloadPackage(p *load.Package) error {
return err
}
vers := runtime.Version()
if i := strings.Index(vers, " "); i >= 0 {
if i := strings.IndexByte(vers, ' '); i >= 0 {
vers = vers[:i]
}
if err := vcs.tagSync(root, selectTag(vers, tags)); err != nil {
......
......@@ -699,7 +699,7 @@ func repoRootFromVCSPaths(importPath, scheme string, security web.SecurityMode,
//
// This handles custom import paths like "name.tld/pkg/foo" or just "name.tld".
func repoRootForImportDynamic(importPath string, security web.SecurityMode) (*repoRoot, error) {
slash := strings.Index(importPath, "/")
slash := strings.IndexByte(importPath, '/')
if slash < 0 {
slash = len(importPath)
}
......
......@@ -139,7 +139,7 @@ func testStringPairs(t *testing.T, name string, tests []stringPairTest, f func(s
func testPatterns(t *testing.T, name, tests string, fn func(string, string) bool) {
var patterns []string
for _, line := range strings.Split(tests, "\n") {
if i := strings.Index(line, "#"); i >= 0 {
if i := strings.IndexByte(line, '#'); i >= 0 {
line = line[:i]
}
f := strings.Fields(line)
......
......@@ -231,7 +231,7 @@ func (p *Package) copyBuild(pp *build.Package) {
// their own code to $GOROOT instead of using $GOPATH, but we assume that
// code will start with a domain name (dot in the first element).
func isStandardImportPath(path string) bool {
i := strings.Index(path, "/")
i := strings.IndexByte(path, '/')
if i < 0 {
i = len(path)
}
......
......@@ -1074,7 +1074,7 @@ func strnputPad(s string, n int, pad []byte) {
var strdata []*Symbol
func addstrdata1(ctxt *Link, arg string) {
eq := strings.Index(arg, "=")
eq := strings.IndexByte(arg, '=')
dot := strings.LastIndex(arg[:eq+1], ".")
if eq < 0 || dot < 0 {
Exitf("-X flag requires argument of the form importpath.name=value")
......
......@@ -326,7 +326,7 @@ func (d *deadcodepass) flood() {
}
for i, m := range methodsigs {
name := string(m)
name = name[:strings.Index(name, "(")]
name = name[:strings.IndexByte(name, '(')]
if !strings.HasSuffix(methods[i].ifn().Name, name) {
panic(fmt.Sprintf("%q relocation for %q does not match method %q", s.Name, methods[i].ifn().Name, name))
}
......
......@@ -184,7 +184,7 @@ func loadcgo(ctxt *Link, file string, pkg string, p string) {
local = expandpkg(local, pkg)
q = ""
if i := strings.Index(remote, "#"); i >= 0 {
if i := strings.IndexByte(remote, '#'); i >= 0 {
remote, q = remote[:i], remote[i+1:]
}
s = ctxt.Syms.Lookup(local, 0)
......
......@@ -60,13 +60,13 @@ func (ctxt *Link) readImportCfg(file string) {
}
var verb, args string
if i := strings.Index(line, " "); i < 0 {
if i := strings.IndexByte(line, ' '); i < 0 {
verb = line
} else {
verb, args = line[:i], strings.TrimSpace(line[i+1:])
}
var before, after string
if i := strings.Index(args, "="); i >= 0 {
if i := strings.IndexByte(args, '='); i >= 0 {
before, after = args[:i], args[i+1:]
}
switch verb {
......
......@@ -678,7 +678,7 @@ func asmCheckVar(badf func(string, ...interface{}), fn *asmFunc, line, expr stri
// Determine whether the match we're holding
// is the first or second argument.
if strings.Index(line, expr) > strings.Index(line, ",") {
if strings.Index(line, expr) > strings.IndexByte(line, ',') {
kind = dst
} else {
kind = src
......
......@@ -303,7 +303,7 @@ func (s *formatState) parseIndex() bool {
start := s.nbytes
s.scanNum()
if s.nbytes == len(s.format) || s.nbytes == start || s.format[s.nbytes] != ']' {
end := strings.Index(s.format, "]")
end := strings.IndexByte(s.format, ']')
if end < 0 {
end = len(s.format)
}
......
......@@ -63,7 +63,7 @@ func checkCanonicalFieldTag(f *File, field *ast.Field, seen *map[[2]string]token
// by containing a field named XMLName; see issue 18256.
continue
}
if i := strings.Index(val, ","); i >= 0 {
if i := strings.IndexByte(val, ','); i >= 0 {
if key == "xml" {
// Use a separate namespace for XML attributes.
for _, opt := range strings.Split(val[i:], ",") {
......
......@@ -118,7 +118,7 @@ func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error) {
return nil, errors.New("x509: no DEK-Info header in block")
}
idx := strings.Index(dek, ",")
idx := strings.IndexByte(dek, ',')
if idx == -1 {
return nil, errors.New("x509: malformed DEK-Info header")
}
......
......@@ -161,7 +161,7 @@ func fetchCertIDs() ([]certID, error) {
}
if strings.HasPrefix(ln, sn) {
// extract hex value from parentheses.
id.serialNumber = ln[strings.Index(ln, "(")+1 : len(ln)-1]
id.serialNumber = ln[strings.IndexByte(ln, '(')+1 : len(ln)-1]
continue
}
if strings.TrimSpace(ln) == "X509v3 Subject Key Identifier:" {
......
......@@ -45,7 +45,7 @@ func (s *Sym) PackageName() string {
pathend = 0
}
if i := strings.Index(s.Name[pathend:], "."); i != -1 {
if i := strings.IndexByte(s.Name[pathend:], '.'); i != -1 {
return s.Name[:pathend+i]
}
return ""
......@@ -58,7 +58,7 @@ func (s *Sym) ReceiverName() string {
if pathend < 0 {
pathend = 0
}
l := strings.Index(s.Name[pathend:], ".")
l := strings.IndexByte(s.Name[pathend:], '.')
r := strings.LastIndex(s.Name[pathend:], ".")
if l == -1 || r == -1 || l == r {
return ""
......
......@@ -15,7 +15,7 @@ type tagOptions string
// parseTag splits a struct field's json tag into its name and
// comma-separated options.
func parseTag(tag string) (string, tagOptions) {
if idx := strings.Index(tag, ","); idx != -1 {
if idx := strings.IndexByte(tag, ','); idx != -1 {
return tag[:idx], tagOptions(tag[idx+1:])
}
return tag, tagOptions("")
......@@ -31,7 +31,7 @@ func (o tagOptions) Contains(optionName string) bool {
s := string(o)
for s != "" {
var next string
i := strings.Index(s, ",")
i := strings.IndexByte(s, ',')
if i >= 0 {
s, next = s[:i], s[i+1:]
}
......
......@@ -115,7 +115,7 @@ func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, erro
// Split the tag from the xml namespace if necessary.
tag := f.Tag.Get("xml")
if i := strings.Index(tag, " "); i >= 0 {
if i := strings.IndexByte(tag, ' '); i >= 0 {
finfo.xmlns, tag = tag[:i], tag[i+1:]
}
......
......@@ -1161,7 +1161,7 @@ func (d *Decoder) nsname() (name Name, ok bool) {
if !ok {
return
}
i := strings.Index(s, ":")
i := strings.IndexByte(s, ':')
if i < 0 {
name.Local = s
} else {
......
......@@ -1247,7 +1247,7 @@ func (ctxt *Context) saveCgo(filename string, di *Package, cg *ast.CommentGroup)
// Split at colon.
line = strings.TrimSpace(line[4:])
i := strings.Index(line, ":")
i := strings.IndexByte(line, ':')
if i < 0 {
return fmt.Errorf("%s: invalid #cgo line: %s", filename, orig)
}
......@@ -1462,7 +1462,7 @@ func (ctxt *Context) match(name string, allTags map[string]bool) bool {
}
return false
}
if i := strings.Index(name, ","); i >= 0 {
if i := strings.IndexByte(name, ','); i >= 0 {
// comma-separated list
ok1 := ctxt.match(name[:i], allTags)
ok2 := ctxt.match(name[i+1:], allTags)
......@@ -1526,7 +1526,7 @@ func (ctxt *Context) match(name string, allTags map[string]bool) bool {
//
// An exception: if GOOS=android, then files with GOOS=linux are also matched.
func (ctxt *Context) goodOSArchFile(name string, allTags map[string]bool) bool {
if dot := strings.Index(name, "."); dot != -1 {
if dot := strings.IndexByte(name, '.'); dot != -1 {
name = name[:dot]
}
......@@ -1537,7 +1537,7 @@ func (ctxt *Context) goodOSArchFile(name string, allTags map[string]bool) bool {
// systems, such as android, to arrive without breaking existing code with
// innocuous source code in "android.go". The easiest fix: cut everything
// in the name before the initial _.
i := strings.Index(name, "_")
i := strings.IndexByte(name, '_')
if i < 0 {
return true
}
......
......@@ -537,7 +537,7 @@ func stripCommonPrefix(lines []string) {
* Check for vertical "line of stars" and correct prefix accordingly.
*/
lineOfStars := false
if i := strings.Index(prefix, "*"); i >= 0 {
if i := strings.IndexByte(prefix, '*'); i >= 0 {
// Line of stars present.
if i > 0 && prefix[i-1] == ' ' {
i-- // remove trailing blank from prefix so stars remain aligned
......
......@@ -374,7 +374,7 @@ func isJSType(mimeType string) bool {
// https://www.ietf.org/rfc/rfc4627.txt
mimeType = strings.ToLower(mimeType)
// discard parameters
if i := strings.Index(mimeType, ";"); i >= 0 {
if i := strings.IndexByte(mimeType, ';'); i >= 0 {
mimeType = mimeType[:i]
}
mimeType = strings.TrimSpace(mimeType)
......
......@@ -49,7 +49,7 @@ func (z *Rat) SetString(s string) (*Rat, bool) {
// len(s) > 0
// parse fraction a/b, if any
if sep := strings.Index(s, "/"); sep >= 0 {
if sep := strings.IndexByte(s, '/'); sep >= 0 {
if _, ok := z.a.SetString(s[:sep], 0); !ok {
return nil, false
}
......
......@@ -257,7 +257,7 @@ func (d *WordDecoder) DecodeHeader(header string) (string, error) {
}
cur := start + len("=?")
i := strings.Index(header[cur:], "?")
i := strings.IndexByte(header[cur:], '?')
if i == -1 {
break
}
......
......@@ -20,7 +20,7 @@ import (
// FormatMediaType returns the empty string.
func FormatMediaType(t string, param map[string]string) string {
var b bytes.Buffer
if slash := strings.Index(t, "/"); slash == -1 {
if slash := strings.IndexByte(t, '/'); slash == -1 {
if !isToken(t) {
return ""
}
......@@ -110,7 +110,7 @@ var ErrInvalidMediaParameter = errors.New("mime: invalid media parameter")
// The returned map, params, maps from the lowercase
// attribute to the attribute value with its case preserved.
func ParseMediaType(v string) (mediatype string, params map[string]string, err error) {
i := strings.Index(v, ";")
i := strings.IndexByte(v, ';')
if i == -1 {
i = len(v)
}
......@@ -146,7 +146,7 @@ func ParseMediaType(v string) (mediatype string, params map[string]string, err e
}
pmap := params
if idx := strings.Index(key, "*"); idx != -1 {
if idx := strings.IndexByte(key, '*'); idx != -1 {
baseName := key[:idx]
if continuation == nil {
continuation = make(map[string]map[string]string)
......
......@@ -40,7 +40,7 @@ func Request() (*http.Request, error) {
func envMap(env []string) map[string]string {
m := make(map[string]string)
for _, kv := range env {
if idx := strings.Index(kv, "="); idx != -1 {
if idx := strings.IndexByte(kv, '='); idx != -1 {
m[kv[:idx]] = kv[idx+1:]
}
}
......
......@@ -50,7 +50,7 @@ func readSetCookies(h Header) []*Cookie {
continue
}
parts[0] = strings.TrimSpace(parts[0])
j := strings.Index(parts[0], "=")
j := strings.IndexByte(parts[0], '=')
if j < 0 {
continue
}
......@@ -74,7 +74,7 @@ func readSetCookies(h Header) []*Cookie {
}
attr, val := parts[i], ""
if j := strings.Index(attr, "="); j >= 0 {
if j := strings.IndexByte(attr, '='); j >= 0 {
attr, val = attr[:j], attr[j+1:]
}
lowerAttr := strings.ToLower(attr)
......@@ -214,7 +214,7 @@ func readCookies(h Header, filter string) []*Cookie {
continue
}
name, val := parts[i], ""
if j := strings.Index(name, "="); j >= 0 {
if j := strings.IndexByte(name, '='); j >= 0 {
name, val = name[:j], name[j+1:]
}
if !isCookieNameValid(name) {
......
......@@ -748,7 +748,7 @@ func parseRange(s string, size int64) ([]httpRange, error) {
if ra == "" {
continue
}
i := strings.Index(ra, "-")
i := strings.IndexByte(ra, '-')
if i < 0 {
return nil, errors.New("invalid range")
}
......
......@@ -712,7 +712,7 @@ func ParseHTTPVersion(vers string) (major, minor int, ok bool) {
if !strings.HasPrefix(vers, "HTTP/") {
return 0, 0, false
}
dot := strings.Index(vers, ".")
dot := strings.IndexByte(vers, '.')
if dot < 0 {
return 0, 0, false
}
......@@ -880,8 +880,8 @@ func (r *Request) SetBasicAuth(username, password string) {
// parseRequestLine parses "GET /foo HTTP/1.1" into its three parts.
func parseRequestLine(line string) (method, requestURI, proto string, ok bool) {
s1 := strings.Index(line, " ")
s2 := strings.Index(line[s1+1:], " ")
s1 := strings.IndexByte(line, ' ')
s2 := strings.IndexByte(line[s1+1:], ' ')
if s1 < 0 || s2 < 0 {
return
}
......
......@@ -2002,7 +2002,7 @@ func Redirect(w ResponseWriter, r *Request, url string, code int) {
}
var query string
if i := strings.Index(url, "?"); i != -1 {
if i := strings.IndexByte(url, '?'); i != -1 {
url, query = url[:i], url[i:]
}
......
......@@ -475,7 +475,7 @@ func TestLookupDotsWithLocalSource(t *testing.T) {
}
loop:
for i, name := range names {
if strings.Index(name, ".") == len(name)-1 { // "localhost" not "localhost."
if strings.IndexByte(name, '.') == len(name)-1 { // "localhost" not "localhost."
for j := range names {
if j == i {
continue
......
......@@ -505,8 +505,8 @@ func parse(rawurl string, viaRequest bool) (*URL, error) {
// RFC 3986, §3.3:
// In addition, a URI reference (Section 4.1) may be a relative-path reference,
// in which case the first path segment cannot contain a colon (":") character.
colon := strings.Index(rest, ":")
slash := strings.Index(rest, "/")
colon := strings.IndexByte(rest, ':')
slash := strings.IndexByte(rest, '/')
if colon >= 0 && (slash < 0 || colon < slash) {
// First path segment has colon. Not allowed in relative URL.
return nil, errors.New("first path segment in URL cannot contain colon")
......@@ -830,7 +830,7 @@ func parseQuery(m Values, query string) (err error) {
continue
}
value := ""
if i := strings.Index(key, "="); i >= 0 {
if i := strings.IndexByte(key, '='); i >= 0 {
key, value = key[:i], key[i+1:]
}
key, err1 := QueryUnescape(key)
......
......@@ -104,7 +104,7 @@ func TestClearenv(t *testing.T) {
for _, pair := range origEnv {
// Environment variables on Windows can begin with =
// http://blogs.msdn.com/b/oldnewthing/archive/2010/05/06/10008132.aspx
i := strings.Index(pair[1:], "=") + 1
i := strings.IndexByte(pair[1:], '=') + 1
if err := Setenv(pair[:i], pair[i+1:]); err != nil {
t.Errorf("Setenv(%q, %q) failed during reset: %v", pair[:i], pair[i+1:], err)
}
......
......@@ -687,7 +687,7 @@ func dedupEnvCase(caseInsensitive bool, env []string) []string {
out := make([]string, 0, len(env))
saw := map[string]int{} // key => index into out
for _, kv := range env {
eq := strings.Index(kv, "=")
eq := strings.IndexByte(kv, '=')
if eq < 0 {
out = append(out, kv)
continue
......
......@@ -1523,7 +1523,7 @@ func TestHostname(t *testing.T) {
}
want := runBinHostname(t)
if hostname != want {
i := strings.Index(hostname, ".")
i := strings.IndexByte(hostname, '.')
if i < 0 || hostname[0:i] != want {
t.Errorf("Hostname() = %q, want %q", hostname, want)
}
......
......@@ -124,7 +124,7 @@ func buildUser(pwd *C.struct_passwd) *User {
// say: "It is expected to be a comma separated list of
// personal data where the first item is the full name of the
// user."
if i := strings.Index(u.Name, ","); i >= 0 {
if i := strings.IndexByte(u.Name, ','); i >= 0 {
u.Name = u.Name[:i]
}
return u
......
......@@ -131,7 +131,7 @@ func matchUserIndexValue(value string, idx int) lineFunc {
// say: "It is expected to be a comma separated list of
// personal data where the first item is the full name of the
// user."
if i := strings.Index(u.Name, ","); i >= 0 {
if i := strings.IndexByte(u.Name, ','); i >= 0 {
u.Name = u.Name[:i]
}
return u, nil
......
......@@ -294,7 +294,7 @@ func parseResult(t *testing.T, file string, lineno int, res string) []int {
out[n] = -1
out[n+1] = -1
} else {
k := strings.Index(pair, "-")
k := strings.IndexByte(pair, '-')
if k < 0 {
t.Fatalf("%s:%d: invalid pair %s", file, lineno, pair)
}
......@@ -457,7 +457,7 @@ Reading:
continue Reading
}
case ':':
i := strings.Index(flag[1:], ":")
i := strings.IndexByte(flag[1:], ':')
if i < 0 {
t.Logf("skip: %s", line)
continue Reading
......
......@@ -829,7 +829,7 @@ func (re *Regexp) ExpandString(dst []byte, template string, src string, match []
func (re *Regexp) expand(dst []byte, template string, bsrc []byte, src string, match []int) []byte {
for len(template) > 0 {
i := strings.Index(template, "$")
i := strings.IndexByte(template, '$')
if i < 0 {
break
}
......
......@@ -213,7 +213,7 @@ func profileOk(t *testing.T, need []string, prof bytes.Buffer, duration time.Dur
fprintStack(&buf, stk)
samples += count
for i, name := range need {
if semi := strings.Index(name, ";"); semi > -1 {
if semi := strings.IndexByte(name, ';'); semi > -1 {
kv := strings.SplitN(name[semi+1:], "=", 2)
if len(kv) != 2 || !contains(labels[kv[0]], kv[1]) {
continue
......
......@@ -680,7 +680,7 @@ func verifyRange(name string, inCategory Op, table *unicode.RangeTable) {
}
func parseScript(line string, scripts map[string][]Script) {
comment := strings.Index(line, "#")
comment := strings.IndexByte(line, '#')
if comment >= 0 {
line = line[0:comment]
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment