Use a std::stringstream for Program's InfoLog.
This should help WebKit avoid needing to apply a local patch.
Also clean up the style in this file a bit.
BUG=angleproject:307,angleproject:992
Change-Id: I41ecf7cbfa20b469b3731215ef28cb36253ba186
Reviewed-on: https://chromium-review.googlesource.com/269849
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/Program.cpp b/src/libANGLE/Program.cpp
index 7a0f373..a7de23d 100644
--- a/src/libANGLE/Program.cpp
+++ b/src/libANGLE/Program.cpp
@@ -55,38 +55,32 @@
{
}
-InfoLog::InfoLog() : mInfoLog(NULL)
+InfoLog::InfoLog()
{
}
InfoLog::~InfoLog()
{
- delete[] mInfoLog;
}
-
-int InfoLog::getLength() const
+size_t InfoLog::getLength() const
{
- if (!mInfoLog)
- {
- return 0;
- }
- else
- {
- return strlen(mInfoLog) + 1;
- }
+ const std::string &logString = mStream.str();
+ return logString.empty() ? 0 : logString.length() + 1;
}
void InfoLog::getLog(GLsizei bufSize, GLsizei *length, char *infoLog)
{
- int index = 0;
+ size_t index = 0;
if (bufSize > 0)
{
- if (mInfoLog)
+ const std::string str(mStream.str());
+
+ if (!str.empty())
{
- index = std::min(bufSize - 1, (int)strlen(mInfoLog));
- memcpy(infoLog, mInfoLog, index);
+ index = std::min(static_cast<size_t>(bufSize) - 1, str.length());
+ memcpy(infoLog, str.c_str(), index);
}
infoLog[index] = '\0';
@@ -94,7 +88,7 @@
if (length)
{
- *length = index;
+ *length = static_cast<GLsizei>(index);
}
}
@@ -116,7 +110,7 @@
}
while (found != std::string::npos);
- append("%s", msg.c_str());
+ mStream << message << std::endl;
}
void InfoLog::append(const char *format, ...)
@@ -128,52 +122,27 @@
va_list vararg;
va_start(vararg, format);
- size_t infoLength = vsnprintf(NULL, 0, format, vararg);
+ std::string tempString(FormatString(format, vararg));
va_end(vararg);
- char *logPointer = NULL;
-
- if (!mInfoLog)
- {
- mInfoLog = new char[infoLength + 2];
- logPointer = mInfoLog;
- }
- else
- {
- size_t currentlogLength = strlen(mInfoLog);
- char *newLog = new char[currentlogLength + infoLength + 2];
- strcpy(newLog, mInfoLog);
-
- delete[] mInfoLog;
- mInfoLog = newLog;
-
- logPointer = mInfoLog + currentlogLength;
- }
-
- va_start(vararg, format);
- vsnprintf(logPointer, infoLength, format, vararg);
- va_end(vararg);
-
- logPointer[infoLength] = 0;
- strcpy(logPointer + infoLength, "\n");
+ mStream << tempString << std::endl;
}
void InfoLog::reset()
{
- if (mInfoLog)
- {
- delete [] mInfoLog;
- mInfoLog = NULL;
- }
}
VariableLocation::VariableLocation()
- : name(), element(0), index(0)
+ : name(),
+ element(0),
+ index(0)
{
}
VariableLocation::VariableLocation(const std::string &name, unsigned int element, unsigned int index)
- : name(name), element(element), index(index)
+ : name(name),
+ element(element),
+ index(index)
{
}
@@ -192,8 +161,8 @@
mValidated(false),
mTransformFeedbackVaryings(),
mTransformFeedbackBufferMode(GL_NONE),
- mFragmentShader(NULL),
- mVertexShader(NULL),
+ mFragmentShader(nullptr),
+ mVertexShader(nullptr),
mLinked(false),
mDeleteStatus(false),
mRefCount(0),
@@ -210,12 +179,12 @@
{
unlink(true);
- if (mVertexShader != NULL)
+ if (mVertexShader != nullptr)
{
mVertexShader->release();
}
- if (mFragmentShader != NULL)
+ if (mFragmentShader != nullptr)
{
mFragmentShader->release();
}
@@ -260,7 +229,7 @@
}
mVertexShader->release();
- mVertexShader = NULL;
+ mVertexShader = nullptr;
}
else if (shader->getType() == GL_FRAGMENT_SHADER)
{
@@ -270,7 +239,7 @@
}
mFragmentShader->release();
- mFragmentShader = NULL;
+ mFragmentShader = nullptr;
}
else UNREACHABLE();
@@ -387,13 +356,13 @@
if (mFragmentShader)
{
mFragmentShader->release();
- mFragmentShader = NULL;
+ mFragmentShader = nullptr;
}
if (mVertexShader)
{
mVertexShader->release();
- mVertexShader = NULL;
+ mVertexShader = nullptr;
}
}
@@ -552,7 +521,7 @@
GLint Program::getBinaryLength() const
{
GLint length;
- Error error = saveBinary(NULL, NULL, std::numeric_limits<GLint>::max(), &length);
+ Error error = saveBinary(nullptr, nullptr, std::numeric_limits<GLint>::max(), &length);
if (error.isError())
{
return 0;
@@ -583,7 +552,7 @@
int Program::getInfoLogLength() const
{
- return mInfoLog.getLength();
+ return static_cast<int>(mInfoLog.getLength());
}
void Program::getInfoLog(GLsizei bufSize, GLsizei *length, char *infoLog)