[scudo] Remove ScopedString::Length
Differential Revision: https://reviews.llvm.org/D103725
GitOrigin-RevId: 70b29213eb3446ffb85678da3cc447f478e27e15
diff --git a/string_utils.cpp b/string_utils.cpp
index ca80834..acf8588 100644
--- a/string_utils.cpp
+++ b/string_utils.cpp
@@ -219,7 +219,6 @@
}
void ScopedString::append(const char *Format, va_list Args) {
- RAW_CHECK(Length <= String.size());
va_list ArgsCopy;
va_copy(ArgsCopy, Args);
// formatString doesn't currently support a null buffer or zero buffer length,
@@ -228,11 +227,13 @@
char C[1];
const uptr AdditionalLength =
static_cast<uptr>(formatString(C, sizeof(C), Format, Args)) + 1;
+ const uptr Length = length();
String.resize(Length + AdditionalLength);
- formatString(String.data() + Length, AdditionalLength, Format, ArgsCopy);
+ const uptr FormattedLength = static_cast<uptr>(formatString(
+ String.data() + Length, String.size() - Length, Format, ArgsCopy));
+ RAW_CHECK(data()[length()] == '\0');
+ RAW_CHECK(FormattedLength + 1 == AdditionalLength);
va_end(ArgsCopy);
- Length = strlen(String.data());
- RAW_CHECK(Length < String.size());
}
FORMAT(2, 3)
diff --git a/string_utils.h b/string_utils.h
index 7d9c539..06d23d4 100644
--- a/string_utils.h
+++ b/string_utils.h
@@ -19,12 +19,11 @@
class ScopedString {
public:
explicit ScopedString() { String.push_back('\0'); }
- uptr length() { return Length; }
+ uptr length() { return String.size() - 1; }
const char *data() { return String.data(); }
void clear() {
String.clear();
String.push_back('\0');
- Length = 0;
}
void append(const char *Format, va_list Args);
void append(const char *Format, ...);
@@ -32,7 +31,6 @@
private:
Vector<char> String;
- uptr Length = 0;
};
int formatString(char *Buffer, uptr BufferLength, const char *Format, ...);