Replaced sprintf() with snprintf()

dev
Tomasz Kapuściński 2023-04-15 02:05:12 +02:00
parent 2e7bf2a7a6
commit 37b403c46d
14 changed files with 84 additions and 82 deletions

View File

@ -23,6 +23,7 @@
#include "CBot/CBotInstr/CBotFunction.h"
#include "CBot/CBotInstr/CBotInstrCall.h"
#include <array>
#include <functional>
#include <sstream>
#include <iostream>
@ -53,9 +54,9 @@ void CBotDebug::DumpCompiledProgram(CBotProgram* program)
instructions[ptr] = instructionsNextId++;
}
char buffer[20];
sprintf(buffer, "instr%d", instructions[ptr]);
return std::string(buffer);
std::array<char, 20> buffer;
snprintf(buffer.data(), buffer.size(), "instr%d", instructions[ptr]);
return std::string(buffer.data());
};
std::function<void(CBotInstr*)> DumpInstr = [&](CBotInstr* instr)
{

View File

@ -20,6 +20,7 @@
#include "common/stringutils.h"
#include <array>
#include <cstdarg>
#include <cstdio>
#include <stdexcept>
@ -40,12 +41,12 @@ namespace
std::string VFormat(const char *fmt, va_list ap)
{
std::size_t size = 1024;
char stackbuf[1024];
std::array<char, 1024> stackbuf;
std::vector<char> dynamicbuf;
char *buf = &stackbuf[0];
char *buf = stackbuf.data();
size_t size = stackbuf.size();
while (1)
while (true)
{
int needed = vsnprintf (buf, size, fmt, ap);
@ -56,7 +57,7 @@ std::string VFormat(const char *fmt, va_list ap)
size = (needed > 0) ? (needed+1) : (size*2);
dynamicbuf.resize(size);
buf = &dynamicbuf[0];
buf = dynamicbuf.data();
}
}

View File

@ -251,9 +251,9 @@ std::vector<ModelTriangle> ReadOldModelV3(std::istream& stream, int totalTriangl
if (!triangle.material.variableDetail && t.texNum2 != 0)
{
char tex2Name[20] = { 0 };
std::sprintf(tex2Name, "dirty%.2d.png", t.texNum2);
triangle.material.detailTexture = tex2Name;
std::array<char, 20> tex2Name = {0};
std::snprintf(tex2Name.data(), tex2Name.size(), "dirty%.2d.png", t.texNum2);
triangle.material.detailTexture = tex2Name.data();
}
triangles.push_back(triangle);

View File

@ -108,18 +108,18 @@ CGL33ObjectRenderer::CGL33ObjectRenderer(CGL33Device* device)
m_shadowRegions = glGetUniformLocation(m_program, "uni_ShadowRegions");
GLchar name[64];
std::array<GLchar, 256> name;
for (int i = 0; i < 4; i++)
{
sprintf(name, "uni_ShadowParam[%d].transform", i);
m_shadows[i].transform = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].transform", i);
m_shadows[i].transform = glGetUniformLocation(m_program, name.data());
sprintf(name, "uni_ShadowParam[%d].uv_offset", i);
m_shadows[i].offset = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].uv_offset", i);
m_shadows[i].offset = glGetUniformLocation(m_program, name.data());
sprintf(name, "uni_ShadowParam[%d].uv_scale", i);
m_shadows[i].scale = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].uv_scale", i);
m_shadows[i].scale = glGetUniformLocation(m_program, name.data());
}
// Set texture units
@ -457,7 +457,7 @@ void CGL33ObjectRenderer::DrawObject(const CVertexBuffer* buffer)
glBindVertexArray(b->GetVAO());
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, b->Size());
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, static_cast<GLsizei>(b->Size()));
}
void CGL33ObjectRenderer::DrawPrimitive(PrimitiveType type, int count, const Vertex3D* vertices)

View File

@ -102,18 +102,18 @@ CGL33TerrainRenderer::CGL33TerrainRenderer(CGL33Device* device)
m_shadowRegions = glGetUniformLocation(m_program, "uni_ShadowRegions");
GLchar name[64];
std::array<GLchar, 256> name;
for (int i = 0; i < 4; i++)
{
sprintf(name, "uni_ShadowParam[%d].transform", i);
m_shadows[i].transform = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].transform", i);
m_shadows[i].transform = glGetUniformLocation(m_program, name.data());
sprintf(name, "uni_ShadowParam[%d].uv_offset", i);
m_shadows[i].offset = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].uv_offset", i);
m_shadows[i].offset = glGetUniformLocation(m_program, name.data());
sprintf(name, "uni_ShadowParam[%d].uv_scale", i);
m_shadows[i].scale = glGetUniformLocation(m_program, name);
snprintf(name.data(), name.size(), "uni_ShadowParam[%d].uv_scale", i);
m_shadows[i].scale = glGetUniformLocation(m_program, name.data());
}
// Set texture units
@ -373,5 +373,5 @@ void CGL33TerrainRenderer::DrawObject(const glm::mat4& matrix, const CVertexBuff
SetModelMatrix(matrix);
glBindVertexArray(b->GetVAO());
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, b->Size());
glDrawArrays(TranslateGfxPrimitive(b->GetType()), 0, static_cast<GLsizei>(b->Size()));
}

View File

@ -3117,9 +3117,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
{
if (line->GetParam("rank")->IsDefined())
{
char tex[20] = { 0 };
sprintf(tex, "dirty%.2d.png", line->GetParam("rank")->AsInt());
m_engine->SetSecondTexture(tex);
std::array<char, 20> tex = { 0 };
snprintf(tex.data(), tex.size(), "dirty%.2d.png", line->GetParam("rank")->AsInt());
m_engine->SetSecondTexture(tex.data());
}
else
{
@ -4016,8 +4016,8 @@ void CRobotMain::ChangeColor()
colorNew2.g = 0.0f;
colorNew2.b = 0.0f;
char name[100];
sprintf(name, "textures/objects/face%.2d.png", face+1);
std::array<char, 100> name;
snprintf(name.data(), name.size(), "textures/objects/face%.2d.png", face+1);
exclu[0] = { 105.0f / 256.0f, 47.0f / 166.0f };
exclu[1] = { 153.0f / 256.0f, 79.0f / 166.0f }; // blue canister
exclu[2] = { 0.0f, 0.0f };
@ -5567,9 +5567,9 @@ void CRobotMain::UpdateSpeedLabel()
}
else
{
char text[10];
sprintf(text, "x%.1f", speed);
pb->SetName(text);
std::array<char, 10> text;
snprintf(text.data(), text.size(), "x%.1f", speed);
pb->SetName(text.data());
pb->SetState(Ui::STATE_VISIBLE);
}
}

View File

@ -107,7 +107,7 @@ Error CMotionHuman::SetAction(int action, float time)
void CMotionHuman::Create(glm::vec3 pos, float angle, ObjectType type,
float power, Gfx::COldModelManager* modelManager)
{
char filename[100];
std::array<char, 1000> filename;
int rank, option, face, glasses;
m_object->SetType(type);
@ -119,8 +119,8 @@ void CMotionHuman::Create(glm::vec3 pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_VEHICLE); // this is a moving object
m_object->SetObjectRank(0, rank);
face = m_main->GetGamerFace();
sprintf(filename, "human2h%d", face+1);
modelManager->AddModelReference(filename, false, rank);
snprintf(filename.data(), filename.size(), "human2h%d", face+1);
modelManager->AddModelReference(filename.data(), false, rank);
glasses = m_main->GetGamerGlasses();
if ( glasses != 0 )
@ -129,8 +129,8 @@ void CMotionHuman::Create(glm::vec3 pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(1, rank);
m_object->SetObjectParent(1, 0);
sprintf(filename, "human2g%d", glasses);
modelManager->AddModelReference(filename, false, rank);
snprintf(filename.data(), filename.size(), "human2g%d", glasses);
modelManager->AddModelReference(filename.data(), false, rank);
}
CreatePhysics(type);
@ -171,15 +171,15 @@ void CMotionHuman::Create(glm::vec3 pos, float angle, ObjectType type,
if (option == 0) // head in helmet?
{
face = m_main->GetGamerFace();
sprintf(filename, "human2c%d", face+1);
modelManager->AddModelReference(filename, false, rank);
snprintf(filename.data(), filename.size(), "human2c%d", face+1);
modelManager->AddModelReference(filename.data(), false, rank);
}
else if (option == 1 || // head without helmet?
option == 2) // without a backpack?
{
face = m_main->GetGamerFace();
sprintf(filename, "human2h%d", face+1);
modelManager->AddModelReference(filename, false, rank);
snprintf(filename.data(), filename.size(), "human2h%d", face+1);
modelManager->AddModelReference(filename.data(), false, rank);
}
}
else if (type == OBJECT_TECH)
@ -202,8 +202,8 @@ void CMotionHuman::Create(glm::vec3 pos, float angle, ObjectType type,
m_engine->SetObjectType(m_glassesRank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(15, m_glassesRank);
m_object->SetObjectParent(15, 1);
sprintf(filename, "human2g%d", glasses);
modelManager->AddModelReference(filename, false, m_glassesRank);
snprintf(filename.data(), filename.size(), "human2g%d", glasses);
modelManager->AddModelReference(filename.data(), false, m_glassesRank);
}
// Creates the right arm.

View File

@ -74,7 +74,7 @@ void CMotionSpider::Create(glm::vec3 pos, float angle, ObjectType type,
float power, Gfx::COldModelManager* modelManager)
{
int rank, i, j, parent;
char name[50];
std::array<char, 50> name;
float table[] =
{
@ -136,7 +136,7 @@ void CMotionSpider::Create(glm::vec3 pos, float angle, ObjectType type,
{
for ( j=0 ; j<4 ; j++ )
{
sprintf(name, "spider%d", j+3); // 3..6
snprintf(name.data(), name.size(), "spider%d", j+3); // 3..6
// Creates the right leg.
rank = m_engine->CreateObject();
@ -145,7 +145,7 @@ void CMotionSpider::Create(glm::vec3 pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 3+i*4+j-1;
m_object->SetObjectParent(3+i*4+j, parent);
modelManager->AddModelReference(name, false, rank);
modelManager->AddModelReference(name.data(), false, rank);
pos.x = table[i*12+j*3+0];
pos.y = table[i*12+j*3+1];
pos.z = table[i*12+j*3+2];
@ -158,7 +158,7 @@ void CMotionSpider::Create(glm::vec3 pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 19+i*4+j-1;
m_object->SetObjectParent(19+i*4+j, parent);
modelManager->AddModelReference(name, true, rank);
modelManager->AddModelReference(name.data(), true, rank);
pos.x = table[i*12+j*3+0];
pos.y = table[i*12+j*3+1];
pos.z = -table[i*12+j*3+2];

View File

@ -92,7 +92,7 @@ void CMotionVehicle::Create(glm::vec3 pos, float angle, ObjectType type,
{
int rank, i, j, parent;
Gfx::Color color;
char name[50];
std::array<char, 50> name;
m_object->SetType(type);
@ -684,7 +684,7 @@ void CMotionVehicle::Create(glm::vec3 pos, float angle, ObjectType type,
{
for ( j=0 ; j<3 ; j++ )
{
sprintf(name, "ant%d", j+4); // 4..6
snprintf(name.data(), name.size(), "ant%d", j+4); // 4..6
// Creates the right leg.
rank = m_engine->CreateObject();
@ -693,7 +693,7 @@ void CMotionVehicle::Create(glm::vec3 pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 6+i*3+j-1;
m_object->SetObjectParent(6+i*3+j, parent);
modelManager->AddModelReference(name, false, rank, m_object->GetTeam());
modelManager->AddModelReference(name.data(), false, rank, m_object->GetTeam());
pos.x = table[i*9+j*3+0];
pos.y = table[i*9+j*3+1];
pos.z = table[i*9+j*3+2];
@ -706,7 +706,7 @@ void CMotionVehicle::Create(glm::vec3 pos, float angle, ObjectType type,
if ( j == 0 ) parent = 0;
else parent = 15+i*3+j-1;
m_object->SetObjectParent(15+i*3+j, parent);
modelManager->AddModelReference(name, true, rank, m_object->GetTeam());
modelManager->AddModelReference(name.data(), true, rank, m_object->GetTeam());
pos.x = table[i*9+j*3+0];
pos.y = table[i*9+j*3+1];
pos.z = -table[i*9+j*3+2];
@ -900,8 +900,8 @@ void CMotionVehicle::Create(glm::vec3 pos, float angle, ObjectType type,
m_engine->SetObjectType(rank, Gfx::ENG_OBJTYPE_DESCENDANT);
m_object->SetObjectRank(10+i, rank);
m_object->SetObjectParent(10+i, 1);
sprintf(name, "drawer%d", 10+i);
modelManager->AddModelReference(name, false, rank, m_object->GetTeam());
snprintf(name.data(), name.size(), "drawer%d", 10+i);
modelManager->AddModelReference(name.data(), false, rank, m_object->GetTeam());
m_object->SetPartPosition(10+i, glm::vec3(0.0f, 0.0f, 0.0f));
m_object->SetPartRotationY(10+i, 45.0f*Math::PI/180.0f*i);
}

View File

@ -626,9 +626,9 @@ void CAutoInfo::UpdateList()
for (int i = 0; i < static_cast<int>(infoList.size()); i++)
{
char text[100];
sprintf(text, "%s = %.2f", infoList[i].name.c_str(), infoList[i].value);
pl->SetItemName(i, text);
std::array<char, 100> text;
snprintf(text.data(), text.size(), "%s = %.2f", infoList[i].name.c_str(), infoList[i].value);
pl->SetItemName(i, text.data());
}
}

View File

@ -873,7 +873,7 @@ void CScript::New(Ui::CEdit* edit, const char* name)
{
char res[100];
char text[100];
char script[500];
std::array<char, 500> script;
char buffer[500];
int cursor1, cursor2, len, i, j;
@ -883,8 +883,8 @@ void CScript::New(Ui::CEdit* edit, const char* name)
if ( name[0] == 0 ) strcpy(text, res);
else strcpy(text, name);
sprintf(script, "extern void object::%s()\n{\n\t\n\t\n\t\n}\n", text);
edit->SetText(script, false);
snprintf(script.data(), script.size(), "extern void object::%s()\n{\n\t\n\t\n\t\n}\n", text);
edit->SetText(script.data(), false);
if ( strcmp(text, res) == 0 )
{
@ -946,7 +946,7 @@ void CScript::New(Ui::CEdit* edit, const char* name)
if ( buffer[i+0] == '%' &&
buffer[i+1] == 's' )
{
strcpy(script+j, text);
strcpy(script.data()+j, text);
j += strlen(text);
i += 2;
continue;
@ -962,7 +962,7 @@ void CScript::New(Ui::CEdit* edit, const char* name)
script[j++] = buffer[i++];
}
script[j] = 0;
edit->SetText(script, false);
edit->SetText(script.data(), false);
cursor2 = cursor1;
edit->SetCursor(cursor2, cursor1);

View File

@ -264,7 +264,7 @@ EditValueType CEditValue::GetType()
void CEditValue::SetValue(float value, bool bSendMessage)
{
char text[100];
std::array<char, 100> text;
if ( m_edit == nullptr ) return;
@ -272,20 +272,20 @@ void CEditValue::SetValue(float value, bool bSendMessage)
if ( m_type == EVT_INT )
{
sprintf(text, "%d", static_cast<int>(value));
snprintf(text.data(), text.size(), "%d", static_cast<int>(value));
}
if ( m_type == EVT_FLOAT )
{
sprintf(text, "%.2f", value);
snprintf(text.data(), text.size(), "%.2f", value);
}
if ( m_type == EVT_100 )
{
sprintf(text, "%d%%", static_cast<int>(value*100.0f));
snprintf(text.data(), text.size(), "%d%%", static_cast<int>(value*100.0f));
}
m_edit->SetText(text);
m_edit->SetText(text.data());
if ( bSendMessage )
{

View File

@ -2116,7 +2116,7 @@ void CObjectInterface::UpdateInterface()
void CObjectInterface::UpdateScript(CWindow *pw)
{
CList* pl;
char name[100];
std::array<char, 100> name;
pl = static_cast< CList* >(pw->SearchControl(EVENT_OBJECT_PROGLIST));
if ( pl == nullptr ) return;
@ -2124,22 +2124,22 @@ void CObjectInterface::UpdateScript(CWindow *pw)
pl->Flush();
for ( int i = 0 ; i < m_programStorage->GetProgramCount() ; i++ )
{
sprintf(name, "%d", i+1);
snprintf(name.data(), name.size(), "%d", i+1);
std::string title = m_programStorage->GetProgram(i)->script->GetTitle();
if ( !title.empty() )
{
if(!m_programStorage->GetProgram(i)->readOnly)
{
sprintf(name, "%d: %s", i+1, title.c_str());
snprintf(name.data(), name.size(), "%d: %s", i+1, title.c_str());
}
else
{
sprintf(name, "*%d: %s", i+1, title.c_str());
snprintf(name.data(), name.size(), "*%d: %s", i+1, title.c_str());
}
}
pl->SetItemName(i, name);
pl->SetItemName(i, name.data());
}
pl->SetSelect(m_selScript);

View File

@ -408,7 +408,7 @@ void CScreenLevelList::UpdateSceneChap(int &chap)
CList* pl;
std::string fileName;
char line[500] = {0};
std::array<char, 500> line = { 0 };
bool bPassed;
pw = static_cast<CWindow*>(m_interface->SearchControl(EVENT_WINDOW5));
@ -449,15 +449,15 @@ void CScreenLevelList::UpdateSceneChap(int &chap)
try
{
levelParser.Load();
sprintf(line, "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str());
snprintf(line.data(), line.size(), "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str());
}
catch (CLevelParserException& e)
{
sprintf(line, "%s", (std::string("[ERROR]: ")+e.what()).c_str());
snprintf(line.data(), line.size(), "%s", (std::string("[ERROR]: ")+e.what()).c_str());
}
bPassed = m_main->GetPlayerProfile()->GetLevelPassed(m_category, j+1, 0);
pl->SetItemName(j, line);
pl->SetItemName(j, line.data());
pl->SetCheck(j, bPassed);
pl->SetEnable(j, true);
@ -488,7 +488,7 @@ void CScreenLevelList::UpdateSceneList(int chap, int &sel)
CWindow* pw;
CList* pl;
std::string fileName;
char line[500] = {0};
std::array<char, 500> line = {0};
int j;
bool bPassed;
@ -516,15 +516,15 @@ void CScreenLevelList::UpdateSceneList(int chap, int &sel)
try
{
levelParser.Load();
sprintf(line, "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str());
snprintf(line.data(), line.size(), "%d: %s", j+1, levelParser.Get("Title")->GetParam("text")->AsString().c_str());
}
catch (CLevelParserException& e)
{
sprintf(line, "%s", (std::string("[ERROR]: ")+e.what()).c_str());
snprintf(line.data(), line.size(), "%s", (std::string("[ERROR]: ")+e.what()).c_str());
}
bPassed = m_main->GetPlayerProfile()->GetLevelPassed(m_category, chap+1, j+1);
pl->SetItemName(j, line);
pl->SetItemName(j, line.data());
pl->SetCheck(j, bPassed);
pl->SetEnable(j, true);