aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2019-05-26 14:05:34 +0200
committerDmitry Vyukov <dvyukov@google.com>2019-05-29 14:58:40 +0200
commitf5a25d38ac7d97da62dafe2c809672e89f40aa25 (patch)
tree414326b06028219a50c4c0bdd4ea1b6feed48267
parent59a32682c0fd52c0d7a2cd9db0aac63a9e890825 (diff)
pkg/cover: factor out common code into combinePrefix
Combining of prefixes is now repeated in 2 places. Factor it out into a common function.
-rw-r--r--pkg/cover/report.go33
1 files changed, 14 insertions, 19 deletions
diff --git a/pkg/cover/report.go b/pkg/cover/report.go
index 3f00f75da..a85b091d6 100644
--- a/pkg/cover/report.go
+++ b/pkg/cover/report.go
@@ -55,14 +55,13 @@ func MakeReportGenerator(vmlinux, srcDir, arch string) (*ReportGenerator, error)
}
func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error {
- var prefix string
if len(pcs) == 0 {
return fmt.Errorf("no coverage data available")
}
for i, pc := range pcs {
pcs[i] = PreviousInstructionPC(rg.arch, pc)
}
- covered, prefix1, err := rg.symbolize(pcs)
+ covered, prefix, err := rg.symbolize(pcs)
if err != nil {
return err
}
@@ -74,16 +73,8 @@ func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error {
if err != nil {
return err
}
- if len(uncoveredPCs) == 0 {
- prefix = prefix1
- } else {
- i := 0
- for ; i < len(prefix1) && i < len(prefix2); i++ {
- if prefix1[i] != prefix2[i] {
- break
- }
- }
- prefix = prefix1[:i]
+ if len(uncoveredPCs) != 0 {
+ prefix = combinePrefix(prefix, prefix2)
}
return rg.generate(w, prefix, covered, uncovered)
}
@@ -244,13 +235,7 @@ func (rg *ReportGenerator) symbolize(pcs []uint64) ([]symbolizer.Frame, string,
if prefix == "" {
prefix = frame.File
} else {
- i := 0
- for ; i < len(prefix) && i < len(frame.File); i++ {
- if prefix[i] != frame.File[i] {
- break
- }
- }
- prefix = prefix[:i]
+ prefix = combinePrefix(prefix, frame.File)
if prefix == "" {
break
}
@@ -259,6 +244,16 @@ func (rg *ReportGenerator) symbolize(pcs []uint64) ([]symbolizer.Frame, string,
return frames, prefix, nil
}
+func combinePrefix(prefix, prefix2 string) string {
+ i := 0
+ for ; i < len(prefix) && i < len(prefix2); i++ {
+ if prefix[i] != prefix2[i] {
+ break
+ }
+ }
+ return prefix[:i]
+}
+
func parseFile(fn string) ([][]byte, error) {
data, err := ioutil.ReadFile(fn)
if err != nil {