From 9640d43c82876a671f6d967fd611b3006fd6ab91 Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Fri, 21 Jun 2013 15:17:12 +0000 Subject: [PATCH] Make SplitLabels use Split --- labels.go | 37 +++++++++++++++---------------------- labels_test.go | 8 +++++++- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/labels.go b/labels.go index ed4d7ea9..dc775f9b 100644 --- a/labels.go +++ b/labels.go @@ -10,31 +10,24 @@ package dns // www.miek.nl. returns []string{"www", "miek", "nl"} // The root label (.) returns nil. func SplitLabels(s string) []string { - // TODO(miek): make this use Split - if s == "." { + idx := Split(s) + switch len(idx) { + case 0: return nil - } - - k := 0 - labels := make([]string, 0) - last := byte('.') - lastlast := byte('.') - s = Fqdn(s) // Make fully qualified - for i := 0; i < len(s); i++ { - if s[i] == '.' { - if last == '\\' { - if lastlast != '\\' { - // do nothing - continue - } - } - labels = append(labels, s[k:i]) - k = i + 1 // + dot + case 1: + return []string{s} + default: + begin := 0 + end := 0 + labels := make([]string, 0) + for i := 1; i < len(idx); i++ { + end = idx[i] + labels = append(labels, s[begin:end]) + begin = end } - lastlast = last - last = s[i] + return labels } - return labels + panic("dns: not reached") } // CompareLabels compares the names s1 and s2 and diff --git a/labels_test.go b/labels_test.go index bb913a7d..638de739 100644 --- a/labels_test.go +++ b/labels_test.go @@ -48,11 +48,17 @@ func TestSplit(t *testing.T) { `www\.miek.nl.`: 2, `www\\.miek.nl.`: 3, ".": 0, + "nl.": 1, + "nl": 1, + "com.": 1, + ".com.": 2, } for s, i := range splitter { if x := len(Split(s)); x != i { - t.Logf("Labels should be %d, got %d: %s\n", i, x, s) + t.Logf("Labels should be %d, got %d: %s %v\n", i, x, s, Split(s)) t.Fail() + } else { + t.Logf("%s %v\n", s, Split(s)) } } }