aboutsummaryrefslogtreecommitdiff
path: root/strutil.cc
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-16 17:51:23 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-06-18 11:25:43 +0900
commitf91d6820fdc11553a5f8575bcb3afc75a9ed6e06 (patch)
treeb9030c1800f31ea967d1b547252265d5e9bc577d /strutil.cc
parent63e68fc5eea4e7b5366aba9db85b24d3655ead88 (diff)
[C++] Fix strutil implementations
Diffstat (limited to 'strutil.cc')
-rw-r--r--strutil.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/strutil.cc b/strutil.cc
index 121697b..d03d517 100644
--- a/strutil.cc
+++ b/strutil.cc
@@ -81,7 +81,7 @@ void AppendString(StringPiece str, string* out) {
bool HasPrefix(StringPiece str, StringPiece prefix) {
ssize_t size_diff = str.size() - prefix.size();
- return size_diff >= 0 && str.substr(0, size_diff) == prefix;
+ return size_diff >= 0 && str.substr(0, prefix.size()) == prefix;
}
bool HasSuffix(StringPiece str, StringPiece suffix) {
@@ -110,7 +110,7 @@ void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst,
}
if (HasPrefix(str, pat.substr(0, pat_percent_index)) &&
- HasPrefix(str, pat.substr(pat_percent_index + 1))) {
+ HasSuffix(str, pat.substr(pat_percent_index + 1))) {
size_t subst_percent_index = subst.find('%');
if (subst_percent_index == string::npos) {
AppendString(subst, out);
@@ -118,7 +118,7 @@ void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst,
} else {
AppendString(subst.substr(0, subst_percent_index), out);
AppendString(str.substr(pat_percent_index,
- str.size() - pat_percent_index - 1), out);
+ str.size() - pat.size() + 1), out);
AppendString(subst.substr(subst_percent_index + 1), out);
return;
}
@@ -128,8 +128,10 @@ void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst,
void AppendSubstRef(StringPiece str, StringPiece pat, StringPiece subst,
string* out) {
- if (pat.find('%') != string::npos && subst.find('%') != string::npos)
+ if (pat.find('%') != string::npos && subst.find('%') != string::npos) {
AppendSubstPattern(pat, subst, str, out);
+ return;
+ }
StringPiece s = TrimSuffix(str, pat);
out->append(s.begin(), s.end());
out->append(subst.begin(), subst.end());