diff --git a/Source/Core/Common/CDUtils.cpp b/Source/Core/Common/CDUtils.cpp index 569ceb3c3baa..763fbf7f4550 100644 --- a/Source/Core/Common/CDUtils.cpp +++ b/Source/Core/Common/CDUtils.cpp @@ -2,6 +2,7 @@ #include "CDUtils.h" #include "Common.h" +#include "StringUtil.h" #include // for std::unique_ptr #ifdef _WIN32 @@ -150,10 +151,10 @@ static struct }; // Returns true if a device is a block or char device and not a symbolic link -bool is_device(const char *source_name) +bool is_device(const std::string& source_name) { struct stat buf; - if (0 != lstat(source_name, &buf)) + if (0 != lstat(source_name.c_str(), &buf)) return false; return ((S_ISBLK(buf.st_mode) || S_ISCHR(buf.st_mode)) && @@ -161,17 +162,15 @@ bool is_device(const char *source_name) } // Check a device to see if it is a DVD/CD-ROM drive -static bool is_cdrom(const char *drive, char *mnttype) +static bool is_cdrom(const std::string& drive, char *mnttype) { - bool is_cd=false; - int cdfd; - // Check if the device exists if (!is_device(drive)) return(false); + bool is_cd=false; // If it does exist, verify that it is a cdrom/dvd drive - cdfd = open(drive, (O_RDONLY|O_NONBLOCK), 0); + int cdfd = open(drive.c_str(), (O_RDONLY|O_NONBLOCK), 0); if ( cdfd >= 0 ) { #ifdef __linux__ @@ -186,21 +185,16 @@ static bool is_cdrom(const char *drive, char *mnttype) // Returns a pointer to an array of strings with the device names std::vector cdio_get_devices () { - unsigned int i; - char drive[40]; std::vector drives; - // Scan the system for DVD/CD-ROM drives. - for ( i=0; checklist[i].format; ++i ) + for (unsigned int i = 0; checklist[i].format; ++i) { - unsigned int j; - for ( j=checklist[i].num_min; j<=checklist[i].num_max; ++j ) + for (unsigned int j = checklist[i].num_min; j <= checklist[i].num_max; ++j) { - sprintf(drive, checklist[i].format, j); - if ( (is_cdrom(drive, NULL)) > 0 ) + std::string drive = StringFromFormat(checklist[i].format, j); + if ( (is_cdrom(drive.c_str(), NULL)) > 0 ) { - std::string str = drive; - drives.push_back(str); + drives.push_back(std::move(drive)); } } } @@ -222,17 +216,10 @@ bool cdio_is_cdrom(std::string device) #endif std::vector devices = cdio_get_devices(); - bool res = false; - for (auto& odevice : devices) + for (const std::string& d : devices) { - if (strncmp(odevice.c_str(), device.c_str(), MAX_PATH) == 0) - { - res = true; - break; - } + if (d == device) + return true; } - - devices.clear(); - return res; + return false; } - diff --git a/Source/Core/Common/IniFile.h b/Source/Core/Common/IniFile.h index abfb58b0a6c1..005f866f6583 100644 --- a/Source/Core/Common/IniFile.h +++ b/Source/Core/Common/IniFile.h @@ -140,6 +140,10 @@ class IniFile void SetLines(const char* sectionName, const std::vector &lines); bool GetLines(const char* sectionName, std::vector& lines, const bool remove_comments = true) const; + inline bool DeleteKey(const char* sectionName, const std::string& key) + { + return DeleteKey(sectionName, key.c_str()); + } bool DeleteKey(const char* sectionName, const char* key); bool DeleteSection(const char* sectionName); diff --git a/Source/Core/Common/Log.h b/Source/Core/Common/Log.h index b0f3519579f0..8c7a1eb33122 100644 --- a/Source/Core/Common/Log.h +++ b/Source/Core/Common/Log.h @@ -77,6 +77,8 @@ enum LOG_LEVELS LDEBUG = DEBUG_LEVEL, }; +static const char LOG_LEVEL_TO_CHAR[7] = "-NEWID"; + #define LOGTYPES_LEVELS LogTypes::LOG_LEVELS #define LOGTYPES_TYPE LogTypes::LOG_TYPE diff --git a/Source/Core/Common/LogManager.cpp b/Source/Core/Common/LogManager.cpp index 50c6ab400a09..5fe218b2f42f 100644 --- a/Source/Core/Common/LogManager.cpp +++ b/Source/Core/Common/LogManager.cpp @@ -114,7 +114,6 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char *file, int line, const char *format, va_list args) { char temp[MAX_MSGLEN]; - char msg[MAX_MSGLEN * 2]; LogContainer *log = m_Log[type]; if (!log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners()) @@ -122,15 +121,15 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, CharArrayFromFormatV(temp, MAX_MSGLEN, format, args); - static const char level_to_char[7] = "-NEWID"; - sprintf(msg, "%s %s:%u %c[%s]: %s\n", - Common::Timer::GetTimeFormatted().c_str(), - file, line, level_to_char[(int)level], - log->GetShortName(), temp); + std::string msg = StringFromFormat("%s %s:%u %c[%s]: %s\n", + Common::Timer::GetTimeFormatted().c_str(), + file, line, + LogTypes::LOG_LEVEL_TO_CHAR[(int)level], + log->GetShortName(), temp); #ifdef ANDROID - Host_SysMessage(msg); + Host_SysMessage(msg.c_str()); #endif - log->Trigger(level, msg); + log->Trigger(level, msg.c_str()); } void LogManager::Init() diff --git a/Source/Core/Common/MemArena.cpp b/Source/Core/Common/MemArena.cpp index e7f3911e91db..699005dd52ea 100644 --- a/Source/Core/Common/MemArena.cpp +++ b/Source/Core/Common/MemArena.cpp @@ -6,6 +6,7 @@ #include "MemoryUtil.h" #include "MemArena.h" +#include "StringUtil.h" #ifdef _WIN32 #include @@ -57,20 +58,21 @@ void MemArena::GrabLowMemSpace(size_t size) return; } #else - char fn[64]; for (int i = 0; i < 10000; i++) { - sprintf(fn, "dolphinmem.%d", i); - fd = shm_open(fn, O_RDWR | O_CREAT | O_EXCL, 0600); + std::string file_name = StringFromFormat("dolphinmem.%d", i); + fd = shm_open(file_name.c_str(), O_RDWR | O_CREAT | O_EXCL, 0600); if (fd != -1) + { + shm_unlink(file_name.c_str()); break; - if (errno != EEXIST) + } + else if (errno != EEXIST) { ERROR_LOG(MEMMAP, "shm_open failed: %s", strerror(errno)); return; } } - shm_unlink(fn); if (ftruncate(fd, size) < 0) ERROR_LOG(MEMMAP, "Failed to allocate low memory space"); #endif diff --git a/Source/Core/Common/NandPaths.cpp b/Source/Core/Common/NandPaths.cpp index 3ca5550d407b..52e390453682 100644 --- a/Source/Core/Common/NandPaths.cpp +++ b/Source/Core/Common/NandPaths.cpp @@ -12,20 +12,16 @@ namespace Common std::string GetTicketFileName(u64 _titleID) { - char TicketFilename[1024]; - sprintf(TicketFilename, "%sticket/%08x/%08x.tik", - File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); - - return TicketFilename; + return StringFromFormat("%sticket/%08x/%08x.tik", + File::GetUserPath(D_WIIUSER_IDX).c_str(), + (u32)(_titleID >> 32), (u32)_titleID); } std::string GetTitleDataPath(u64 _titleID) { - char path[1024]; - sprintf(path, "%stitle/%08x/%08x/data/", - File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); - - return path; + return StringFromFormat("%stitle/%08x/%08x/data/", + File::GetUserPath(D_WIIUSER_IDX).c_str(), + (u32)(_titleID >> 32), (u32)_titleID); } std::string GetTMDFileName(u64 _titleID) @@ -34,11 +30,9 @@ std::string GetTMDFileName(u64 _titleID) } std::string GetTitleContentPath(u64 _titleID) { - char ContentPath[1024]; - sprintf(ContentPath, "%stitle/%08x/%08x/content/", - File::GetUserPath(D_WIIUSER_IDX).c_str(), (u32)(_titleID >> 32), (u32)_titleID); - - return ContentPath; + return StringFromFormat("%stitle/%08x/%08x/content/", + File::GetUserPath(D_WIIUSER_IDX).c_str(), + (u32)(_titleID >> 32), (u32)_titleID); } bool CheckTitleTMD(u64 _titleID) diff --git a/Source/Core/Common/Timer.cpp b/Source/Core/Common/Timer.cpp index 267755fb17b8..91a2a2d3adab 100644 --- a/Source/Core/Common/Timer.cpp +++ b/Source/Core/Common/Timer.cpp @@ -167,27 +167,23 @@ u64 Timer::GetLocalTimeSinceJan1970() std::string Timer::GetTimeFormatted() { time_t sysTime; - struct tm * gmTime; - char formattedTime[13]; - char tmp[13]; - time(&sysTime); - gmTime = localtime(&sysTime); + + struct tm * gmTime = localtime(&sysTime); + char tmp[13]; strftime(tmp, 6, "%M:%S", gmTime); // Now tack on the milliseconds #ifdef _WIN32 struct timeb tp; (void)::ftime(&tp); - sprintf(formattedTime, "%s:%03i", tmp, tp.millitm); + return StringFromFormat("%s:%03i", tmp, tp.millitm); #else struct timeval t; (void)gettimeofday(&t, NULL); - sprintf(formattedTime, "%s:%03d", tmp, (int)(t.tv_usec / 1000)); + return StringFromFormat("%s:%03d", tmp, (int)(t.tv_usec / 1000)); #endif - - return std::string(formattedTime); } // Returns a timestamp with decimals for precise time comparisons diff --git a/Source/Core/Core/Boot/Boot_BS2Emu.cpp b/Source/Core/Core/Boot/Boot_BS2Emu.cpp index ef8eae763dbf..f484b54a7ee3 100644 --- a/Source/Core/Core/Boot/Boot_BS2Emu.cpp +++ b/Source/Core/Core/Boot/Boot_BS2Emu.cpp @@ -161,7 +161,7 @@ bool CBoot::EmulatedBS2_GC() bool CBoot::SetupWiiMemory(IVolume::ECountry country) { static const CountrySetting SETTING_EUROPE = {"EUR", "PAL", "EU", "LE"}; - static const std::map country_settings = { + static const std::map country_settings = { {IVolume::COUNTRY_EUROPE, SETTING_EUROPE}, {IVolume::COUNTRY_USA, {"USA", "NTSC", "US", "LU"}}, {IVolume::COUNTRY_JAPAN, {"JPN", "NTSC", "JP", "LJ"}}, diff --git a/Source/Core/Core/ConfigManager.cpp b/Source/Core/Core/ConfigManager.cpp index 6877d10ca5f6..279fd9107631 100644 --- a/Source/Core/Core/ConfigManager.cpp +++ b/Source/Core/Core/ConfigManager.cpp @@ -151,18 +151,14 @@ void SConfig::SaveSettings() ini.Get("General", "GCMPathes", &oldPaths, 0); for (int i = numPaths; i < oldPaths; i++) { - char tmp[16]; - sprintf(tmp, "GCMPath%i", i); - ini.DeleteKey("General", tmp); + ini.DeleteKey("General", StringFromFormat("GCMPath%i", i)); } - ini.Set("General", "GCMPathes", numPaths); + ini.Set("General", "GCMPathes", numPaths); for (int i = 0; i < numPaths; i++) { - char tmp[16]; - sprintf(tmp, "GCMPath%i", i); - ini.Set("General", tmp, m_ISOFolder[i]); + ini.Set("General", StringFromFormat("GCMPath%i", i).c_str(), m_ISOFolder[i]); } ini.Set("General", "RecursiveGCMPaths", m_RecursiveISOFolder); @@ -249,13 +245,10 @@ void SConfig::SaveSettings() ini.Set("Core", "SlotB", m_EXIDevice[1]); ini.Set("Core", "SerialPort1", m_EXIDevice[2]); ini.Set("Core", "BBA_MAC", m_bba_mac); - char sidevicenum[16]; for (int i = 0; i < 4; ++i) { - sprintf(sidevicenum, "SIDevice%i", i); - ini.Set("Core", sidevicenum, m_SIDevice[i]); + ini.Set("Core", StringFromFormat("SIDevice%i", i).c_str(), m_SIDevice[i]); } - ini.Set("Core", "WiiSDCard", m_WiiSDCard); ini.Set("Core", "WiiKeyboard", m_WiiKeyboard); ini.Set("Core", "WiimoteContinuousScanning", m_WiimoteContinuousScanning); @@ -307,11 +300,9 @@ void SConfig::LoadSettings() { for (int i = 0; i < numGCMPaths; i++) { - char tmp[16]; - sprintf(tmp, "GCMPath%i", i); std::string tmpPath; - ini.Get("General", tmp, &tmpPath, ""); - m_ISOFolder.push_back(tmpPath); + ini.Get("General", StringFromFormat("GCMPath%i", i).c_str(), &tmpPath, ""); + m_ISOFolder.push_back(std::move(tmpPath)); } } @@ -410,13 +401,10 @@ void SConfig::LoadSettings() ini.Get("Core", "BBA_MAC", &m_bba_mac); ini.Get("Core", "TimeProfiling",&m_LocalCoreStartupParameter.bJITILTimeProfiling, false); ini.Get("Core", "OutputIR", &m_LocalCoreStartupParameter.bJITILOutputIR, false); - char sidevicenum[16]; for (int i = 0; i < 4; ++i) { - sprintf(sidevicenum, "SIDevice%i", i); - ini.Get("Core", sidevicenum, (u32*)&m_SIDevice[i], (i == 0) ? SIDEVICE_GC_CONTROLLER : SIDEVICE_NONE); + ini.Get("Core", StringFromFormat("SIDevice%i", i).c_str(), (u32*)&m_SIDevice[i], (i == 0) ? SIDEVICE_GC_CONTROLLER : SIDEVICE_NONE); } - ini.Get("Core", "WiiSDCard", &m_WiiSDCard, false); ini.Get("Core", "WiiKeyboard", &m_WiiKeyboard, false); ini.Get("Core", "WiimoteContinuousScanning", &m_WiimoteContinuousScanning, false); diff --git a/Source/Core/Core/DSP/DSPCodeUtil.cpp b/Source/Core/Core/DSP/DSPCodeUtil.cpp index afaaa7d22e99..53e47b71ccfb 100644 --- a/Source/Core/Core/DSP/DSPCodeUtil.cpp +++ b/Source/Core/Core/DSP/DSPCodeUtil.cpp @@ -110,8 +110,6 @@ void CodeToHeader(const std::vector &code, std::string _filename, // Pad with nops to 32byte boundary while (code_padded.size() & 0x7f) code_padded.push_back(0); - - char buffer[1024]; header.clear(); header.reserve(code_padded.size() * 4); header.append("#define NUM_UCODES 1\n\n"); @@ -125,8 +123,7 @@ void CodeToHeader(const std::vector &code, std::string _filename, { if (j && ((j & 15) == 0)) header.append("\n\t\t"); - sprintf(buffer, "0x%04x, ", code_padded[j]); - header.append(buffer); + header.append(StringFromFormat("0x%04x, ", code_padded[j])); } header.append("\n\t},\n"); @@ -137,7 +134,6 @@ void CodesToHeader(const std::vector *codes, const std::vector u32 numCodes, const char *name, std::string &header) { std::vector > codes_padded; - char buffer[1024]; u32 reserveSize = 0; for(u32 i = 0; i < numCodes; i++) { @@ -148,20 +144,16 @@ void CodesToHeader(const std::vector *codes, const std::vector reserveSize += (u32)codes_padded.at(i).size(); } - - header.clear(); header.reserve(reserveSize * 4); - sprintf(buffer, "#define NUM_UCODES %u\n\n", numCodes); - header.append(buffer); + header.append(StringFromFormat("#define NUM_UCODES %u\n\n", numCodes)); header.append("const char* UCODE_NAMES[NUM_UCODES] = {\n"); for (u32 i = 0; i < numCodes; i++) { std::string filename; if (! SplitPath(filenames->at(i), NULL, &filename, NULL)) filename = filenames->at(i); - sprintf(buffer, "\t\"%s\",\n", filename.c_str()); - header.append(buffer); + header.append(StringFromFormat("\t\"%s\",\n", filename.c_str())); } header.append("};\n\n"); header.append("const unsigned short dsp_code[NUM_UCODES][0x1000] = {\n"); @@ -176,8 +168,7 @@ void CodesToHeader(const std::vector *codes, const std::vector { if (j && ((j & 15) == 0)) header.append("\n\t\t"); - sprintf(buffer, "0x%04x, ", codes_padded.at(i).at(j)); - header.append(buffer); + header.append(StringFromFormat("0x%04x, ", codes_padded.at(i).at(j))); } header.append("\n\t},\n"); } diff --git a/Source/Core/Core/Debugger/Debugger_SymbolMap.cpp b/Source/Core/Core/Debugger/Debugger_SymbolMap.cpp index d4f1a4044f9f..3aa9294ef20b 100644 --- a/Source/Core/Core/Debugger/Debugger_SymbolMap.cpp +++ b/Source/Core/Core/Debugger/Debugger_SymbolMap.cpp @@ -151,9 +151,7 @@ void PrintDataBuffer(LogTypes::LOG_TYPE type, u8* _pData, size_t _Size, const ch std::string Temp; for (int i = 0; i < 16; i++) { - char Buffer[128]; - sprintf(Buffer, "%02x ", _pData[j++]); - Temp.append(Buffer); + Temp.append(StringFromFormat("%02x ", _pData[j++])); if (j >= _Size) break; diff --git a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h index 708063255b53..9e220a85d2ae 100644 --- a/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h +++ b/Source/Core/Core/IPC_HLE/WII_IPC_HLE_Device.h @@ -192,9 +192,7 @@ class IWII_IPC_HLE_Device std::string Temp; for (u32 j = 0; j < InBufferSize; j++) { - char Buffer[128]; - sprintf(Buffer, "%02x ", Memory::Read_U8(InBuffer+j)); - Temp.append(Buffer); + Temp += StringFromFormat("%02x ", Memory::Read_U8(InBuffer+j)); } GENERIC_LOG(LogType, LogTypes::LDEBUG, " Buffer: %s", Temp.c_str()); diff --git a/Source/Core/DiscIO/VolumeGC.cpp b/Source/Core/DiscIO/VolumeGC.cpp index 325e200a34fa..f2d97462e9a0 100644 --- a/Source/Core/DiscIO/VolumeGC.cpp +++ b/Source/Core/DiscIO/VolumeGC.cpp @@ -54,9 +54,7 @@ std::string CVolumeGC::GetUniqueID() const std::string CVolumeGC::GetRevisionSpecificUniqueID() const { - char rev[16]; - sprintf(rev, "r%d", GetRevision()); - return GetUniqueID() + rev; + return GetUniqueID() + StringFromFormat("r%d", GetRevision()); } IVolume::ECountry CVolumeGC::GetCountry() const diff --git a/Source/Core/VideoCommon/VertexLoader.cpp b/Source/Core/VideoCommon/VertexLoader.cpp index 772bb1f1f8d3..d3806aeaa738 100644 --- a/Source/Core/VideoCommon/VertexLoader.cpp +++ b/Source/Core/VideoCommon/VertexLoader.cpp @@ -600,9 +600,10 @@ void VertexLoader::CompileVertexTranslator() if (pFunc == 0) { - char temp[256]; - sprintf(temp,"%i %i %i %i", m_VtxDesc.Normal, m_VtxAttr.NormalFormat, m_VtxAttr.NormalElements, m_VtxAttr.NormalIndex3); - Host_SysMessage("VertexLoader_Normal::GetFunction returned zero!"); + Host_SysMessage( + StringFromFormat("VertexLoader_Normal::GetFunction(%i %i %i %i) returned zero!", + m_VtxDesc.Normal, m_VtxAttr.NormalFormat, + m_VtxAttr.NormalElements, m_VtxAttr.NormalIndex3).c_str()); } WriteCall(pFunc);