aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2016-02-29 19:58:52 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2016-02-29 19:58:52 +0900
commit01406297a23201b3f99dfb316e7bb4e64b0472c3 (patch)
tree0fa52f39836c1b8b42d94161e5910a11a36e6733
parent07550475d31e64e76a12a689a6dd6de327849272 (diff)
downloadplatform_build_kati-01406297a23201b3f99dfb316e7bb4e64b0472c3.tar.gz
platform_build_kati-01406297a23201b3f99dfb316e7bb4e64b0472c3.tar.bz2
platform_build_kati-01406297a23201b3f99dfb316e7bb4e64b0472c3.zip
[C++] Finish FindEndOfLine at NULL characeter
-rw-r--r--strutil.cc6
-rw-r--r--strutil_test.cc8
2 files changed, 12 insertions, 2 deletions
diff --git a/strutil.cc b/strutil.cc
index 43c8185..9d37052 100644
--- a/strutil.cc
+++ b/strutil.cc
@@ -424,10 +424,12 @@ size_t FindThreeOutsideParen(StringPiece s, char c1, char c2, char c3) {
size_t FindEndOfLine(StringPiece s, size_t e, size_t* lf_cnt) {
#ifdef __SSE4_2__
- static const char ranges[] = "\n\n\\\\";
+ static const char ranges[] = "\0\0\n\n\\\\";
while (e < s.size()) {
- e += SkipUntilSSE42(s.data() + e, s.size() - e, ranges, 4);
+ e += SkipUntilSSE42(s.data() + e, s.size() - e, ranges, 6);
char c = s[e];
+ if (c == '\0')
+ break;
if (c == '\\') {
if (s[e+1] == '\n') {
e += 2;
diff --git a/strutil_test.cc b/strutil_test.cc
index 4d31c51..960c89a 100644
--- a/strutil_test.cc
+++ b/strutil_test.cc
@@ -130,6 +130,13 @@ void TestEscapeShell() {
ASSERT_EQ(EscapeShell("\\\n"), "\\\\\n");
}
+void TestFindEndOfLine() {
+ size_t lf_cnt = 0;
+ ASSERT_EQ(FindEndOfLine("foo", 0, &lf_cnt), 3);
+ char buf[10] = {'f', 'o', 'o', '\0', 'x', 'y'};
+ ASSERT_EQ(FindEndOfLine(StringPiece(buf, 6), 0, &lf_cnt), 3);
+}
+
} // namespace
int main() {
@@ -141,5 +148,6 @@ int main() {
TestHasWord();
TestNormalizePath();
TestEscapeShell();
+ TestFindEndOfLine();
assert(!g_failed);
}