Commit 731d908c authored by Derek Mauro's avatar Derek Mauro
Browse files

Merge pull request #2677 from IYP-Programer-Yeah:fix-file-path-normalize-function

PiperOrigin-RevId: 312486861
parents 99ea9ca3 c09fbb23
...@@ -349,33 +349,21 @@ FilePath FilePath::RemoveTrailingPathSeparator() const { ...@@ -349,33 +349,21 @@ FilePath FilePath::RemoveTrailingPathSeparator() const {
// For example, "bar///foo" becomes "bar/foo". Does not eliminate other // For example, "bar///foo" becomes "bar/foo". Does not eliminate other
// redundancies that might be in a pathname involving "." or "..". // redundancies that might be in a pathname involving "." or "..".
void FilePath::Normalize() { void FilePath::Normalize() {
if (pathname_.c_str() == nullptr) { std::string normalized_pathname;
pathname_ = ""; normalized_pathname.reserve(pathname_.length());
return;
} for (const char character : pathname_) {
const char* src = pathname_.c_str(); if (!IsPathSeparator(character)) {
char* const dest = new char[pathname_.length() + 1]; normalized_pathname.push_back(character);
char* dest_ptr = dest; } else if (normalized_pathname.empty() ||
memset(dest_ptr, 0, pathname_.length() + 1); normalized_pathname.back() != kPathSeparator) {
normalized_pathname.push_back(kPathSeparator);
while (*src != '\0') {
*dest_ptr = *src;
if (!IsPathSeparator(*src)) {
src++;
} else { } else {
#if GTEST_HAS_ALT_PATH_SEP_ continue;
if (*dest_ptr == kAlternatePathSeparator) {
*dest_ptr = kPathSeparator;
}
#endif
while (IsPathSeparator(*src))
src++;
} }
dest_ptr++;
} }
*dest_ptr = '\0';
pathname_ = dest; pathname_ = normalized_pathname;
delete[] dest;
} }
} // namespace internal } // namespace internal
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment