diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-12-17 22:25:12 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-12-17 22:25:12 +0000 |
commit | c1f7bdcafb0c72ff8eba11dad2b1dccb5951fdbf (patch) | |
tree | 85f0207dbac0a9431835cca4e0f8183c7a14dc9e | |
parent | 8f74378976bdb83d5def4b1f4d9a4aa738f0d429 (diff) | |
download | external_llvm-c1f7bdcafb0c72ff8eba11dad2b1dccb5951fdbf.zip external_llvm-c1f7bdcafb0c72ff8eba11dad2b1dccb5951fdbf.tar.gz external_llvm-c1f7bdcafb0c72ff8eba11dad2b1dccb5951fdbf.tar.bz2 |
Modified Deserializer::ReadCStr to allow C-strings to be read into a
std::vector<char> starting from any index in the vector.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45129 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Bitcode/Deserialize.h | 2 | ||||
-rw-r--r-- | lib/Bitcode/Reader/Deserialize.cpp | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index 430100e..dc1cdc0 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -156,7 +156,7 @@ public: } char* ReadCStr(char* cstr = NULL, unsigned MaxLen=0, bool isNullTerm=true); - void ReadCStr(std::vector<char>& buff, bool isNullTerm=false); + void ReadCStr(std::vector<char>& buff, bool isNullTerm=false, unsigned Idx=0); template <typename T> inline T* ReadOwnedPtr(bool AutoRegister = true) { diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp index cb32f7d..8e0b62c 100644 --- a/lib/Bitcode/Reader/Deserialize.cpp +++ b/lib/Bitcode/Reader/Deserialize.cpp @@ -329,11 +329,18 @@ char* Deserializer::ReadCStr(char* cstr, unsigned MaxLen, bool isNullTerm) { return cstr; } -void Deserializer::ReadCStr(std::vector<char>& buff, bool isNullTerm) { +void Deserializer::ReadCStr(std::vector<char>& buff, bool isNullTerm, + unsigned Idx) { + unsigned len = ReadInt(); - buff.clear(); - buff.reserve(len); + // If Idx is beyond the current before size, reduce Idx to refer to the + // element after the last element. + if (Idx > buff.size()) + Idx = buff.size(); + + buff.reserve(len+Idx); + buff.resize(Idx); for (unsigned i = 0; i < len; ++i) buff.push_back((char) ReadInt()); |