Take another pass at silencing a bunch of compiler warnings where appropriate.

Most warnings are related to the following:
- Integer precision loss from implicit conversion
- Non-virtual destructors for classes with virtual methods
- Replace the unsafe sprintf() function with the safer snprintf()
- Local variables shadowing
- Extraneous commas and semicolons

Not all of these warnings have been fixed yet,, since fixing the remaining warnings requires a deeper review of the code for a proper fix.
This commit is contained in:
rogerman 2025-06-24 19:33:17 -07:00
parent a98c319cdf
commit 2b40a2f12c
27 changed files with 228 additions and 197 deletions

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2007 shash Copyright (C) 2007 shash
Copyright (C) 2007-2023 DeSmuME team Copyright (C) 2007-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -1457,11 +1457,11 @@ void DESMUME_FASTCALL MMU_writeToSPIData(u16 val)
enum PM_Bits //from libnds enum PM_Bits //from libnds
{ {
PM_SOUND_AMP = BIT(0) , /*!< \brief Power the sound hardware (needed to hear stuff in GBA mode too) */ PM_SOUND_AMP = BIT(0), /*!< \brief Power the sound hardware (needed to hear stuff in GBA mode too) */
PM_SOUND_MUTE = BIT(1), /*!< \brief Mute the main speakers, headphone output will still work. */ PM_SOUND_MUTE = BIT(1), /*!< \brief Mute the main speakers, headphone output will still work. */
PM_BACKLIGHT_BOTTOM = BIT(2), /*!< \brief Enable the top backlight if set */ PM_BACKLIGHT_BOTTOM = BIT(2), /*!< \brief Enable the top backlight if set */
PM_BACKLIGHT_TOP = BIT(3) , /*!< \brief Enable the bottom backlight if set */ PM_BACKLIGHT_TOP = BIT(3), /*!< \brief Enable the bottom backlight if set */
PM_SYSTEM_PWR = BIT(6) , /*!< \brief Turn the power *off* if set */ PM_SYSTEM_PWR = BIT(6) /*!< \brief Turn the power *off* if set */
}; };
if (val !=0) if (val !=0)

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2007 shash Copyright (C) 2007 shash
Copyright (C) 2007-2023 DeSmuME team Copyright (C) 2007-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -88,6 +88,8 @@ enum EDMADestinationUpdate
class TRegister_32 class TRegister_32
{ {
public: public:
virtual ~TRegister_32() {}
virtual u32 read32() = 0; virtual u32 read32() = 0;
virtual void write32(const u32 val) = 0; virtual void write32(const u32 val) = 0;
void write(const int size, const u32 adr, const u32 val) { void write(const int size, const u32 adr, const u32 val) {
@ -124,6 +126,9 @@ struct TGXSTAT : public TRegister_32
fifo_empty = true; fifo_empty = true;
fifo_low = false; fifo_low = false;
} }
virtual ~TGXSTAT() {}
u8 tb; //test busy u8 tb; //test busy
u8 tr; //test result u8 tr; //test result
u8 se; //stack error u8 se; //stack error
@ -246,7 +251,10 @@ public:
AddressRegister(u32* _ptr) AddressRegister(u32* _ptr)
: ptr(_ptr) : ptr(_ptr)
{} {}
virtual u32 read32() {
virtual ~AddressRegister() {}
virtual u32 read32() {
return *ptr; return *ptr;
} }
virtual void write32(const u32 val) { virtual void write32(const u32 val) {
@ -259,7 +267,9 @@ public:
//we pass in a pointer to the controller here so we can alert it if anything changes //we pass in a pointer to the controller here so we can alert it if anything changes
DmaController* controller; DmaController* controller;
ControlRegister() {} ControlRegister() {}
virtual u32 read32() { virtual ~ControlRegister() {}
virtual u32 read32() {
return controller->read32(); return controller->read32();
} }
virtual void write32(const u32 val) { virtual void write32(const u32 val) {

View File

@ -748,9 +748,9 @@ int NDS_LoadROM(const char *filename, const char *physicalName, const char *logi
int read = gameInfo.reader->Read(gameInfo.fROM,fROMBuffer,4096); int read = gameInfo.reader->Read(gameInfo.fROM,fROMBuffer,4096);
if(read == 0) break; if(read == 0) break;
if(first && read >= 512) if(first && read >= 512)
gameInfo.crcForCheatsDb = ~crc32(0, fROMBuffer, 512); gameInfo.crcForCheatsDb = (u32)~crc32(0, fROMBuffer, 512);
first = false; first = false;
gameInfo.crc = crc32(gameInfo.crc, fROMBuffer, read); gameInfo.crc = (u32)crc32(gameInfo.crc, fROMBuffer, read);
} }
gameInfo.chipID = 0xC2; // The Manufacturer ID is defined by JEDEC (C2h = Macronix) gameInfo.chipID = 0xC2; // The Manufacturer ID is defined by JEDEC (C2h = Macronix)
@ -2642,12 +2642,12 @@ bool NDS_FakeBoot()
//perhaps we could automatically boot homebrew to an R4-like device. //perhaps we could automatically boot homebrew to an R4-like device.
_MMU_write32<ARMCPU_ARM9>(0x02FFFE70, 0x5f617267); _MMU_write32<ARMCPU_ARM9>(0x02FFFE70, 0x5f617267);
_MMU_write32<ARMCPU_ARM9>(0x02FFFE74, kCommandline); //(commandline starts here) _MMU_write32<ARMCPU_ARM9>(0x02FFFE74, kCommandline); //(commandline starts here)
_MMU_write32<ARMCPU_ARM9>(0x02FFFE78, rompath.size()+1); _MMU_write32<ARMCPU_ARM9>(0x02FFFE78, (u32)(rompath.size()+1));
//0x027FFF7C (argc) //0x027FFF7C (argc)
//0x027FFF80 (argv) //0x027FFF80 (argv)
for(size_t i=0;i<rompath.size();i++) for (size_t i = 0; i < rompath.size(); i++)
_MMU_write08<ARMCPU_ARM9>(kCommandline+i, rompath[i]); _MMU_write08<ARMCPU_ARM9>((u32)(kCommandline+i), rompath[i]);
_MMU_write08<ARMCPU_ARM9>(kCommandline+rompath.size(), 0); _MMU_write08<ARMCPU_ARM9>((u32)(kCommandline+rompath.size()), 0);
//-------------------------------- //--------------------------------
//Call the card post_fakeboot hook to perform additional initialization //Call the card post_fakeboot hook to perform additional initialization

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2006 Theo Berkau Copyright (C) 2006 Theo Berkau
Copyright (C) 2008-2021 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
Ideas borrowed from Stephane Dallongeville's SCSP core Ideas borrowed from Stephane Dallongeville's SCSP core
@ -176,7 +176,7 @@ int SPU_ChangeSoundCore(int coreid, int newBufferSizeBytes)
return -1; return -1;
// Since it failed, instead of it being fatal, disable the user spu // Since it failed, instead of it being fatal, disable the user spu
if (_currentSNDCore->Init(_currentBufferSize * 2) == -1) if (_currentSNDCore->Init((int)(_currentBufferSize * 2)) == -1)
{ {
_currentSNDCore = 0; _currentSNDCore = 0;
return -1; return -1;
@ -196,7 +196,7 @@ SoundInterface_struct *SPU_SoundCore()
void SPU_ReInit(bool fakeBoot) void SPU_ReInit(bool fakeBoot)
{ {
SPU_Init(_currentSNDCoreId, _currentBufferSize); SPU_Init(_currentSNDCoreId, (int)_currentBufferSize);
// Firmware set BIAS to 0x200 // Firmware set BIAS to 0x200
if (fakeBoot) if (fakeBoot)
@ -285,7 +285,7 @@ void SPU_SetSynchMode(int mode, int method)
if (_currentSynchMode == ESynchMode_DualSynchAsynch) if (_currentSynchMode == ESynchMode_DualSynchAsynch)
{ {
SPU_user = new SPU_struct(_currentBufferSize); SPU_user = new SPU_struct((int)_currentBufferSize);
SPU_CloneUser(); SPU_CloneUser();
} }
} }
@ -1702,15 +1702,15 @@ void SPU_Emulate_user(bool mix)
processedSampleCount = SPU_DefaultPostProcessSamples(postProcessBuffer, freeSampleCount, _currentSynchMode, _currentSynchronizer); processedSampleCount = SPU_DefaultPostProcessSamples(postProcessBuffer, freeSampleCount, _currentSynchMode, _currentSynchronizer);
} }
soundProcessor->UpdateAudio(postProcessBuffer, processedSampleCount); soundProcessor->UpdateAudio(postProcessBuffer, (u32)processedSampleCount);
WAV_WavSoundUpdate(postProcessBuffer, processedSampleCount, WAVMODE_USER); WAV_WavSoundUpdate(postProcessBuffer, (int)processedSampleCount, WAVMODE_USER);
} }
void SPU_DefaultFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer) void SPU_DefaultFetchSamples(s16 *sampleBuffer, size_t sampleCount, ESynchMode synchMode, ISynchronizingAudioBuffer *theSynchronizer)
{ {
if (synchMode == ESynchMode_Synchronous) if (synchMode == ESynchMode_Synchronous)
{ {
theSynchronizer->enqueue_samples(sampleBuffer, sampleCount); theSynchronizer->enqueue_samples(sampleBuffer, (int)sampleCount);
} }
} }
@ -1723,14 +1723,14 @@ size_t SPU_DefaultPostProcessSamples(s16 *postProcessBuffer, size_t requestedSam
case ESynchMode_DualSynchAsynch: case ESynchMode_DualSynchAsynch:
if(SPU_user != NULL) if(SPU_user != NULL)
{ {
SPU_MixAudio(true, SPU_user, requestedSampleCount); SPU_MixAudio(true, SPU_user, (int)requestedSampleCount);
memcpy(postProcessBuffer, SPU_user->outbuf, requestedSampleCount * 2 * sizeof(s16)); memcpy(postProcessBuffer, SPU_user->outbuf, requestedSampleCount * 2 * sizeof(s16));
processedSampleCount = requestedSampleCount; processedSampleCount = requestedSampleCount;
} }
break; break;
case ESynchMode_Synchronous: case ESynchMode_Synchronous:
processedSampleCount = theSynchronizer->output_samples(postProcessBuffer, requestedSampleCount); processedSampleCount = theSynchronizer->output_samples(postProcessBuffer, (int)requestedSampleCount);
break; break;
default: default:
@ -1864,7 +1864,7 @@ void WavWriter::update(void* soundData, int numSamples)
{ {
if(!spufp) return; if(!spufp) return;
//TODO - big endian for the s16 samples?? //TODO - big endian for the s16 samples??
size_t elems_written = fwrite(soundData, numSamples*2, 2, spufp); fwrite(soundData, (size_t)(numSamples*2), 2, spufp);
} }
bool WavWriter::isRecording() const bool WavWriter::isRecording() const
@ -1872,7 +1872,6 @@ bool WavWriter::isRecording() const
return spufp != NULL; return spufp != NULL;
} }
static WavWriter wavWriter; static WavWriter wavWriter;
void WAV_End() void WAV_End()

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013-2021 DeSmuME team Copyright (C) 2013-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -193,7 +193,7 @@ private:
if (fpROM) if (fpROM)
{ {
u32 data = 0; u32 data = 0;
u32 readed = fread(&data, 1, 4, fpROM); u32 readed = (u32)fread(&data, 1, 4, fpROM);
if (readed) if (readed)
{ {
rom.incAddress(); rom.incAddress();

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013-2021 DeSmuME team Copyright (C) 2013-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -59,6 +59,8 @@ enum eSlot1Operation
class ISlot1Comp_Protocol_Client class ISlot1Comp_Protocol_Client
{ {
public: public:
virtual ~ISlot1Comp_Protocol_Client() {}
virtual void slot1client_startOperation(eSlot1Operation theOperation) {} virtual void slot1client_startOperation(eSlot1Operation theOperation) {}
virtual u32 slot1client_read_GCDATAIN(eSlot1Operation theOperation) = 0; virtual u32 slot1client_read_GCDATAIN(eSlot1Operation theOperation) = 0;
virtual void slot1client_write_GCDATAIN(eSlot1Operation theOperation, u32 val) {} virtual void slot1client_write_GCDATAIN(eSlot1Operation theOperation, u32 val) {}

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2009 CrazyMax Copyright (C) 2009 CrazyMax
Copyright (C) 2009-2021 DeSmuME team Copyright (C) 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -65,7 +65,7 @@ private:
fROM->fseek(pos, SEEK_SET); fROM->fseek(pos, SEEK_SET);
u32 data = 0xFFFFFFFF; u32 data = 0xFFFFFFFF;
u32 readed = fROM->fread(&data, size); u32 readed = (u32)fROM->fread(&data, size);
return data; return data;
} }
@ -77,7 +77,7 @@ private:
fSRAM->fseek(pos, SEEK_SET); fSRAM->fseek(pos, SEEK_SET);
u32 data = 0xFFFFFFFF; u32 data = 0xFFFFFFFF;
u32 readed = fSRAM->fread(&data, size); u32 readed = (u32)fSRAM->fread(&data, size);
return data; return data;
} }
@ -107,7 +107,7 @@ private:
for(;;) for(;;)
{ {
u32 romType = 0; u32 romType = 0;
u32 readed = fROM->fread(&romType, 4); u32 readed = (u32)fROM->fread(&romType, 4);
int pos = fROM->ftell(); int pos = fROM->ftell();
int currPct = pos*100/(size-1); int currPct = pos*100/(size-1);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2006-2021 DeSmuME team Copyright (C) 2006-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -175,7 +175,7 @@ void armcp15_setSingleRegionAccess(armcp15_t *armcp15, u8 num, u32 mask, u32 set
armcp15->regionExecuteSet_SYS[num] = set ; armcp15->regionExecuteSet_SYS[num] = set ;
break ; break ;
} }
} ; }
/* precalculate region masks/sets from cp15 register */ /* precalculate region masks/sets from cp15 register */
void armcp15_maskPrecalc(armcp15_t *armcp15) void armcp15_maskPrecalc(armcp15_t *armcp15)

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2006 Guillaume Duhamel Copyright (C) 2006 Guillaume Duhamel
Copyright (C) 2006-2021 DeSmuME team Copyright (C) 2006-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -416,28 +416,28 @@ void NocashMessage(armcpu_t* cpu, int offset)
//this is very inefficiently coded! //this is very inefficiently coded!
char tmp[100]; char tmp[100];
todo = mass_replace(todo,"%sp%","%r13%"); todo = mass_replace(todo, "%sp%", "%r13%");
todo = mass_replace(todo,"%lr%","%r14%"); todo = mass_replace(todo, "%lr%", "%r14%");
todo = mass_replace(todo,"%pc%","%r15%"); todo = mass_replace(todo, "%pc%", "%r15%");
sprintf(tmp,"%08X",cpu->R[0]); todo = mass_replace(todo,"%r0%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 0]); todo = mass_replace(todo, "%r0%", tmp);
sprintf(tmp,"%08X",cpu->R[1]); todo = mass_replace(todo,"%r1%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 1]); todo = mass_replace(todo, "%r1%", tmp);
sprintf(tmp,"%08X",cpu->R[2]); todo = mass_replace(todo,"%r2%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 2]); todo = mass_replace(todo, "%r2%", tmp);
sprintf(tmp,"%08X",cpu->R[3]); todo = mass_replace(todo,"%r3%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 3]); todo = mass_replace(todo, "%r3%", tmp);
sprintf(tmp,"%08X",cpu->R[4]); todo = mass_replace(todo,"%r4%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 4]); todo = mass_replace(todo, "%r4%", tmp);
sprintf(tmp,"%08X",cpu->R[5]); todo = mass_replace(todo,"%r5%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 5]); todo = mass_replace(todo, "%r5%", tmp);
sprintf(tmp,"%08X",cpu->R[6]); todo = mass_replace(todo,"%r6%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 6]); todo = mass_replace(todo, "%r6%", tmp);
sprintf(tmp,"%08X",cpu->R[7]); todo = mass_replace(todo,"%r7%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 7]); todo = mass_replace(todo, "%r7%", tmp);
sprintf(tmp,"%08X",cpu->R[8]); todo = mass_replace(todo,"%r8%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 8]); todo = mass_replace(todo, "%r8%", tmp);
sprintf(tmp,"%08X",cpu->R[9]); todo = mass_replace(todo,"%r9%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[ 9]); todo = mass_replace(todo, "%r9%", tmp);
sprintf(tmp,"%08X",cpu->R[10]); todo = mass_replace(todo,"%r10%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[10]); todo = mass_replace(todo, "%r10%", tmp);
sprintf(tmp,"%08X",cpu->R[11]); todo = mass_replace(todo,"%r11%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[11]); todo = mass_replace(todo, "%r11%", tmp);
sprintf(tmp,"%08X",cpu->R[12]); todo = mass_replace(todo,"%r12%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[12]); todo = mass_replace(todo, "%r12%", tmp);
sprintf(tmp,"%08X",cpu->R[13]); todo = mass_replace(todo,"%r13%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[13]); todo = mass_replace(todo, "%r13%", tmp);
sprintf(tmp,"%08X",cpu->R[14]); todo = mass_replace(todo,"%r14%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[14]); todo = mass_replace(todo, "%r14%", tmp);
sprintf(tmp,"%08X",cpu->R[15]); todo = mass_replace(todo,"%r15%",tmp); snprintf(tmp, sizeof(tmp), "%08X", cpu->R[15]); todo = mass_replace(todo, "%r15%", tmp);
sprintf(tmp,"%d",nds.VCount); todo = mass_replace(todo,"%scanline%",tmp); snprintf(tmp, sizeof(tmp), "%d", nds.VCount); todo = mass_replace(todo, "%scanline%", tmp);
sprintf(tmp,"%d",currFrameCounter); todo = mass_replace(todo,"%frame%",tmp); snprintf(tmp, sizeof(tmp), "%d", currFrameCounter); todo = mass_replace(todo, "%frame%", tmp);
sprintf(tmp,"%lld",nds_timer); todo = mass_replace(todo,"%totalclks%",tmp); snprintf(tmp, sizeof(tmp), "%lld", nds_timer); todo = mass_replace(todo, "%totalclks%", tmp);
printf("%s",todo.c_str()); printf("%s",todo.c_str());
fflush(stdout); fflush(stdout);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2006 Guillaume Duhamel Copyright (C) 2006 Guillaume Duhamel
Copyright (C) 2006-2015 DeSmuME team Copyright (C) 2006-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -149,7 +149,7 @@ enum EDEBUG_EVENT
DEBUG_EVENT_WRITE=2, //write on arm9 or arm7 bus DEBUG_EVENT_WRITE=2, //write on arm9 or arm7 bus
DEBUG_EVENT_EXECUTE=3, //prefetch on arm9 or arm7, triggered after the read event DEBUG_EVENT_EXECUTE=3, //prefetch on arm9 or arm7, triggered after the read event
DEBUG_EVENT_ACL_EXCEPTION=4, //acl exception on arm9 DEBUG_EVENT_ACL_EXCEPTION=4, //acl exception on arm9
DEBUG_EVENT_CACHE_MISS=5, //cache miss on arm9 DEBUG_EVENT_CACHE_MISS=5 //cache miss on arm9
}; };
enum EDEBUG_NOTIFY enum EDEBUG_NOTIFY

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2009-2018 DeSmuME team Copyright (C) 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -26,6 +26,8 @@
class VIEW3D_Driver class VIEW3D_Driver
{ {
public: public:
virtual ~VIEW3D_Driver() {}
virtual void Launch() {} virtual void Launch() {}
virtual void NewFrame() {} virtual void NewFrame() {}
virtual bool IsRunning() { return false; } virtual bool IsRunning() { return false; }
@ -35,7 +37,7 @@ public:
class BaseDriver { class BaseDriver {
public: public:
BaseDriver(); BaseDriver();
~BaseDriver(); virtual ~BaseDriver();
virtual void AVI_SoundUpdate(void* soundData, int soundLen) {} virtual void AVI_SoundUpdate(void* soundData, int soundLen) {}
virtual bool AVI_IsRecording() { return FALSE; } virtual bool AVI_IsRecording() { return FALSE; }

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2009-2016 DeSmuME team Copyright (C) 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -20,15 +20,18 @@
#define FILTER_MAX_WORKING_SURFACE_COUNT 8 #define FILTER_MAX_WORKING_SURFACE_COUNT 8
typedef struct { struct SSurface
{
unsigned char *Surface; unsigned char *Surface;
unsigned int Pitch; int Pitch;
unsigned int Width, Height; int Width;
int Height;
unsigned char *workingSurface[FILTER_MAX_WORKING_SURFACE_COUNT]; unsigned char *workingSurface[FILTER_MAX_WORKING_SURFACE_COUNT];
void *userData; void *userData;
} SSurface; };
typedef struct SSurface SSurface;
void RenderDeposterize(SSurface Src, SSurface Dst); void RenderDeposterize(SSurface Src, SSurface Dst);

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011-2012 Roger Manuel Copyright (C) 2011-2012 Roger Manuel
Copyright (C) 2013-2022 DeSmuME team Copyright (C) 2013-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -144,10 +144,10 @@ VideoFilter::~VideoFilter()
void VideoFilter::__InstanceInit(size_t srcWidth, size_t srcHeight, VideoFilterTypeID typeID, size_t threadCount) void VideoFilter::__InstanceInit(size_t srcWidth, size_t srcHeight, VideoFilterTypeID typeID, size_t threadCount)
{ {
SSurface newSurface; SSurface newSurface;
newSurface.Surface = NULL; newSurface.Surface = NULL;
newSurface.Pitch = srcWidth*2; newSurface.Pitch = (int)(srcWidth * 2);
newSurface.Width = srcWidth; newSurface.Width = (int)srcWidth;
newSurface.Height = srcHeight; newSurface.Height = (int)srcHeight;
newSurface.userData = NULL; newSurface.userData = NULL;
for (size_t i = 0; i < FILTER_MAX_WORKING_SURFACE_COUNT; i++) for (size_t i = 0; i < FILTER_MAX_WORKING_SURFACE_COUNT; i++)
@ -228,9 +228,9 @@ bool VideoFilter::__AllocateDstBuffer(const size_t dstWidth, const size_t dstHei
} }
// Set up SSurface structure. // Set up SSurface structure.
this->__vfDstSurface.Width = dstWidth; this->__vfDstSurface.Width = (int)dstWidth;
this->__vfDstSurface.Height = dstHeight; this->__vfDstSurface.Height = (int)dstHeight;
this->__vfDstSurface.Pitch = dstWidth * 2; this->__vfDstSurface.Pitch = (int)(dstWidth * 2);
if (_useInternalDstBuffer) if (_useInternalDstBuffer)
{ {
@ -241,8 +241,8 @@ bool VideoFilter::__AllocateDstBuffer(const size_t dstWidth, const size_t dstHei
// Update the surfaces on threads. // Update the surfaces on threads.
const size_t threadCount = this->__vfThread.size(); const size_t threadCount = this->__vfThread.size();
const unsigned int linesPerThread = (threadCount > 1) ? dstHeight/threadCount : dstHeight; const int linesPerThread = (threadCount > 1) ? (int)(dstHeight/threadCount) : (int)dstHeight;
unsigned int remainingLines = dstHeight; int remainingLines = (int)dstHeight;
for (size_t i = 0; i < threadCount; i++) for (size_t i = 0; i < threadCount; i++)
{ {
@ -311,9 +311,9 @@ bool VideoFilter::SetSourceSize(const size_t width, const size_t height)
sizeChanged = true; sizeChanged = true;
} }
this->__vfSrcSurface.Width = width; this->__vfSrcSurface.Width = (int)width;
this->__vfSrcSurface.Height = height; this->__vfSrcSurface.Height = (int)height;
this->__vfSrcSurface.Pitch = width * 2; this->__vfSrcSurface.Pitch = (int)(width * 2);
// Set the working source buffer pointer so that the working memory block is padded // Set the working source buffer pointer so that the working memory block is padded
// with 4 pixel rows worth of memory on both sides. // with 4 pixel rows worth of memory on both sides.
this->__vfSrcSurface.Surface = (unsigned char *)(newPixBuffer + (width * 4)); this->__vfSrcSurface.Surface = (unsigned char *)(newPixBuffer + (width * 4));
@ -323,8 +323,8 @@ bool VideoFilter::SetSourceSize(const size_t width, const size_t height)
// Update the surfaces on threads. // Update the surfaces on threads.
size_t threadCount = this->__vfThread.size(); size_t threadCount = this->__vfThread.size();
const unsigned int linesPerThread = (threadCount > 1) ? this->__vfSrcSurface.Height/threadCount : this->__vfSrcSurface.Height; const int linesPerThread = (threadCount > 1) ? this->__vfSrcSurface.Height/(int)threadCount : this->__vfSrcSurface.Height;
unsigned int remainingLines = this->__vfSrcSurface.Height; int remainingLines = this->__vfSrcSurface.Height;
for (size_t i = 0; i < threadCount; i++) for (size_t i = 0; i < threadCount; i++)
{ {
@ -351,7 +351,7 @@ bool VideoFilter::SetSourceSize(const size_t width, const size_t height)
if (sizeChanged) if (sizeChanged)
{ {
const VideoFilterAttributes vfAttr = this->GetAttributes(); const VideoFilterAttributes vfAttr = this->GetAttributes();
const size_t dstWidth = width * vfAttr.scaleMultiply / vfAttr.scaleDivide; const size_t dstWidth = width * vfAttr.scaleMultiply / vfAttr.scaleDivide;
const size_t dstHeight = height * vfAttr.scaleMultiply / vfAttr.scaleDivide; const size_t dstHeight = height * vfAttr.scaleMultiply / vfAttr.scaleDivide;
this->_pixelScale = (float)vfAttr.scaleMultiply / (float)vfAttr.scaleDivide; this->_pixelScale = (float)vfAttr.scaleMultiply / (float)vfAttr.scaleDivide;
@ -625,16 +625,16 @@ void VideoFilter::RunFilterCustomByAttributes(const uint32_t *__restrict srcBuff
SSurface srcSurface; SSurface srcSurface;
memset(&srcSurface, 0, sizeof(srcSurface)); memset(&srcSurface, 0, sizeof(srcSurface));
srcSurface.Surface = (unsigned char *)srcBuffer; srcSurface.Surface = (unsigned char *)srcBuffer;
srcSurface.Pitch = srcWidth*2; srcSurface.Pitch = (int)(srcWidth * 2);
srcSurface.Width = srcWidth; srcSurface.Width = (int)srcWidth;
srcSurface.Height = srcHeight; srcSurface.Height = (int)srcHeight;
SSurface dstSurface; SSurface dstSurface;
memset(&dstSurface, 0, sizeof(dstSurface)); memset(&dstSurface, 0, sizeof(dstSurface));
dstSurface.Surface = (unsigned char *)dstBuffer; dstSurface.Surface = (unsigned char *)dstBuffer;
dstSurface.Pitch = dstWidth*2; dstSurface.Pitch = (int)(dstWidth * 2);
dstSurface.Width = dstWidth; dstSurface.Width = (int)dstWidth;
dstSurface.Height = dstHeight; dstSurface.Height = (int)dstHeight;
if (filterFunction == NULL) if (filterFunction == NULL)
{ {

View File

@ -501,8 +501,8 @@ unsigned cpu_features_get_core_amount(void)
/* Linux, most UNIX-likes. */ /* Linux, most UNIX-likes. */
long ret = sysconf(_SC_NPROCESSORS_ONLN); long ret = sysconf(_SC_NPROCESSORS_ONLN);
if (ret <= 0) if (ret <= 0)
return (unsigned)1; ret = 1;
return ret; return (unsigned)ret;
#elif defined(BSD) || defined(__APPLE__) #elif defined(BSD) || defined(__APPLE__)
/* BSD */ /* BSD */
/* Copypasta from stackoverflow, dunno if it works. */ /* Copypasta from stackoverflow, dunno if it works. */

View File

@ -192,12 +192,12 @@ bool BackupDevice::load_state(EMUFILE &is)
is.read_u8(this->_write_protect); is.read_u8(this->_write_protect);
} }
this->_fsize = data.size(); this->_fsize = (u32)data.size();
#ifndef _DONT_SAVE_BACKUP #ifndef _DONT_SAVE_BACKUP
this->_fpMC->fseek(0, SEEK_SET); this->_fpMC->fseek(0, SEEK_SET);
if (data.size() != 0) if (data.size() != 0)
this->_fpMC->fwrite((char *)&data[0], this->_fsize); this->_fpMC->fwrite((char *)&data[0], this->_fsize);
ensure(data.size(), this->_fpMC); ensure((u32)data.size(), this->_fpMC);
#endif #endif
if (version >= 5) if (version >= 5)
@ -657,9 +657,9 @@ void BackupDevice::detect()
if ( (this->_state == DETECTING) && (this->_data_autodetect.size() > 0) ) if ( (this->_state == DETECTING) && (this->_data_autodetect.size() > 0) )
{ {
//we can now safely detect the save address size //we can now safely detect the save address size
u32 autodetect_size = this->_data_autodetect.size(); u32 autodetect_size = (u32)this->_data_autodetect.size();
printf("Autodetecting with autodetect_size=%d\n",autodetect_size); printf("Autodetecting with autodetect_size=%u\n", autodetect_size);
//detect based on rules //detect based on rules
switch(autodetect_size) switch(autodetect_size)
@ -1132,7 +1132,7 @@ u32 BackupDevice::get_save_nogba_size(const char* fname)
if (fsrc) if (fsrc)
{ {
char src[0x50] = {0}; char src[0x50] = {0};
u32 fsize = 0; size_t fsize = 0;
fseek(fsrc, 0, SEEK_END); fseek(fsrc, 0, SEEK_END);
fsize = ftell(fsrc); fsize = ftell(fsrc);
fseek(fsrc, 0, SEEK_SET); fseek(fsrc, 0, SEEK_SET);
@ -1174,7 +1174,7 @@ u32 BackupDevice::get_save_nogba_size(u8 *data)
return 0xFFFFFFFF; return 0xFFFFFFFF;
} }
static int no_gba_unpackSAV(void *in_buf, u32 fsize, void *out_buf, u32 &size) static int no_gba_unpackSAV(void *in_buf, size_t fsize, void *out_buf, u32 &size)
{ {
u8 *src = (u8 *)in_buf; u8 *src = (u8 *)in_buf;
u8 *dst = (u8 *)out_buf; u8 *dst = (u8 *)out_buf;
@ -1295,7 +1295,7 @@ bool BackupDevice::import_no_gba(const char *fname, u32 force_size)
if (fsrc) if (fsrc)
{ {
u32 fsize = 0; size_t fsize = 0;
fseek(fsrc, 0, SEEK_END); fseek(fsrc, 0, SEEK_END);
fsize = ftell(fsrc); fsize = ftell(fsrc);
fseek(fsrc, 0, SEEK_SET); fseek(fsrc, 0, SEEK_SET);
@ -1366,19 +1366,19 @@ bool BackupDevice::export_no_gba(const char* fname)
this->_fpMC->fread((char *)&data[0], this->_fsize); this->_fpMC->fread((char *)&data[0], this->_fsize);
this->_fpMC->fseek(pos, SEEK_SET); this->_fpMC->fseek(pos, SEEK_SET);
FILE* outf = fopen(fname,"wb"); FILE *outf = fopen(fname, "wb");
if(!outf) return false; if (!outf) return false;
u32 size = data.size(); size_t size = data.size();
u32 padSize = pad_up_size(size); size_t padSize = pad_up_size((u32)size);
if(data.size()>0) if (data.size() > 0)
fwrite(&data[0],1,size,outf); fwrite(&data[0], 1, size, outf);
for(u32 i=size;i<padSize;i++) for (size_t i = size; i < padSize; i++)
fputc(0xFF,outf); fputc(0xFF, outf);
if (padSize < 512 * 1024) if (padSize < (512 * 1024))
{ {
for(u32 i=padSize; i<512 * 1024; i++) for (size_t i = padSize; i < (512 * 1024); i++)
fputc(0xFF,outf); fputc(0xFF, outf);
} }
fclose(outf); fclose(outf);
@ -1395,14 +1395,14 @@ bool BackupDevice::export_raw(const char* filename)
this->_fpMC->fread((char *)&data[0], this->_fsize); this->_fpMC->fread((char *)&data[0], this->_fsize);
this->_fpMC->fseek(pos, SEEK_SET); this->_fpMC->fseek(pos, SEEK_SET);
FILE* outf = fopen(filename,"wb"); FILE *outf = fopen(filename, "wb");
if(!outf) return false; if (!outf) return false;
u32 size = data.size(); size_t size = data.size();
u32 padSize = pad_up_size(size); size_t padSize = pad_up_size((u32)size);
if(data.size()>0) if (data.size() > 0)
fwrite(&data[0],1,size,outf); fwrite(&data[0], 1, size, outf);
for(u32 i=size;i<padSize;i++) for (size_t i = size; i < padSize; i++)
fputc(uninitializedValue,outf); fputc(uninitializedValue, outf);
fclose(outf); fclose(outf);
return true; return true;
@ -1649,8 +1649,8 @@ bool BackupDevice::import_dsv(const char *filename)
// Truncate the file if necessary. // Truncate the file if necessary.
// * Also see TODO note above, since that applies to this step as well. // * Also see TODO note above, since that applies to this step as well.
const size_t newFileSize = this->_info.padSize + BackupDevice::GetDSVFooterSize(); const size_t newFileSize = (size_t)this->_info.padSize + BackupDevice::GetDSVFooterSize();
this->_fpMC->truncate(newFileSize); this->_fpMC->truncate((s32)newFileSize);
result = true; result = true;

View File

@ -1,5 +1,5 @@
/* /*
Copyright 2008-2021 DeSmuME team Copyright 2008-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -88,7 +88,7 @@ void MovieData::insertEmpty(int at, int frames)
{ {
if(at == -1) if(at == -1)
{ {
int currcount = records.size(); int currcount = (int)records.size();
records.resize(records.size()+frames); records.resize(records.size()+frames);
clearRecordRange(currcount,frames); clearRecordRange(currcount,frames);
} }
@ -258,7 +258,7 @@ MovieData::MovieData(bool fromCurrentSettings)
for(int i=0;i<256;i++) for(int i=0;i<256;i++)
{ {
char tmp[256]; char tmp[256];
sprintf(tmp,"micsample%d",i); snprintf(tmp, sizeof(tmp), "micsample%d", i);
installValueMap[tmp] = &MovieData::installMicSample; installValueMap[tmp] = &MovieData::installMicSample;
} }
@ -403,7 +403,7 @@ int MovieData::dump(EMUFILE &fp, bool binary)
fp.fprintf("savestate %d\n", savestate?1:0); fp.fprintf("savestate %d\n", savestate?1:0);
if (sram.size() != 0) if (sram.size() != 0)
fp.fprintf("sram %s\n", BytesToString(&sram[0],sram.size()).c_str()); fp.fprintf( "sram %s\n", BytesToString(&sram[0], (int)sram.size()).c_str() );
for (size_t i = 0; i < 256; i++) for (size_t i = 0; i < 256; i++)
{ {
@ -411,8 +411,8 @@ int MovieData::dump(EMUFILE &fp, bool binary)
if(micSamples.size() > i) if(micSamples.size() > i)
{ {
char tmp[32]; char tmp[32];
sprintf(tmp,"micsample%d", (int)i); snprintf(tmp, sizeof(tmp), "micsample%d", (int)i);
fp.fprintf("%s %s\n",tmp, BytesToString(&micSamples[i][0],micSamples[i].size()).c_str()); fp.fprintf( "%s %s\n", tmp, BytesToString(&micSamples[i][0], (int)micSamples[i].size()).c_str() );
} }
} }
@ -527,7 +527,7 @@ bool LoadFM2(MovieData &movieData, EMUFILE &fp, int size, bool stopAfterHeader)
} }
else else
{ {
int currcount = movieData.records.size(); size_t currcount = movieData.records.size();
movieData.records.resize(currcount + 1); movieData.records.resize(currcount + 1);
movieData.records[currcount].parse(fp); movieData.records[currcount].parse(fp);
} }
@ -1310,16 +1310,17 @@ void FCEUI_MakeBackupMovie(bool dispMessage)
string backupFn; //Target backup filename string backupFn; //Target backup filename
string tempFn; //temp used in back filename creation string tempFn; //temp used in back filename creation
stringstream stream; stringstream stream;
int x; //Temp variable for string manip size_t x; //Temp variable for string manip
bool exist = false; //Used to test if filename exists bool exist = false; //Used to test if filename exists
bool overflow = false; //Used for special situation when backup numbering exceeds limit bool overflow = false; //Used for special situation when backup numbering exceeds limit
currentFn = curMovieFilename; //Get current moviefilename currentFn = curMovieFilename; //Get current moviefilename
backupFn = curMovieFilename; //Make backup filename the same as current moviefilename backupFn = curMovieFilename; //Make backup filename the same as current moviefilename
x = backupFn.find_last_of("."); //Find file extension x = backupFn.find_last_of("."); //Find file extension
backupFn = backupFn.substr(0,x); //Remove extension backupFn = backupFn.substr(0,x); //Remove extension
tempFn = backupFn; //Store the filename at this point tempFn = backupFn; //Store the filename at this point
for (unsigned int backNum=0;backNum<999;backNum++) //999 = arbituary limit to backup files
for (size_t backNum = 0; backNum < 999; backNum++) //999 = arbituary limit to backup files
{ {
stream.str(""); //Clear stream stream.str(""); //Clear stream
if (backNum > 99) if (backNum > 99)

View File

@ -2,7 +2,7 @@
Copyright (C) 2006 Normmatt Copyright (C) 2006 Normmatt
Copyright (C) 2006 Theo Berkau Copyright (C) 2006 Theo Berkau
Copyright (C) 2007 Pascal Giard Copyright (C) 2007 Pascal Giard
Copyright (C) 2008-2021 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -68,7 +68,7 @@ int lastSaveState = 0; //Keeps track of last savestate used for quick save/load
u32 _DESMUME_version = EMU_DESMUME_VERSION_NUMERIC(); u32 _DESMUME_version = EMU_DESMUME_VERSION_NUMERIC();
u32 svn_rev = 0; //EMU_DESMUME_VERSION_NUMERIC(); //sorry, not using this now u32 svn_rev = 0; //EMU_DESMUME_VERSION_NUMERIC(); //sorry, not using this now
s64 save_time = 0; s64 save_time_data = 0;
NDS_SLOT1_TYPE slot1Type = NDS_SLOT1_RETAIL_AUTO; NDS_SLOT1_TYPE slot1Type = NDS_SLOT1_RETAIL_AUTO;
NDS_SLOT2_TYPE slot2Type = NDS_SLOT2_AUTO; NDS_SLOT2_TYPE slot2Type = NDS_SLOT2_AUTO;
@ -87,7 +87,7 @@ SFORMAT SF_NDS_INFO[]={
{ "DVMI", 1, 1, (void*)&DESMUME_VERSION_MINOR}, { "DVMI", 1, 1, (void*)&DESMUME_VERSION_MINOR},
{ "DSBD", 1, 1, (void*)&DESMUME_VERSION_BUILD}, { "DSBD", 1, 1, (void*)&DESMUME_VERSION_BUILD},
{ "GREV", 1, 4, &svn_rev}, { "GREV", 1, 4, &svn_rev},
{ "GTIM", 1, 8, &save_time}, { "GTIM", 1, 8, &save_time_data},
{ 0 } { 0 }
}; };
@ -670,7 +670,7 @@ void scan_savestates()
path.getpathnoext(path.STATE_SLOTS, filename); path.getpathnoext(path.STATE_SLOTS, filename);
if (strlen(filename) + strlen(".dst") + strlen("-2147483648") /* = biggest string for i */ > MAX_PATH) return; if (strlen(filename) + strlen(".dst") + strlen("-2147483648") /* = biggest string for i */ > MAX_PATH) return;
sprintf(filename + strlen(filename), ".ds%d", i); snprintf(filename + strlen(filename), sizeof(filename), ".ds%d", i);
#ifdef _MSC_VER #ifdef _MSC_VER
wchar_t wgarbage[1024] = {0}; wchar_t wgarbage[1024] = {0};
@ -697,7 +697,7 @@ void savestate_slot(int num)
path.getpathnoext(path.STATE_SLOTS, filename); path.getpathnoext(path.STATE_SLOTS, filename);
if (strlen(filename) + strlen(".dsx") + strlen("-2147483648") /* = biggest string for num */ > MAX_PATH) return; if (strlen(filename) + strlen(".dsx") + strlen("-2147483648") /* = biggest string for num */ > MAX_PATH) return;
sprintf(filename + strlen(filename), ".ds%d", num); snprintf(filename + strlen(filename), sizeof(filename), ".ds%d", num);
if (savestate_save(filename)) if (savestate_save(filename))
{ {
@ -775,7 +775,7 @@ void loadstate_slot(int num)
std::string fname = dirname + PSS; std::string fname = dirname + PSS;
char mini[100]; char mini[100];
sprintf(mini, "%u", cur_index); snprintf(mini, sizeof(mini), "%u", cur_index);
fname += mini + (std::string)".dst"; fname += mini + (std::string)".dst";
savestate_save(fname.c_str()); savestate_save(fname.c_str());
@ -789,7 +789,7 @@ void loadstate_slot(int num)
} }
if (strlen(filename) + strlen(".dsx") + strlen("-2147483648") /* = biggest string for num */ > MAX_PATH) return; if (strlen(filename) + strlen(".dsx") + strlen("-2147483648") /* = biggest string for num */ > MAX_PATH) return;
sprintf(filename + strlen(filename), ".ds%d", num); snprintf(filename + strlen(filename), sizeof(filename), ".ds%d", num);
if (savestate_load(filename)) if (savestate_load(filename))
{ {
@ -1125,7 +1125,7 @@ static void writechunks(EMUFILE &os)
DateTime tm = DateTime::get_Now(); DateTime tm = DateTime::get_Now();
svn_rev = 0; svn_rev = 0;
save_time = tm.get_Ticks(); save_time_data = tm.get_Ticks();
gfx3d_PrepareSaveStateBufferWrite(); gfx3d_PrepareSaveStateBufferWrite();
@ -1253,7 +1253,7 @@ static bool ReadStateChunks(EMUFILE &is, s32 totalsize)
{ {
char buf[32] = {0}; char buf[32] = {0};
if (svn_rev != 0xFFFFFFFF) if (svn_rev != 0xFFFFFFFF)
sprintf(buf, " svn %u", svn_rev); snprintf(buf, sizeof(buf), " svn %u", svn_rev);
printf("\tDeSmuME version: %u.%u.%u%s\n", version_major, version_minor, version_build, buf); printf("\tDeSmuME version: %u.%u.%u%s\n", version_major, version_minor, version_build, buf);
} }

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2010-2015 DeSmuME team Copyright (C) 2010-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -28,6 +28,8 @@ class EMUFILE;
class Slot1Info class Slot1Info
{ {
public: public:
virtual ~Slot1Info() {}
virtual const char* name() const = 0; virtual const char* name() const = 0;
virtual const char* descr()const = 0; virtual const char* descr()const = 0;
virtual const u8 id() const = 0; virtual const u8 id() const = 0;
@ -42,6 +44,9 @@ public:
, mID(_id) , mID(_id)
{ {
} }
virtual ~Slot1InfoSimple() {}
virtual const char* name() const { return mName; } virtual const char* name() const { return mName; }
virtual const char* descr() const { return mDescr; } virtual const char* descr() const { return mDescr; }
virtual const u8 id() const { return mID; } virtual const u8 id() const { return mID; }

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2009-2023 DeSmuME team Copyright (C) 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -29,6 +29,8 @@ class EMUFILE;
class Slot2Info class Slot2Info
{ {
public: public:
virtual ~Slot2Info() {}
virtual const char* name() const = 0; virtual const char* name() const = 0;
virtual const char* descr() const = 0; virtual const char* descr() const = 0;
virtual u8 id() const = 0; virtual u8 id() const = 0;
@ -43,6 +45,9 @@ public:
, mID(_id) , mID(_id)
{ {
} }
virtual ~Slot2InfoSimple() {}
virtual const char* name() const { return mName; } virtual const char* name() const { return mName; }
virtual const char* descr() const { return mDescr; } virtual const char* descr() const { return mDescr; }
virtual u8 id() const { return mID; } virtual u8 id() const { return mID; }

View File

@ -1,5 +1,5 @@
/* /*
Copyright 2009-2021 DeSmuME team Copyright 2009-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -234,8 +234,8 @@ do {
/* The factor 2 below avoids cut-off errors for nr_fats == 1. /* The factor 2 below avoids cut-off errors for nr_fats == 1.
* The "nr_fats*3" is for the reserved first two FAT entries */ * The "nr_fats*3" is for the reserved first two FAT entries */
clust12 = 2*((u64) fatdata *sector_size + bs.fatCount*3) / clust12 = (u32)( ( (2ULL * (u64)fatdata * (u64)sector_size) + ((u64)bs.fatCount * 3ULL) ) /
(2*(int) bs.sectorsPerCluster * sector_size + bs.fatCount*3); ( (2ULL * (u64)bs.sectorsPerCluster * (u64)sector_size) + ((u64)bs.fatCount * 3ULL) ) );
fatlength12 = cdiv (((clust12+2) * 3 + 1) >> 1, sector_size); fatlength12 = cdiv (((clust12+2) * 3 + 1) >> 1, sector_size);
/* Need to recalculate number of clusters, since the unused parts of the /* Need to recalculate number of clusters, since the unused parts of the
* FATS and data area together could make up space for an additional, * FATS and data area together could make up space for an additional,
@ -251,8 +251,8 @@ do {
printf( "FAT12: too much clusters\n" ); printf( "FAT12: too much clusters\n" );
} }
clust16 = ((u64) fatdata *sector_size + bs.fatCount*4) / clust16 = (u32)( ( ((u64)fatdata * (u64)sector_size) + ((u64)bs.fatCount * 4ULL) ) /
((int) bs.sectorsPerCluster * sector_size + bs.fatCount*2); ( ((u64)bs.sectorsPerCluster * (u64)sector_size) + ((u64)bs.fatCount * 2ULL) ) );
fatlength16 = cdiv ((clust16+2) * 2, sector_size); fatlength16 = cdiv ((clust16+2) * 2, sector_size);
/* Need to recalculate number of clusters, since the unused parts of the /* Need to recalculate number of clusters, since the unused parts of the
* FATS and data area together could make up space for an additional, * FATS and data area together could make up space for an additional,
@ -276,8 +276,8 @@ do {
clust16 = 0; clust16 = 0;
} }
clust32 = ((u64) fatdata *sector_size + bs.fatCount*8) / clust32 = (u32)( ( ((u64)fatdata * (u64)sector_size) + ((u64)bs.fatCount * 8ULL) ) /
((int) bs.sectorsPerCluster * sector_size + bs.fatCount*4); ( ((u64)bs.sectorsPerCluster * (u64)sector_size) + ((u64)bs.fatCount * 4ULL) ) );
fatlength32 = cdiv ((clust32+2) * 4, sector_size); fatlength32 = cdiv ((clust32+2) * 4, sector_size);
/* Need to recalculate number of clusters, since the unused parts of the /* Need to recalculate number of clusters, since the unused parts of the
* FATS and data area together could make up space for an additional, * FATS and data area together could make up space for an additional,
@ -397,7 +397,6 @@ case 32:
//but we onnly targeted fat32 our first time through //but we onnly targeted fat32 our first time through
bool EmuFatVolume::formatNew(u32 sectors) bool EmuFatVolume::formatNew(u32 sectors)
{ {
u32 volumeStartBlock = 0;
TFat32BootSector bsrec; TFat32BootSector bsrec;
memset(&bsrec,0,sizeof(TFat32BootSector)); memset(&bsrec,0,sizeof(TFat32BootSector));
TFat32BootSector *bs = &bsrec; TFat32BootSector *bs = &bsrec;

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013-2017 DeSmuME team Copyright (C) 2013-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -165,9 +165,8 @@ bool FS_NITRO::loadFileTables()
for (u32 i = 0 ; i < numOverlay9; i++) for (u32 i = 0 ; i < numOverlay9; i++)
{ {
char buf[129] = {0}; char buf[129] = {0};
memset(&buf[0], 0, sizeof(buf));
fat[ovr9[i].fileID].isOverlay = true; fat[ovr9[i].fileID].isOverlay = true;
sprintf(buf, "overlay_%04u.bin", ovr9[i].id); snprintf(buf, sizeof(buf), "overlay_%04u.bin", ovr9[i].id);
fat[ovr9[i].fileID].filename = buf; fat[ovr9[i].fileID].filename = buf;
} }
} }
@ -181,9 +180,8 @@ bool FS_NITRO::loadFileTables()
for (u32 i = 0 ; i < numOverlay7; i++) for (u32 i = 0 ; i < numOverlay7; i++)
{ {
char buf[129] = {0}; char buf[129] = {0};
memset(&buf[0], 0, sizeof(buf));
fat[ovr7[i].fileID].isOverlay = true; fat[ovr7[i].fileID].isOverlay = true;
sprintf(buf, "overlay_%04u.bin", ovr7[i].id); snprintf(buf, sizeof(buf), "overlay_%04u.bin", ovr7[i].id);
fat[ovr7[i].fileID].filename = buf; fat[ovr7[i].fileID].filename = buf;
} }
} }
@ -300,15 +298,15 @@ bool FS_NITRO::rebuildFAT(u32 addr, u32 size, std::string pathData)
FILE *fp = fopen(path.c_str(), "rb"); FILE *fp = fopen(path.c_str(), "rb");
if (!fp) continue; if (!fp) continue;
fseek(fp, 0, SEEK_END); fseek(fp, 0, SEEK_END);
u32 size = ftell(fp); u32 fileSize = (u32)ftell(fp);
fclose(fp); fclose(fp);
fat[i].file = true; fat[i].file = true;
if (fat[i].size != size) if (fat[i].size != fileSize)
{ {
//printf("Different size: %s (ROM: %d, file %d)\n", path.c_str(), fat[i].size, size); //printf("Different size: %s (ROM: %d, file %d)\n", path.c_str(), fat[i].size, fileSize);
fat[i].sizeFile = size; fat[i].sizeFile = fileSize;
} }
else else
fat[i].sizeFile = fat[i].size; fat[i].sizeFile = fat[i].size;

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013-2017 DeSmuME team Copyright (C) 2013-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -26,7 +26,7 @@ enum FNT_TYPES
FS_FILE_ENTRY = 0, FS_FILE_ENTRY = 0,
FS_SUBDIR_ENTRY = 1, FS_SUBDIR_ENTRY = 1,
FS_END_SUBTABLE = 2, FS_END_SUBTABLE = 2,
FS_RESERVED = 3, FS_RESERVED = 3
}; };
#include "../PACKED.h" #include "../PACKED.h"

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2008-2009 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -56,7 +56,7 @@ void Desmume_Guid::newGuid()
std::string Desmume_Guid::toString() std::string Desmume_Guid::toString()
{ {
char buf[37]; char buf[37];
sprintf(buf,"%08X-%04X-%04X-%04X-%02X%02X%02X%02X%02X%02X", snprintf(buf, sizeof(buf), "%08X-%04X-%04X-%04X-%02X%02X%02X%02X%02X%02X",
de32lsb(data),de16lsb(data+4),de16lsb(data+6),de16lsb(data+8),data[10],data[11],data[12],data[13],data[14],data[15]); de32lsb(data),de16lsb(data+4),de16lsb(data+6),de16lsb(data+8),data[10],data[11],data[12],data[13],data[14],data[15]);
return std::string(buf); return std::string(buf);
} }
@ -84,7 +84,7 @@ u8 Desmume_Guid::hexToByte(char** ptrptr)
void Desmume_Guid::scan(std::string& str) void Desmume_Guid::scan(std::string& str)
{ {
char* endptr = (char*)str.c_str(); char* endptr = (char*)str.c_str();
en32lsb(data,strtoul(endptr,&endptr,16)); en32lsb(data+0,(u32)strtoul(endptr+0,&endptr,16));
en16lsb(data+4,(u16)strtoul(endptr+1,&endptr,16)); en16lsb(data+4,(u16)strtoul(endptr+1,&endptr,16));
en16lsb(data+6,(u16)strtoul(endptr+1,&endptr,16)); en16lsb(data+6,(u16)strtoul(endptr+1,&endptr,16));
en16lsb(data+8,(u16)strtoul(endptr+1,&endptr,16)); en16lsb(data+8,(u16)strtoul(endptr+1,&endptr,16));

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2006 yopyop Copyright (C) 2006 yopyop
Copyright (C) 2006 Mic Copyright (C) 2006 Mic
Copyright (C) 2010-2016 DeSmuME team Copyright (C) 2010-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -65,13 +65,13 @@ static void list_files(const char *filepath, ListCallback list_callback)
if(!retro_readdir(rdir)) if(!retro_readdir(rdir))
break; break;
const char* fname = retro_dirent_get_name(rdir); const char* fname2 = retro_dirent_get_name(rdir);
list_callback(rdir,EListCallbackArg_Item); list_callback(rdir,EListCallbackArg_Item);
printf("cflash added %s\n",fname); printf("cflash added %s\n", fname2);
if (retro_dirent_is_dir(rdir, fname) && (strcmp(fname, ".")) && strcmp(fname, "..")) if (retro_dirent_is_dir(rdir, fname2) && (strcmp(fname2, ".")) && strcmp(fname2, ".."))
{ {
std::string subdir = (std::string)filepath + path_default_slash() + fname; std::string subdir = (std::string)filepath + path_default_slash() + fname2;
list_files(subdir.c_str(), list_callback); list_files(subdir.c_str(), list_callback);
list_callback(rdir, EListCallbackArg_Pop); list_callback(rdir, EListCallbackArg_Pop);
} }
@ -145,16 +145,16 @@ static void DirectoryListCallback(RDIR* rdir, EListCallbackArg arg)
if(inf) if(inf)
{ {
fseek(inf,0,SEEK_END); fseek(inf,0,SEEK_END);
long len = ftell(inf); size_t len = ftell(inf);
fseek(inf,0,SEEK_SET); fseek(inf,0,SEEK_SET);
u8 *buf = new u8[len]; u8 *buf = new u8[len];
fread(buf,1,len,inf); fread(buf,1,len,inf);
fclose(inf); fclose(inf);
std::string path = currVirtPath + "/" + fname; std::string path2 = currVirtPath + "/" + fname;
printf("FAT + (%10.2f KB) %s \n",len/1024.f,path.c_str()); printf( "FAT + (%10.2f KB) %s \n", (float)len/1024.f, path2.c_str() );
bool ok = LIBFAT::WriteFile(path.c_str(),buf,len); bool ok = LIBFAT::WriteFile(path2. c_str(), buf, (int)len);
if(!ok) if (!ok)
printf("ERROR adding file to fat\n"); printf("ERROR adding file to fat\n");
delete[] buf; delete[] buf;
} else printf("ERROR opening file for fat\n"); } else printf("ERROR opening file for fat\n");
@ -206,7 +206,7 @@ bool VFAT::build(const char* path, int extra_MB)
delete file; delete file;
try try
{ {
file = new EMUFILE_MEMORY(dataSectors*512); file = new EMUFILE_MEMORY((u32)dataSectors*512);
} }
catch(std::bad_alloc) catch(std::bad_alloc)
{ {
@ -223,7 +223,7 @@ bool VFAT::build(const char* path, int extra_MB)
EmuFat fat(file); EmuFat fat(file);
EmuFatVolume vol; EmuFatVolume vol;
u8 ok = vol.init(&fat); u8 ok = vol.init(&fat);
vol.formatNew(dataSectors); vol.formatNew((u32)dataSectors);
//ensure we are working in memory, just in case we were testing with a disk file. //ensure we are working in memory, just in case we were testing with a disk file.
//libfat will need to go straight to memory (for now; we could easily change it to work with the disk) //libfat will need to go straight to memory (for now; we could easily change it to work with the disk)

View File

@ -2,7 +2,7 @@
//subsequently modified for desmume //subsequently modified for desmume
/* /*
Copyright (C) 2008-2009 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -24,7 +24,7 @@
//a vc-style substring operation (very kind and lenient) //a vc-style substring operation (very kind and lenient)
std::string strsub(const std::string& str, int pos, int len) { std::string strsub(const std::string& str, int pos, int len) {
int strlen = str.size(); int strlen = (int)str.size();
if(strlen==0) return str; //empty strings always return empty strings if(strlen==0) return str; //empty strings always return empty strings
if(pos>=strlen) return str; //if you start past the end of the string, return the entire string. this is unusual, but there you have it if(pos>=strlen) return str; //if you start past the end of the string, return the entire string. this is unusual, but there you have it
@ -44,7 +44,7 @@ std::string strsub(const std::string& str, int pos, int len) {
std::string strmid(const std::string& str, int pos, int len) { return strsub(str,pos,len); } std::string strmid(const std::string& str, int pos, int len) { return strsub(str,pos,len); }
std::string strleft(const std::string& str, int len) { return strsub(str,0,len); } std::string strleft(const std::string& str, int len) { return strsub(str,0,len); }
std::string strright(const std::string& str, int len) { return len ? strsub(str,str.size()-len,len) : ""; } std::string strright(const std::string& str, int len) { return len ? strsub(str,(int)str.size()-len,len) : ""; }
std::string toupper(const std::string& str) std::string toupper(const std::string& str)
{ {
std::string ret = str; std::string ret = str;
@ -80,7 +80,7 @@ private:
std::string u32ToHexString(u32 val) std::string u32ToHexString(u32 val)
{ {
char temp[16]; char temp[16];
sprintf(temp,"%08X",val); snprintf(temp, sizeof(temp), "%08X", val);
return temp; return temp;
} }
@ -89,14 +89,14 @@ std::string BytesToString(const void* data, int len)
{ {
char temp[16]; char temp[16];
if(len==1) { if(len==1) {
sprintf(temp,"%d",*(const unsigned char*)data); snprintf(temp, sizeof(temp), "%d",*(const unsigned char*)data);
return temp; return temp;
} else if(len==2) { } else if(len==2) {
sprintf(temp,"%d",*(const unsigned short*)data); snprintf(temp, sizeof(temp), "%d",*(const unsigned short*)data);
return temp; return temp;
} else if(len==4) { } else if(len==4) {
sprintf(temp,"%d",*(const unsigned int*)data); snprintf(temp, sizeof(temp), "%d",*(const unsigned int*)data);
return temp; return temp;
} }
std::string ret; std::string ret;
@ -143,7 +143,7 @@ std::string BytesToString(const void* data, int len)
int HexStringToBytesLength(const std::string& str) int HexStringToBytesLength(const std::string& str)
{ {
if(str.size()>2 && str[0] == '0' && toupper(str[1]) == 'X') if(str.size()>2 && str[0] == '0' && toupper(str[1]) == 'X')
return str.size()/2-1; return (int)(str.size() / 2) - 1;
else return -1; else return -1;
} }
@ -154,7 +154,7 @@ int Base64StringToBytesLength(const std::string& str)
size_t c = ((str.size() - 7) / 4) * 3; size_t c = ((str.size() - 7) / 4) * 3;
if(str[str.size()-1] == '=') { --c; if(str[str.size()-1] == '=') { --c;
if(str[str.size()-2] == '=') --c; } if(str[str.size()-2] == '=') --c; }
return c; return (int)c;
} }
///parses a string in the same format as BytesToString ///parses a string in the same format as BytesToString
@ -194,7 +194,7 @@ bool StringToBytes(const std::string& str, void* data, int len)
{ {
// hex // hex
int amt = len; int amt = len;
int bytesAvailable = str.size()/2; int bytesAvailable = (int)(str.size() / 2);
if(bytesAvailable < amt) if(bytesAvailable < amt)
amt = bytesAvailable; amt = bytesAvailable;
const char* cstr = str.c_str()+2; const char* cstr = str.c_str()+2;
@ -266,7 +266,7 @@ std::vector<std::string> tokenize_str(const std::string & str,
std::string stditoa(int n) std::string stditoa(int n)
{ {
char tempbuf[16]; char tempbuf[16];
sprintf(tempbuf, "%d", n); snprintf(tempbuf, sizeof(tempbuf), "%d", n);
return tempbuf; return tempbuf;
} }

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2007 Tim Seidel Copyright (C) 2007 Tim Seidel
Copyright (C) 2008-2022 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
This file is free software: you can redistribute it and/or modify This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -3475,7 +3475,7 @@ int AdhocCommInterface::_RXPacketGetFromSocket(RXRawPacketData& rawPacket)
u8* targetPacket = &rawPacket.buffer[rawPacket.writeLocation]; u8* targetPacket = &rawPacket.buffer[rawPacket.writeLocation];
rxPacketSizeInt = recvfrom(thisSocket, (char*)targetPacket, WIFI_WORKING_PACKET_BUFFER_SIZE, 0, &fromAddr, &fromLen); rxPacketSizeInt = (int)recvfrom(thisSocket, (char*)targetPacket, WIFI_WORKING_PACKET_BUFFER_SIZE, 0, &fromAddr, &fromLen);
if(rxPacketSizeInt <= 0) if(rxPacketSizeInt <= 0)
{ {
return rxPacketSizeInt; // No packet data was received. return rxPacketSizeInt; // No packet data was received.
@ -3720,7 +3720,7 @@ size_t SoftAPCommInterface::TXPacketSend(u8* txTargetBuffer, size_t txLength)
return txPacketSize; return txPacketSize;
} }
int result = this->_pcap->sendpacket(this->_bridgeDevice, txTargetBuffer, txLength); int result = this->_pcap->sendpacket(this->_bridgeDevice, txTargetBuffer, (int)txLength);
if(result == 0) if(result == 0)
{ {
txPacketSize = txLength; txPacketSize = txLength;
@ -4025,9 +4025,10 @@ void WifiHandler::_PacketCaptureFileOpen()
tm* t = localtime(&ti); tm* t = localtime(&ti);
char* gamecd = gameInfo.header.gameCode; char* gamecd = gameInfo.header.gameCode;
char file_name[50]; char file_name[64];
sprintf( snprintf(
file_name, file_name,
sizeof(file_name),
"%c%c%c%c [%02d-%02d-%02d-%02d].pcap", "%c%c%c%c [%02d-%02d-%02d-%02d].pcap",
gamecd[0], gamecd[1], gamecd[2], gamecd[3], gamecd[0], gamecd[1], gamecd[2], gamecd[3],
t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec
@ -4081,8 +4082,8 @@ void WifiHandler::_PacketCaptureFileWrite(const u8* packet, u32 len, bool isRece
return; return;
} }
const u32 seconds = timeStamp / 1000000; const u32 seconds = (u32)(timeStamp / 1000000ULL);
const u32 millis = timeStamp % 1000000; const u32 millis = (u32)(timeStamp % 1000000ULL);
// Add the packet // Add the packet
// more info: http://www.kroosec.com/2012/10/a-look-at-pcap-file-format.html // more info: http://www.kroosec.com/2012/10/a-look-at-pcap-file-format.html
@ -4503,7 +4504,7 @@ int WifiHandler::GetBridgeDeviceList(std::vector<std::string>* deviceStringList)
} }
} }
return deviceStringList->size(); return (int)deviceStringList->size();
} }
int WifiHandler::GetSelectedBridgeDeviceIndex() int WifiHandler::GetSelectedBridgeDeviceIndex()

View File

@ -1,7 +1,7 @@
/* /*
Copyright (C) 2007 Tim Seidel Copyright (C) 2007 Tim Seidel
Copyright (C) 2014 pleonex Copyright (C) 2014 pleonex
Copyright (C) 2008-2022 DeSmuME team Copyright (C) 2008-2025 DeSmuME team
This file is part of DeSmuME This file is part of DeSmuME
@ -3230,6 +3230,8 @@ typedef struct _FW_WFCProfile
class ClientPCapInterface class ClientPCapInterface
{ {
public: public:
virtual ~ClientPCapInterface() {}
virtual int findalldevs(void **alldevs, char *errbuf) = 0; virtual int findalldevs(void **alldevs, char *errbuf) = 0;
virtual void freealldevs(void *alldevs) = 0; virtual void freealldevs(void *alldevs) = 0;
virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf) = 0; virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf) = 0;
@ -3246,6 +3248,8 @@ private:
void __CopyErrorString(char *errbuf); void __CopyErrorString(char *errbuf);
public: public:
virtual ~DummyPCapInterface() {}
virtual int findalldevs(void **alldevs, char *errbuf); virtual int findalldevs(void **alldevs, char *errbuf);
virtual void freealldevs(void *alldevs); virtual void freealldevs(void *alldevs);
virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf); virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf);
@ -3261,6 +3265,8 @@ public:
class POSIXPCapInterface : public ClientPCapInterface class POSIXPCapInterface : public ClientPCapInterface
{ {
public: public:
virtual ~POSIXPCapInterface() {}
virtual int findalldevs(void **alldevs, char *errbuf); virtual int findalldevs(void **alldevs, char *errbuf);
virtual void freealldevs(void *alldevs); virtual void freealldevs(void *alldevs);
virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf); virtual void* open(const char *source, int snaplen, int flags, int readtimeout, char *errbuf);
@ -3286,7 +3292,7 @@ protected:
public: public:
WifiCommInterface(); WifiCommInterface();
~WifiCommInterface(); virtual ~WifiCommInterface();
virtual bool Start(WifiHandler *currentWifiHandler) = 0; virtual bool Start(WifiHandler *currentWifiHandler) = 0;
virtual void Stop() = 0; virtual void Stop() = 0;
@ -3302,7 +3308,7 @@ protected:
public: public:
AdhocCommInterface(); AdhocCommInterface();
~AdhocCommInterface(); virtual ~AdhocCommInterface();
int _RXPacketGetFromSocket(RXRawPacketData &rawPacket); int _RXPacketGetFromSocket(RXRawPacketData &rawPacket);