Fix for problems signaled by clang static analyzer

Former-commit-id: 835f639c45509b0d55fe716e51e3285ea2a89da4
This commit is contained in:
Gawaboumga 2016-05-31 21:50:31 +02:00
parent 6a583b8231
commit db8a222f62
5 changed files with 43 additions and 26 deletions

View File

@ -132,7 +132,7 @@ namespace Nz
else else
difference = sequence - sequence2; difference = sequence - sequence2;
return 0; return difference;
} }
/*! /*!

View File

@ -143,7 +143,18 @@ namespace Nz
return false; return false;
} }
mode_t permissions; // TODO : get permission from first file mode_t permissions;
struct stat sb;
if (fstat(fd1, &sb) == -1) // get permission from first file
{
NazaraWarning("Could not get permissions of source file");
permissions = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
}
else
{
permissions = sb.st_mode & ~S_IFMT; // S_IFMT: bit mask for the file type bit field -> ~S_IFMT: general permissions
}
int fd2 = open64(targetPath.GetConstBuffer(), O_WRONLY | O_TRUNC, permissions); int fd2 = open64(targetPath.GetConstBuffer(), O_WRONLY | O_TRUNC, permissions);
if (fd2 == -1) if (fd2 == -1)
{ {

View File

@ -2827,21 +2827,15 @@ namespace Nz
{ {
const char* c = oldCharacters; const char* c = oldCharacters;
char character = Detail::ToLower(*ptr); char character = Detail::ToLower(*ptr);
bool found = false;
std::ptrdiff_t offset = ptr - m_sharedString->string.get();
EnsureOwnership();
ptr = &m_sharedString->string[offset];
do do
{ {
if (character == Detail::ToLower(*c)) if (character == Detail::ToLower(*c))
{ {
if (!found)
{
std::ptrdiff_t offset = ptr - m_sharedString->string.get();
EnsureOwnership();
ptr = &m_sharedString->string[offset];
found = true;
}
*ptr = replaceCharacter; *ptr = replaceCharacter;
++count; ++count;
break; break;
@ -2853,19 +2847,12 @@ namespace Nz
} }
else else
{ {
bool found = false; std::ptrdiff_t offset = ptr - m_sharedString->string.get();
EnsureOwnership();
ptr = &m_sharedString->string[offset];
while ((ptr = std::strpbrk(ptr, oldCharacters)) != nullptr) while ((ptr = std::strpbrk(ptr, oldCharacters)) != nullptr)
{ {
if (!found)
{
std::ptrdiff_t offset = ptr - m_sharedString->string.get();
EnsureOwnership();
ptr = &m_sharedString->string[offset];
found = true;
}
*ptr++ = replaceCharacter; *ptr++ = replaceCharacter;
++count; ++count;
} }

View File

@ -464,7 +464,6 @@ namespace Nz
void DepthRenderTechnique::DrawOpaqueModels(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const void DepthRenderTechnique::DrawOpaqueModels(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const
{ {
const Shader* lastShader = nullptr; const Shader* lastShader = nullptr;
const ShaderUniforms* shaderUniforms = nullptr;
for (auto& matIt : layer.opaqueModels) for (auto& matIt : layer.opaqueModels)
{ {
@ -488,7 +487,7 @@ namespace Nz
if (shader != lastShader) if (shader != lastShader)
{ {
// Index of uniforms in the shader // Index of uniforms in the shader
shaderUniforms = GetShaderUniforms(shader); GetShaderUniforms(shader);
lastShader = shader; lastShader = shader;
} }

View File

@ -122,5 +122,25 @@ SCENARIO("String", "[CORE][STRING]")
} }
} }
}*/ }*/
GIVEN("A string")
{
Nz::String replaceAny("abapeilomuky");
Nz::String replaceAnyWithCase("abapEilOmuky");
WHEN("We replace any of vowels after character 3")
{
unsigned int nbrOfChanges = replaceAny.ReplaceAny("aeiouy", '$', 3);
unsigned int nbrOfChangesWithCase = replaceAnyWithCase.ReplaceAny("AEIOUY", '$', 3);
THEN("These results are expected")
{
REQUIRE(replaceAny == "abap$$l$m$k$");
REQUIRE(nbrOfChanges == 5);
REQUIRE(replaceAnyWithCase == "abap$il$muky");
REQUIRE(nbrOfChangesWithCase == 2);
}
}
}
} }