diff options
author | NAKAMURA Takumi <geek4civic@gmail.com> | 2011-10-24 03:27:19 +0000 |
---|---|---|
committer | NAKAMURA Takumi <geek4civic@gmail.com> | 2011-10-24 03:27:19 +0000 |
commit | 66c9e4ffd57235edbd158b4d5890b2b91e920e35 (patch) | |
tree | 794a3df7fdd6d842558402b1337e5fdbd7265077 /llvm/lib | |
parent | 6f2e6522d93152979eee1832652661f2c230f861 (diff) | |
download | bcm5719-llvm-66c9e4ffd57235edbd158b4d5890b2b91e920e35.tar.gz bcm5719-llvm-66c9e4ffd57235edbd158b4d5890b2b91e920e35.zip |
Windows/Path.inc: [PR8460] Get rid of ScopedNullTerminator. Thanks to Zvi Rackover!
llvm-svn: 142785
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Support/Windows/Path.inc | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc index 42a92f9c6df..8a5edccab08 100644 --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -66,29 +66,20 @@ Path::operator=(StringRef that) { return *this; } -// push_back 0 on create, and pop_back on delete. -struct ScopedNullTerminator { - std::string &str; - ScopedNullTerminator(std::string &s) : str(s) { str.push_back(0); } - ~ScopedNullTerminator() { - // str.pop_back(); But wait, C++03 doesn't have this... - assert(!str.empty() && str[str.size() - 1] == 0 - && "Null char not present!"); - str.resize(str.size() - 1); - } -}; - bool Path::isValid() const { if (path.empty()) return false; + size_t len = path.size(); + // If there is a null character, it and all its successors are ignored. + size_t pos = path.find_first_of('\0'); + if (pos != std::string::npos) + len = pos; + // If there is a colon, it must be the second character, preceded by a letter // and followed by something. - size_t len = path.size(); - // This code assumes that path is null terminated, so make sure it is. - ScopedNullTerminator snt(path); - size_t pos = path.rfind(':',len); + pos = path.rfind(':',len); size_t rootslash = 0; if (pos != std::string::npos) { if (pos != 1 || !isalpha(path[0]) || len < 3) @@ -118,13 +109,13 @@ Path::isValid() const { for (pos = 0; pos < len; ++pos) { // A component may not end in a space. if (path[pos] == ' ') { - if (path[pos+1] == '/' || path[pos+1] == '\0') + if (pos+1 == len || path[pos+1] == '/' || path[pos+1] == '\0') return false; } // A component may not end in a period. if (path[pos] == '.') { - if (path[pos+1] == '/' || path[pos+1] == '\0') { + if (pos+1 == len || path[pos+1] == '/') { // Unless it is the pseudo-directory "."... if (pos == 0 || path[pos-1] == '/' || path[pos-1] == ':') return true; |