Skip to content

Commit 29e9297

Browse files
authored
Merge pull request #195 from cmaglie/fix-utf8
Fix UTF8 filenames not being matched by gcc -e output parsing (round 2)
2 parents 74daa61 + 4641067 commit 29e9297

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

Diff for: src/arduino.cc/builder/test/utils_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,14 @@ func TestParseCppString(t *testing.T) {
127127
require.Equal(t, true, ok)
128128
require.Equal(t, ` !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz{|}~`, str)
129129
require.Equal(t, ``, rest)
130+
131+
str, rest, ok = utils.ParseCppString(`"/home/ççç/"`)
132+
require.Equal(t, true, ok)
133+
require.Equal(t, `/home/ççç/`, str)
134+
require.Equal(t, ``, rest)
135+
136+
str, rest, ok = utils.ParseCppString(`"/home/ççç/ /$sdsdd\\"`)
137+
require.Equal(t, true, ok)
138+
require.Equal(t, `/home/ççç/ /$sdsdd\`, str)
139+
require.Equal(t, ``, rest)
130140
}

Diff for: src/arduino.cc/builder/utils/utils.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"path/filepath"
3939
"runtime"
4040
"strings"
41+
"unicode/utf8"
4142

4243
"arduino.cc/builder/constants"
4344
"arduino.cc/builder/gohasissues"
@@ -443,23 +444,25 @@ func ParseCppString(line string) (string, string, bool) {
443444
return "", line, false
444445
}
445446

446-
switch line[i] {
447+
c, width := utf8.DecodeRuneInString(line[i:])
448+
449+
switch c {
447450
// Backslash, next character is used unmodified
448451
case '\\':
449-
i++
452+
i += width
450453
if i >= len(line) {
451454
return "", line, false
452455
}
453456
res += string(line[i])
454457
break
455458
// Quote, end of string
456459
case '"':
457-
return res, line[i+1:], true
460+
return res, line[i+width:], true
458461
default:
459-
res += string(line[i])
462+
res += string(c)
460463
break
461464
}
462465

463-
i++
466+
i += width
464467
}
465468
}

0 commit comments

Comments
 (0)