From 432c9747cca2c125f5d66a408cc6efb056583b3e Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 20 Jun 2016 20:20:57 +0200 Subject: [PATCH] Use a scanner to split a string into lines to handle line termination correctly Windows-style line endings "\r\n" are now correctly handled. Signed-off-by: Cristian Maglie --- src/arduino.cc/builder/filter_sketch_source.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/arduino.cc/builder/filter_sketch_source.go b/src/arduino.cc/builder/filter_sketch_source.go index 34e5aa47..12f9a29e 100644 --- a/src/arduino.cc/builder/filter_sketch_source.go +++ b/src/arduino.cc/builder/filter_sketch_source.go @@ -30,19 +30,19 @@ package builder import ( - "arduino.cc/builder/types" - "arduino.cc/builder/utils" + "bufio" "strconv" "strings" + + "arduino.cc/builder/types" + "arduino.cc/builder/utils" ) type FilterSketchSource struct { - Source *string + Source *string } func (s *FilterSketchSource) Run(ctx *types.Context) error { - lines := strings.Split(*s.Source, "\n") - fileNames := []string{ctx.Sketch.MainFile.Name} for _, file := range ctx.Sketch.OtherSketchFiles { fileNames = append(fileNames, file.Name) @@ -51,7 +51,9 @@ func (s *FilterSketchSource) Run(ctx *types.Context) error { inSketch := false filtered := "" - for _, line := range lines { + scanner := bufio.NewScanner(strings.NewReader(*s.Source)) + for scanner.Scan() { + line := scanner.Text() filename := parseLineMarker(line) if filename != "" { inSketch = utils.SliceContains(fileNames, filename) @@ -96,4 +98,3 @@ func parseLineMarker(line string) string { } return "" } -