func readDir(d db.DB, q url.Values, s string) (db.SourceInfoUncomp, error) { returnMetrics := q.Get("returnMetrics") == "1" returnUnits := q.Get("returnUnits") == "1" returnSelectForDefaults := q.Get("returnSelectForDefaults") == "1" defaultsOnly := q.Get("defaultsOnly") == "1" var prefixMatch bool if (len(s) > 0) && (s[len(s)-1:len(s)] == "*") { prefixMatch = true s = s[:len(s)-1] } dirSearchReq := db.DirectorySearchRequest{ Prefix: s, FileRestrict: "", ReturnMetrics: returnMetrics, ReturnUnits: returnUnits, ReturnSelectForDefaults: returnSelectForDefaults, DefaultsOnly: defaultsOnly, DirPrefixMatch: prefixMatch, FilePrefixMatch: false} // Directory only search. sInfo, err := d.ReadDir(dirSearchReq) if err != nil { return db.SourceInfoUncomp{}, err } // File only search. if len(sInfo.Names) == 0 { path, file := common.GetSrcComponents(s) dirSearchReq.Prefix = path dirSearchReq.FileRestrict = file dirSearchReq.DirPrefixMatch = false dirSearchReq.FilePrefixMatch = prefixMatch sInfo, err = d.ReadDir(dirSearchReq) if err != nil { return db.SourceInfoUncomp{}, err } } return sInfo, nil }