summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Howard2014-04-01 20:43:45 -0400
committerSimon Howard2014-04-01 20:43:45 -0400
commit8eb3200286d523379295143ce3f44d77ce036d4b (patch)
treeac0edb56027f285425d896e12a1b14d78ad294b9 /src
parent565a1f08566520147a5abff5744dbcc256e5030c (diff)
downloadchocolate-doom-8eb3200286d523379295143ce3f44d77ce036d4b.tar.gz
chocolate-doom-8eb3200286d523379295143ce3f44d77ce036d4b.tar.bz2
chocolate-doom-8eb3200286d523379295143ce3f44d77ce036d4b.zip
Replace all snprintf() calls with M_snprintf().
The Windows API has an _snprintf function that is not the same as Unix's snprintf(): if the string is truncated then no trailing NUL character is appended. This makes the function unsafe. Define a replacement/wrapper called M_snprintf that works the same but always appends a trailing NUL, for safety on Windows and other OSes that behave like this. Do the same thing for vsnprintf(), and update HACKING to list snprintf/vsnprintf as forbidden functions. This fixes #375; thanks to Quasar for pointing out the different behavior of these functions.
Diffstat (limited to 'src')
-rw-r--r--src/d_iwad.c8
-rw-r--r--src/deh_str.c3
-rw-r--r--src/doom/am_map.c5
-rw-r--r--src/doom/d_main.c6
-rw-r--r--src/doom/g_game.c10
-rw-r--r--src/doom/hu_stuff.c4
-rw-r--r--src/doom/p_saveg.c6
-rw-r--r--src/doom/s_sound.c3
-rw-r--r--src/doom/st_stuff.c9
-rw-r--r--src/doomtype.h4
-rw-r--r--src/heretic/am_map.c6
-rw-r--r--src/heretic/d_main.c4
-rw-r--r--src/heretic/f_finale.c2
-rw-r--r--src/heretic/i_sound.c34
-rw-r--r--src/heretic/p_saveg.c4
-rw-r--r--src/heretic/sb_bar.c14
-rw-r--r--src/hexen/am_map.c13
-rw-r--r--src/hexen/h2_main.c6
-rw-r--r--src/hexen/in_lude.c9
-rw-r--r--src/hexen/mn_menu.c2
-rw-r--r--src/hexen/p_acs.c10
-rw-r--r--src/hexen/p_setup.c2
-rw-r--r--src/hexen/p_spec.c5
-rw-r--r--src/hexen/sb_bar.c44
-rw-r--r--src/hexen/sc_man.c2
-rw-r--r--src/hexen/sv_save.c34
-rw-r--r--src/i_oplmusic.c28
-rw-r--r--src/i_pcsound.c2
-rw-r--r--src/i_sdlsound.c6
-rw-r--r--src/i_system.c4
-rw-r--r--src/i_video.c4
-rw-r--r--src/m_controls.c3
-rw-r--r--src/m_misc.c33
-rw-r--r--src/m_misc.h4
-rw-r--r--src/net_gui.c7
-rw-r--r--src/net_loop.c5
-rw-r--r--src/net_sdl.c13
-rw-r--r--src/net_server.c4
-rw-r--r--src/setup/txt_mouseinput.c2
-rw-r--r--src/strife/am_map.c5
-rw-r--r--src/strife/d_main.c6
-rw-r--r--src/strife/g_game.c16
-rw-r--r--src/strife/m_saves.c10
-rw-r--r--src/strife/p_inter.c8
-rw-r--r--src/strife/p_saveg.c7
-rw-r--r--src/strife/p_user.c5
-rw-r--r--src/strife/s_sound.c2
-rw-r--r--src/strife/st_stuff.c11
-rw-r--r--src/v_video.c2
49 files changed, 241 insertions, 195 deletions
diff --git a/src/d_iwad.c b/src/d_iwad.c
index 508abf9d..3794164c 100644
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -351,14 +351,14 @@ static void CheckSteamGUSPatches(void)
len = strlen(install_path) + strlen(STEAM_BFG_GUS_PATCHES) + 20;
patch_path = malloc(len);
- snprintf(patch_path, len, "%s\\%s\\ACBASS.PAT",
- install_path, STEAM_BFG_GUS_PATCHES);
+ M_snprintf(patch_path, len, "%s\\%s\\ACBASS.PAT",
+ install_path, STEAM_BFG_GUS_PATCHES);
// Does acbass.pat exist? If so, then set gus_patch_path.
if (M_FileExists(patch_path))
{
- snprintf(patch_path, len, "%s\\%s",
- install_path, STEAM_BFG_GUS_PATCHES);
+ M_snprintf(patch_path, len, "%s\\%s",
+ install_path, STEAM_BFG_GUS_PATCHES);
M_SetVariable("gus_patch_path", patch_path);
}
diff --git a/src/deh_str.c b/src/deh_str.c
index 9bd429b6..5639638d 100644
--- a/src/deh_str.c
+++ b/src/deh_str.c
@@ -31,6 +31,7 @@
#include "doomtype.h"
#include "deh_str.h"
+#include "m_misc.h"
#include "z_zone.h"
@@ -401,7 +402,7 @@ void DEH_snprintf(char *buffer, size_t len, char *fmt, ...)
va_start(args, fmt);
- vsnprintf(buffer, len, repl, args);
+ M_vsnprintf(buffer, len, repl, args);
va_end(args);
}
diff --git a/src/doom/am_map.c b/src/doom/am_map.c
index b7bfd3bd..d920823f 100644
--- a/src/doom/am_map.c
+++ b/src/doom/am_map.c
@@ -38,6 +38,7 @@
#include "m_cheat.h"
#include "m_controls.h"
+#include "m_misc.h"
#include "i_system.h"
// Needs access to LFB.
@@ -689,8 +690,8 @@ AM_Responder
}
else if (key == key_map_mark)
{
- snprintf(buffer, sizeof(buffer), "%s %d",
- DEH_String(AMSTR_MARKEDSPOT), markpointnum);
+ M_snprintf(buffer, sizeof(buffer), "%s %d",
+ DEH_String(AMSTR_MARKEDSPOT), markpointnum);
plr->message = buffer;
AM_addMark();
}
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index 0cdb83d4..2a4fe236 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -384,7 +384,7 @@ void D_BindVariables(void)
{
char buf[12];
- snprintf(buf, sizeof(buf), "chatmacro%i", i);
+ M_snprintf(buf, sizeof(buf), "chatmacro%i", i);
M_BindVariable(buf, &chat_macros[i]);
}
}
@@ -669,8 +669,8 @@ static char *GetGameName(char *gamename)
gamename_size = strlen(deh_sub) + 10;
gamename = Z_Malloc(gamename_size, PU_STATIC, 0);
version = G_VanillaVersionCode();
- snprintf(gamename, gamename_size, deh_sub,
- version / 100, version % 100);
+ M_snprintf(gamename, gamename_size, deh_sub,
+ version / 100, version % 100);
while (gamename[0] != '\0' && isspace(gamename[0]))
{
diff --git a/src/doom/g_game.c b/src/doom/g_game.c
index 034bb3ef..8dca36d9 100644
--- a/src/doom/g_game.c
+++ b/src/doom/g_game.c
@@ -915,8 +915,8 @@ void G_Ticker (void)
{
static char turbomessage[80];
extern char *player_names[4];
- snprintf(turbomessage, sizeof(turbomessage),
- "%s is turbo!", player_names[i]);
+ M_snprintf(turbomessage, sizeof(turbomessage),
+ "%s is turbo!", player_names[i]);
players[consoleplayer].message = turbomessage;
turbodetected[i] = false;
}
@@ -1949,7 +1949,7 @@ void G_RecordDemo (char *name)
usergame = false;
demoname_size = strlen(name) + 5;
demoname = Z_Malloc(demoname_size, PU_STATIC, NULL);
- snprintf(demoname, demoname_size, "%s.lmp", name);
+ M_snprintf(demoname, demoname_size, "%s.lmp", name);
maxsize = 0x20000;
//!
@@ -2076,8 +2076,8 @@ static char *DemoVersionDescription(int version)
}
else
{
- snprintf(resultbuf, sizeof(resultbuf),
- "%i.%i (unknown)", version / 100, version % 100);
+ M_snprintf(resultbuf, sizeof(resultbuf),
+ "%i.%i (unknown)", version / 100, version % 100);
return resultbuf;
}
}
diff --git a/src/doom/hu_stuff.c b/src/doom/hu_stuff.c
index 8ea3912e..dd72e63f 100644
--- a/src/doom/hu_stuff.c
+++ b/src/doom/hu_stuff.c
@@ -627,8 +627,8 @@ boolean HU_Responder(event_t *ev)
// static unsigned char buf[20]; // DEBUG
HU_queueChatChar(c);
- // snprintf(buf, sizeof(buf), "KEY: %d => %d", ev->data1, c);
- // plr->message = buf;
+ // M_snprintf(buf, sizeof(buf), "KEY: %d => %d", ev->data1, c);
+ // plr->message = buf;
}
if (c == KEY_ENTER)
{
diff --git a/src/doom/p_saveg.c b/src/doom/p_saveg.c
index 5fa70fea..a2f954a3 100644
--- a/src/doom/p_saveg.c
+++ b/src/doom/p_saveg.c
@@ -79,7 +79,7 @@ char *P_SaveGameFile(int slot)
}
DEH_snprintf(basename, 32, SAVEGAMENAME "%d.dsg", slot);
- snprintf(filename, filename_size, "%s%s", savegamedir, basename);
+ M_snprintf(filename, filename_size, "%s%s", savegamedir, basename);
return filename;
}
@@ -1363,7 +1363,7 @@ void P_WriteSaveGameHeader(char *description)
saveg_write8(0);
memset(name, 0, sizeof(name));
- snprintf(name, sizeof(name), "version %i", G_VanillaVersionCode());
+ M_snprintf(name, sizeof(name), "version %i", G_VanillaVersionCode());
for (i=0; i<VERSIONSIZE; ++i)
saveg_write8(name[i]);
@@ -1400,7 +1400,7 @@ boolean P_ReadSaveGameHeader(void)
read_vcheck[i] = saveg_read8();
memset(vcheck, 0, sizeof(vcheck));
- snprintf(vcheck, sizeof(vcheck), "version %i", G_VanillaVersionCode());
+ M_snprintf(vcheck, sizeof(vcheck), "version %i", G_VanillaVersionCode());
if (strcmp(read_vcheck, vcheck) != 0)
return false; // bad version
diff --git a/src/doom/s_sound.c b/src/doom/s_sound.c
index 4e81b016..dc0473a3 100644
--- a/src/doom/s_sound.c
+++ b/src/doom/s_sound.c
@@ -38,6 +38,7 @@
#include "sounds.h"
#include "s_sound.h"
+#include "m_misc.h"
#include "m_random.h"
#include "m_argv.h"
@@ -638,7 +639,7 @@ void S_ChangeMusic(int musicnum, int looping)
// get lumpnum if neccessary
if (!music->lumpnum)
{
- snprintf(namebuf, sizeof(namebuf), "d_%s", DEH_String(music->name));
+ M_snprintf(namebuf, sizeof(namebuf), "d_%s", DEH_String(music->name));
music->lumpnum = W_GetNumForName(namebuf);
}
diff --git a/src/doom/st_stuff.c b/src/doom/st_stuff.c
index b9d9aefd..d00eeba1 100644
--- a/src/doom/st_stuff.c
+++ b/src/doom/st_stuff.c
@@ -33,6 +33,7 @@
#include "i_system.h"
#include "i_video.h"
#include "z_zone.h"
+#include "m_misc.h"
#include "m_random.h"
#include "w_wad.h"
@@ -598,10 +599,10 @@ ST_Responder (event_t* ev)
else if (cht_CheckCheat(&cheat_mypos, ev->data2))
{
static char buf[ST_MSGWIDTH];
- snprintf(buf, sizeof(buf), "ang=0x%x;x,y=(0x%x,0x%x)",
- players[consoleplayer].mo->angle,
- players[consoleplayer].mo->x,
- players[consoleplayer].mo->y);
+ M_snprintf(buf, sizeof(buf), "ang=0x%x;x,y=(0x%x,0x%x)",
+ players[consoleplayer].mo->angle,
+ players[consoleplayer].mo->x,
+ players[consoleplayer].mo->y);
plyr->message = buf;
}
}
diff --git a/src/doomtype.h b/src/doomtype.h
index 626d69a8..8b4467f1 100644
--- a/src/doomtype.h
+++ b/src/doomtype.h
@@ -35,10 +35,6 @@
#ifdef _WIN32
-#define snprintf _snprintf
-#if _MSC_VER < 1400 /* not needed for Visual Studio 2008 */
-#define vsnprintf _vsnprintf
-#endif
#define strcasecmp stricmp
#define strncasecmp strnicmp
diff --git a/src/heretic/am_map.c b/src/heretic/am_map.c
index fb2d0f72..df3932a1 100644
--- a/src/heretic/am_map.c
+++ b/src/heretic/am_map.c
@@ -411,7 +411,7 @@ void AM_loadPics(void)
//char namebuf[9];
/* for (i=0;i<10;i++)
{
- snprintf(namebuf, sizeof(namebuf), "AMMNUM%d", i);
+ M_snprintf(namebuf, sizeof(namebuf), "AMMNUM%d", i);
marknums[i] = W_CacheLumpName(namebuf, PU_STATIC);
}*/
maplump = W_CacheLumpName(DEH_String("AUTOPAGE"), PU_STATIC);
@@ -603,8 +603,8 @@ boolean AM_Responder(event_t * ev)
}
else if (key == key_map_mark)
{
- snprintf(buffer, sizeof(buffer), "%s %d",
- AMSTR_MARKEDSPOT, markpointnum);
+ M_snprintf(buffer, sizeof(buffer), "%s %d",
+ AMSTR_MARKEDSPOT, markpointnum);
plr->message = buffer;
AM_addMark();
}
diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c
index 81fa6c0d..89c88108 100644
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -247,7 +247,7 @@ void D_DoomLoop(void)
if (M_CheckParm("-debugfile"))
{
char filename[20];
- snprintf(filename, sizeof(filename), "debug%i.txt", consoleplayer);
+ M_snprintf(filename, sizeof(filename), "debug%i.txt", consoleplayer);
debugfile = fopen(filename, "w");
}
I_GraphicsCheckCommandLine();
@@ -776,7 +776,7 @@ void D_BindVariables(void)
{
char buf[12];
- snprintf(buf, sizeof(buf), "chatmacro%i", i);
+ M_snprintf(buf, sizeof(buf), "chatmacro%i", i);
M_BindVariable(buf, &chat_macros[i]);
}
}
diff --git a/src/heretic/f_finale.c b/src/heretic/f_finale.c
index 7978e45b..c7212add 100644
--- a/src/heretic/f_finale.c
+++ b/src/heretic/f_finale.c
@@ -405,7 +405,7 @@ void F_BunnyScroll(void)
laststage = stage;
}
- snprintf(name, sizeof(name), "END%i", stage);
+ M_snprintf(name, sizeof(name), "END%i", stage);
V_DrawPatch((SCREENWIDTH - 13 * 8) / 2, (SCREENHEIGHT - 8 * 8) / 2,
W_CacheLumpName(name, PU_CACHE));
}
diff --git a/src/heretic/i_sound.c b/src/heretic/i_sound.c
index 2dc66239..f415ce0a 100644
--- a/src/heretic/i_sound.c
+++ b/src/heretic/i_sound.c
@@ -211,8 +211,8 @@ int I_GetSfxLumpNum(sfxinfo_t * sound)
return 0;
if (sound->link)
sound = sound->link;
-// snprintf(namebuf, sizeof(namebuf), "d%c%s",
-// snd_prefixen[snd_SfxDevice], sound->name);
+// M_snprintf(namebuf, sizeof(namebuf), "d%c%s",
+// snd_prefixen[snd_SfxDevice], sound->name);
return W_GetNumForName(sound->name);
}
@@ -320,15 +320,15 @@ void I_sndArbitrateCards(void)
{
if (debugmode)
{
- snprintf(tmp, sizeof(tmp), "cfg p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
+ M_snprintf(tmp, sizeof(tmp), "cfg p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
tprintf(tmp, 0);
}
if (SB_Detect(&snd_SBport, &snd_SBirq, &snd_SBdma, 0))
{
- snprintf(tmp, sizeof(tmp),
- "SB isn't responding at p=0x%x, i=%d, d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
+ M_snprintf(tmp, sizeof(tmp),
+ "SB isn't responding at p=0x%x, i=%d, d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
tprintf(tmp, 0);
}
else
@@ -336,8 +336,8 @@ void I_sndArbitrateCards(void)
if (debugmode)
{
- snprintf(tmp, sizeof(tmp), "SB_Detect returned p=0x%x,i=%d,d=%d\n",
- snd_SBport, snd_SBirq, snd_SBdma);
+ M_snprintf(tmp, sizeof(tmp), "SB_Detect returned p=0x%x,i=%d,d=%d\n",
+ snd_SBport, snd_SBirq, snd_SBdma);
tprintf(tmp, 0);
}
}
@@ -354,14 +354,14 @@ void I_sndArbitrateCards(void)
{
if (debugmode)
{
- snprintf(tmp, sizeof(tmp), "cfg p=0x%x\n", snd_Mport);
+ M_snprintf(tmp, sizeof(tmp), "cfg p=0x%x\n", snd_Mport);
tprintf(tmp, 0);
}
if (MPU_Detect(&snd_Mport, &i))
{
- snprintf(tmp, sizeof(tmp),
- "The MPU-401 isn't reponding @ p=0x%x.\n", snd_Mport);
+ M_snprintf(tmp, sizeof(tmp),
+ "The MPU-401 isn't reponding @ p=0x%x.\n", snd_Mport);
tprintf(tmp, 0);
}
else
@@ -399,11 +399,11 @@ void I_StartupSound(void)
if (debugmode)
{
- snprintf(tmp, sizeof(tmp), " Music device #%d & dmxCode=%d",
- snd_MusicDevice, dmxCodes[snd_MusicDevice]);
+ M_snprintf(tmp, sizeof(tmp), " Music device #%d & dmxCode=%d",
+ snd_MusicDevice, dmxCodes[snd_MusicDevice]);
tprintf(tmp, 0);
- snprintf(tmp, sizeof(tmp), " Sfx device #%d & dmxCode=%d\n",
- snd_SfxDevice, dmxCodes[snd_SfxDevice]);
+ M_snprintf(tmp, sizeof(tmp), " Sfx device #%d & dmxCode=%d\n",
+ snd_SfxDevice, dmxCodes[snd_SfxDevice]);
tprintf(tmp, 0);
}
@@ -414,7 +414,7 @@ void I_StartupSound(void)
if (debugmode)
{
- snprintf(tmp, sizeof(tmp), " DMX_Init() returned %d", rc);
+ M_snprintf(tmp, sizeof(tmp), " DMX_Init() returned %d", rc);
tprintf(tmp, 0);
}
diff --git a/src/heretic/p_saveg.c b/src/heretic/p_saveg.c
index 27e6423c..7b4c5389 100644
--- a/src/heretic/p_saveg.c
+++ b/src/heretic/p_saveg.c
@@ -55,8 +55,8 @@ char *SV_Filename(int slot)
filename_len = strlen(savegamedir) + strlen(SAVEGAMENAME) + 8;
filename = malloc(filename_len);
- snprintf(filename, filename_len,
- "%s" SAVEGAMENAME "%d.hsg", savegamedir, slot);
+ M_snprintf(filename, filename_len,
+ "%s" SAVEGAMENAME "%d.hsg", savegamedir, slot);
return filename;
}
diff --git a/src/heretic/sb_bar.c b/src/heretic/sb_bar.c
index 0a2da956..6821fb1e 100644
--- a/src/heretic/sb_bar.c
+++ b/src/heretic/sb_bar.c
@@ -484,20 +484,20 @@ static void DrawSoundInfo(void)
MN_DrTextA(DEH_String("------"), xPos[0], y);
continue;
}
- snprintf(text, sizeof(text), "%s", c->name);
+ M_snprintf(text, sizeof(text), "%s", c->name);
M_ForceUppercase(text);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->type);
+ M_snprintf(text, sizeof(text), "%d", c->mo->type);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->x >> FRACBITS);
+ M_snprintf(text, sizeof(text), "%d", c->mo->x >> FRACBITS);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->y >> FRACBITS);
+ M_snprintf(text, sizeof(text), "%d", c->mo->y >> FRACBITS);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->id);
+ M_snprintf(text, sizeof(text), "%d", c->id);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->priority);
+ M_snprintf(text, sizeof(text), "%d", c->priority);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->distance);
+ M_snprintf(text, sizeof(text), "%d", c->distance);
MN_DrTextA(text, xPos[x++], y);
}
UpdateState |= I_FULLSCRN;
diff --git a/src/hexen/am_map.c b/src/hexen/am_map.c
index 21b6c45c..cbbb3586 100644
--- a/src/hexen/am_map.c
+++ b/src/hexen/am_map.c
@@ -29,6 +29,7 @@
#include "i_video.h"
#include "i_swap.h"
#include "m_controls.h"
+#include "m_misc.h"
#include "p_local.h"
#include "am_map.h"
#include "am_data.h"
@@ -1474,8 +1475,8 @@ void AM_DrawDeathmatchStats(void)
else
{
MN_DrTextA(PlayerColorText[order[i]], 8, yPosition);
- snprintf(textBuffer, sizeof(textBuffer),
- "%d", fragCount[order[i]]);
+ M_snprintf(textBuffer, sizeof(textBuffer),
+ "%d", fragCount[order[i]]);
MN_DrTextA(textBuffer, 80, yPosition);
yPosition += 10;
}
@@ -1509,19 +1510,19 @@ static void DrawWorldTimer(void)
worldTimer -= minutes * 60;
seconds = worldTimer;
- snprintf(timeBuffer, sizeof(timeBuffer),
- "%.2d : %.2d : %.2d", hours, minutes, seconds);
+ M_snprintf(timeBuffer, sizeof(timeBuffer),
+ "%.2d : %.2d : %.2d", hours, minutes, seconds);
MN_DrTextA(timeBuffer, 240, 8);
if (days)
{
if (days == 1)
{
- snprintf(dayBuffer, sizeof(dayBuffer), "%.2d DAY", days);
+ M_snprintf(dayBuffer, sizeof(dayBuffer), "%.2d DAY", days);
}
else
{
- snprintf(dayBuffer, sizeof(dayBuffer), "%.2d DAYS", days);
+ M_snprintf(dayBuffer, sizeof(dayBuffer), "%.2d DAYS", days);
}
MN_DrTextA(dayBuffer, 240, 20);
if (days >= 5)
diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c
index 607bc26b..a7c3dee3 100644
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -172,7 +172,7 @@ void D_BindVariables(void)
{
char buf[12];
- snprintf(buf, sizeof(buf), "chatmacro%i", i);
+ M_snprintf(buf, sizeof(buf), "chatmacro%i", i);
M_BindVariable(buf, &chat_macros[i]);
}
}
@@ -190,7 +190,7 @@ static void D_SetDefaultSavePath(void)
if (!strcmp(SavePath, ""))
{
SavePath = malloc(10);
- snprintf(SavePath, 10, "hexndata%c", DIR_SEPARATOR);
+ M_snprintf(SavePath, 10, "hexndata%c", DIR_SEPARATOR);
}
}
@@ -632,7 +632,7 @@ void H2_GameLoop(void)
if (M_CheckParm("-debugfile"))
{
char filename[20];
- snprintf(filename, sizeof(filename), "debug%i.txt", consoleplayer);
+ M_snprintf(filename, sizeof(filename), "debug%i.txt", consoleplayer);
debugfile = fopen(filename, "w");
}
I_SetWindowTitle("Hexen");
diff --git a/src/hexen/in_lude.c b/src/hexen/in_lude.c
index b1d0c4c9..fb1b1020 100644
--- a/src/hexen/in_lude.c
+++ b/src/hexen/in_lude.c
@@ -28,6 +28,7 @@
#include "s_sound.h"
#include "i_system.h"
#include "i_video.h"
+#include "m_misc.h"
#include "p_local.h"
#include "v_video.h"
@@ -537,8 +538,8 @@ static void DrNumber(int val, int x, int y, int wrapThresh)
if (!(val < -9 && wrapThresh < 1000))
{
- snprintf(buff, sizeof(buff), "%d",
- val >= wrapThresh ? val % wrapThresh : val);
+ M_snprintf(buff, sizeof(buff), "%d",
+ val >= wrapThresh ? val % wrapThresh : val);
}
MN_DrTextA(buff, x - MN_TextAWidth(buff) / 2, y);
}
@@ -555,8 +556,8 @@ static void DrNumberBold(int val, int x, int y, int wrapThresh)
if (!(val < -9 && wrapThresh < 1000))
{
- snprintf(buff, sizeof(buff), "%d",
- val >= wrapThresh ? val % wrapThresh : val);
+ M_snprintf(buff, sizeof(buff), "%d",
+ val >= wrapThresh ? val % wrapThresh : val);
}
MN_DrTextAYellow(buff, x - MN_TextAWidth(buff) / 2, y);
}
diff --git a/src/hexen/mn_menu.c b/src/hexen/mn_menu.c
index d12d0dc3..75433306 100644
--- a/src/hexen/mn_menu.c
+++ b/src/hexen/mn_menu.c
@@ -685,7 +685,7 @@ static boolean ReadDescriptionForSlot(int slot, char *description)
char name[100];
char versionText[HXS_VERSION_TEXT_LENGTH];
- snprintf(name, sizeof(name), "%shex%d.hxs", SavePath, slot);
+ M_snprintf(name, sizeof(name), "%shex%d.hxs", SavePath, slot);
fp = fopen(name, "rb");
diff --git a/src/hexen/p_acs.c b/src/hexen/p_acs.c
index a9e64517..7ae6a985 100644
--- a/src/hexen/p_acs.c
+++ b/src/hexen/p_acs.c
@@ -443,8 +443,8 @@ boolean P_StartACS(int number, int map, byte * args, mobj_t * activator,
if (infoIndex == -1)
{ // Script not found
//I_Error("P_StartACS: Unknown script number %d", number);
- snprintf(ErrorMsg, sizeof(ErrorMsg),
- "P_STARTACS ERROR: UNKNOWN SCRIPT %d", number);
+ M_snprintf(ErrorMsg, sizeof(ErrorMsg),
+ "P_STARTACS ERROR: UNKNOWN SCRIPT %d", number);
P_SetMessage(&players[consoleplayer], ErrorMsg, true);
}
statePtr = &ACSInfo[infoIndex].state;
@@ -540,8 +540,8 @@ boolean P_StartLockedACS(line_t * line, byte * args, mobj_t * mo, int side)
{
if (!(mo->player->keys & (1 << (lock - 1))))
{
- snprintf(LockedBuffer, sizeof(LockedBuffer),
- "YOU NEED THE %s\n", TextKeyMessages[lock - 1]);
+ M_snprintf(LockedBuffer, sizeof(LockedBuffer),
+ "YOU NEED THE %s\n", TextKeyMessages[lock - 1]);
P_SetMessage(mo->player, LockedBuffer, true);
S_StartSound(mo, SFX_DOOR_LOCKED);
return false;
@@ -1692,7 +1692,7 @@ static int CmdPrintNumber(void)
{
char tempStr[16];
- snprintf(tempStr, sizeof(tempStr), "%d", Pop());
+ M_snprintf(tempStr, sizeof(tempStr), "%d", Pop());
M_StringConcat(PrintBuffer, tempStr, sizeof(PrintBuffer));
return SCRIPT_CONTINUE;
}
diff --git a/src/hexen/p_setup.c b/src/hexen/p_setup.c
index cd075651..181e19fe 100644
--- a/src/hexen/p_setup.c
+++ b/src/hexen/p_setup.c
@@ -700,7 +700,7 @@ void P_SetupLevel(int episode, int map, int playermask, skill_t skill)
P_InitThinkers();
leveltime = 0;
- snprintf(lumpname, sizeof(lumpname), "MAP%02d", map);
+ M_snprintf(lumpname, sizeof(lumpname), "MAP%02d", map);
lumpnum = W_GetNumForName(lumpname);
//
// Begin processing map lumps
diff --git a/src/hexen/p_spec.c b/src/hexen/p_spec.c
index 06a4a6ff..58f3defe 100644
--- a/src/hexen/p_spec.c
+++ b/src/hexen/p_spec.c
@@ -27,6 +27,7 @@
#include "h2def.h"
#include "i_system.h"
+#include "m_misc.h"
#include "p_local.h"
#include "s_sound.h"
@@ -428,8 +429,8 @@ static boolean CheckedLockedDoor(mobj_t * mo, byte lock)
}
if (!(mo->player->keys & (1 << (lock - 1))))
{
- snprintf(LockedBuffer, sizeof(LockedBuffer),
- "YOU NEED THE %s\n", TextKeyMessages[lock - 1]);
+ M_snprintf(LockedBuffer, sizeof(LockedBuffer),
+ "YOU NEED THE %s\n", TextKeyMessages[lock - 1]);
P_SetMessage(mo->player, LockedBuffer, true);
S_StartSound(mo, SFX_DOOR_LOCKED);
return false;
diff --git a/src/hexen/sb_bar.c b/src/hexen/sb_bar.c
index b35c1f51..5d2438aa 100644
--- a/src/hexen/sb_bar.c
+++ b/src/hexen/sb_bar.c
@@ -640,20 +640,20 @@ static void DrawSoundInfo(void)
MN_DrTextA("------", xPos[0], y);
continue;
}
- snprintf(text, sizeof(text), "%s", c->name);
+ M_snprintf(text, sizeof(text), "%s", c->name);
M_ForceUppercase(text);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->type);
+ M_snprintf(text, sizeof(text), "%d", c->mo->type);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->x >> FRACBITS);
+ M_snprintf(text, sizeof(text), "%d", c->mo->x >> FRACBITS);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->mo->y >> FRACBITS);
+ M_snprintf(text, sizeof(text), "%d", c->mo->y >> FRACBITS);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", (int) c->id);
+ M_snprintf(text, sizeof(text), "%d", (int) c->id);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->priority);
+ M_snprintf(text, sizeof(text), "%d", c->priority);
MN_DrTextA(text, xPos[x++], y);
- snprintf(text, sizeof(text), "%d", c->distance);
+ M_snprintf(text, sizeof(text), "%d", c->distance);
MN_DrTextA(text, xPos[x++], y);
}
UpdateState |= I_FULLSCRN;
@@ -1738,7 +1738,7 @@ static void CheatWarpFunc(player_t * player, Cheat_t * cheat)
P_SetMessage(player, TXT_CHEATBADINPUT, true);
return;
}
- snprintf(mapName, sizeof(mapName), "MAP%02d", map);
+ M_snprintf(mapName, sizeof(mapName), "MAP%02d", map);
if (W_CheckNumForName(mapName) == -1)
{ // Can't find
P_SetMessage(player, TXT_CHEATNOMAP, true);
@@ -1769,7 +1769,7 @@ static void CheatMassacreFunc(player_t * player, Cheat_t * cheat)
char buffer[80];
count = P_Massacre();
- snprintf(buffer, sizeof(buffer), "%d MONSTERS KILLED\n", count);
+ M_snprintf(buffer, sizeof(buffer), "%d MONSTERS KILLED\n", count);
P_SetMessage(player, buffer, true);
}
@@ -1857,12 +1857,12 @@ static void CheatVersionFunc(player_t * player, Cheat_t * cheat)
static void CheatDebugFunc(player_t * player, Cheat_t * cheat)
{
char textBuffer[50];
- snprintf(textBuffer, sizeof(textBuffer),
- "MAP %d (%d) X:%5d Y:%5d Z:%5d",
- P_GetMapWarpTrans(gamemap),
- gamemap,
- player->mo->x >> FRACBITS,
- player->mo->y >> FRACBITS, player->mo->z >> FRACBITS);
+ M_snprintf(textBuffer, sizeof(textBuffer),
+ "MAP %d (%d) X:%5d Y:%5d Z:%5d",
+ P_GetMapWarpTrans(gamemap),
+ gamemap,
+ player->mo->x >> FRACBITS,
+ player->mo->y >> FRACBITS, player->mo->z >> FRACBITS);
P_SetMessage(player, textBuffer, true);
}
@@ -1897,8 +1897,8 @@ static void CheatScriptFunc3(player_t * player, Cheat_t * cheat)
if (P_StartACS(script, 0, script_args, player->mo, NULL, 0))
{
- snprintf(textBuffer, sizeof(textBuffer),
- "RUNNING SCRIPT %.2d", script);
+ M_snprintf(textBuffer, sizeof(textBuffer),
+ "RUNNING SCRIPT %.2d", script);
P_SetMessage(player, textBuffer, true);
}
}
@@ -1930,8 +1930,8 @@ static void CheatTrackFunc1(player_t * player, Cheat_t * cheat)
P_SetMessage(player, "ERROR INITIALIZING CD", true);
}
- snprintf(buffer, sizeof(buffer), "ENTER DESIRED CD TRACK (%.2d - %.2d):\n",
- I_CDMusFirstTrack(), I_CDMusLastTrack());
+ M_snprintf(buffer, sizeof(buffer), "ENTER DESIRED CD TRACK (%.2d - %.2d):\n",
+ I_CDMusFirstTrack(), I_CDMusLastTrack());
P_SetMessage(player, buffer, true);
}
@@ -1968,14 +1968,14 @@ static void CheatTrackFunc2(player_t * player, Cheat_t * cheat)
if (!S_StartCustomCDTrack(track))
{
- snprintf(buffer, sizeof(buffer),
- "ERROR WHILE TRYING TO PLAY CD TRACK: %.2d\n", track);
+ M_snprintf(buffer, sizeof(buffer),
+ "ERROR WHILE TRYING TO PLAY CD TRACK: %.2d\n", track);
P_SetMessage(player, buffer, true);
}
else
{
// No error encountered while attempting to play the track
- snprintf(buffer, sizeof(buffer), "PLAYING TRACK: %.2d\n", track);
+ M_snprintf(buffer, sizeof(buffer), "PLAYING TRACK: %.2d\n", track);
P_SetMessage(player, buffer, true);
}
}
diff --git a/src/hexen/sc_man.c b/src/hexen/sc_man.c
index 35f5ec0b..bf3574c3 100644
--- a/src/hexen/sc_man.c
+++ b/src/hexen/sc_man.c
@@ -88,7 +88,7 @@ void SC_Open(char *name)
if (sc_FileScripts == true)
{
- snprintf(fileName, sizeof(fileName), "%s%s.txt", sc_ScriptsDir, name);
+ M_snprintf(fileName, sizeof(fileName), "%s%s.txt", sc_ScriptsDir, name);
SC_OpenFile(fileName);
}
else
diff --git a/src/hexen/sv_save.c b/src/hexen/sv_save.c
index dd707398..1aecc5cc 100644
--- a/src/hexen/sv_save.c
+++ b/src/hexen/sv_save.c
@@ -1940,7 +1940,7 @@ void SV_SaveGame(int slot, char *description)
unsigned int i;
// Open the output file
- snprintf(fileName, sizeof(fileName), "%shex6.hxs", SavePath);
+ M_snprintf(fileName, sizeof(fileName), "%shex6.hxs", SavePath);
OpenStreamOut(fileName);
// Write game save description
@@ -2000,7 +2000,7 @@ void SV_SaveMap(boolean savePlayers)
SavingPlayers = savePlayers;
// Open the output file
- snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
+ M_snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
OpenStreamOut(fileName);
// Place a header marker
@@ -2048,7 +2048,7 @@ void SV_LoadGame(int slot)
}
// Create the name
- snprintf(fileName, sizeof(fileName), "%shex6.hxs", SavePath);
+ M_snprintf(fileName, sizeof(fileName), "%shex6.hxs", SavePath);
// Load the file
M_ReadFile(fileName, &SaveBuffer);
@@ -2192,7 +2192,7 @@ void SV_MapTeleport(int map, int position)
TargetPlayerAddrs = NULL;
gamemap = map;
- snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
+ M_snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
if (!deathmatch && ExistingFile(fileName))
{ // Unarchive map
SV_LoadMap();
@@ -2342,7 +2342,7 @@ boolean SV_RebornSlotAvailable(void)
{
char fileName[100];
- snprintf(fileName, sizeof(fileName), "%shex%d.hxs", SavePath, REBORN_SLOT);
+ M_snprintf(fileName, sizeof(fileName), "%shex%d.hxs", SavePath, REBORN_SLOT);
return ExistingFile(fileName);
}
@@ -2363,7 +2363,7 @@ void SV_LoadMap(void)
RemoveAllThinkers();
// Create the name
- snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
+ M_snprintf(fileName, sizeof(fileName), "%shex6%02d.hxs", SavePath, gamemap);
// Load the file
M_ReadFile(fileName, &SaveBuffer);
@@ -3204,11 +3204,11 @@ static void ClearSaveSlot(int slot)
for (i = 0; i < MAX_MAPS; i++)
{
- snprintf(fileName, sizeof(fileName),
- "%shex%d%02d.hxs", SavePath, slot, i);
+ M_snprintf(fileName, sizeof(fileName),
+ "%shex%d%02d.hxs", SavePath, slot, i);
remove(fileName);
}
- snprintf(fileName, sizeof(fileName), "%shex%d.hxs", SavePath, slot);
+ M_snprintf(fileName, sizeof(fileName), "%shex%d.hxs", SavePath, slot);
remove(fileName);
}
@@ -3228,21 +3228,21 @@ static void CopySaveSlot(int sourceSlot, int destSlot)
for (i = 0; i < MAX_MAPS; i++)
{
- snprintf(sourceName, sizeof(sourceName),
- "%shex%d%02d.hxs", SavePath, sourceSlot, i);
+ M_snprintf(sourceName, sizeof(sourceName),
+ "%shex%d%02d.hxs", SavePath, sourceSlot, i);
if (ExistingFile(sourceName))
{
- snprintf(destName, sizeof(destName),
- "%shex%d%02d.hxs", SavePath, destSlot, i);
+ M_snprintf(destName, sizeof(destName),
+ "%shex%d%02d.hxs", SavePath, destSlot, i);
CopyFile(sourceName, destName);
}
}
- snprintf(sourceName, sizeof(sourceName),
- "%shex%d.hxs", SavePath, sourceSlot);
+ M_snprintf(sourceName, sizeof(sourceName),
+ "%shex%d.hxs", SavePath, sourceSlot);
if (ExistingFile(sourceName))
{
- snprintf(destName, sizeof(destName),
- "%shex%d.hxs", SavePath, destSlot);
+ M_snprintf(destName, sizeof(destName),
+ "%shex%d.hxs", SavePath, destSlot);
CopyFile(sourceName, destName);
}
}
diff --git a/src/i_oplmusic.c b/src/i_oplmusic.c
index 379537dd..142e401a 100644
--- a/src/i_oplmusic.c
+++ b/src/i_oplmusic.c
@@ -1527,11 +1527,11 @@ void I_OPL_DevMessages(char *result, size_t result_len)
if (num_tracks == 0)
{
- snprintf(result, result_len, "No OPL track!");
+ M_snprintf(result, result_len, "No OPL track!");
return;
}
- snprintf(result, result_len, "Tracks:\n");
+ M_snprintf(result, result_len, "Tracks:\n");
lines = 1;
for (i = 0; i < NumActiveChannels(); ++i)
@@ -1543,18 +1543,18 @@ void I_OPL_DevMessages(char *result, size_t result_len)
instr_num = tracks[0].channels[i].instrument - main_instrs;
- snprintf(tmp, sizeof(tmp),
- "chan %i: %c i#%i (%s)\n",
- i,
- ChannelInUse(&tracks[0].channels[i]) ? '\'' : ' ',
- instr_num + 1,
- main_instr_names[instr_num]);
+ M_snprintf(tmp, sizeof(tmp),
+ "chan %i: %c i#%i (%s)\n",
+ i,
+ ChannelInUse(&tracks[0].channels[i]) ? '\'' : ' ',
+ instr_num + 1,
+ main_instr_names[instr_num]);
M_StringConcat(result, tmp, result_len);
++lines;
}
- snprintf(tmp, sizeof(tmp), "\nLast percussion:\n");
+ M_snprintf(tmp, sizeof(tmp), "\nLast percussion:\n");
M_StringConcat(result, tmp, result_len);
lines += 2;
@@ -1566,11 +1566,11 @@ void I_OPL_DevMessages(char *result, size_t result_len)
break;
}
- snprintf(tmp, sizeof(tmp),
- "%cp#%i (%s)\n",
- i == 0 ? '\'' : ' ',
- last_perc[i],
- percussion_names[last_perc[i] - 35]);
+ M_snprintf(tmp, sizeof(tmp),
+ "%cp#%i (%s)\n",
+ i == 0 ? '\'' : ' ',
+ last_perc[i],
+ percussion_names[last_perc[i] - 35]);
M_StringConcat(result, tmp, result_len);
++lines;
diff --git a/src/i_pcsound.c b/src/i_pcsound.c
index 0303d2e4..bcbf16d4 100644
--- a/src/i_pcsound.c
+++ b/src/i_pcsound.c
@@ -253,7 +253,7 @@ static int I_PCS_GetSfxLumpNum(sfxinfo_t* sfx)
if (use_sfx_prefix)
{
- snprintf(namebuf, sizeof(namebuf), "dp%s", DEH_String(sfx->name));
+ M_snprintf(namebuf, sizeof(namebuf), "dp%s", DEH_String(sfx->name));
}
else
{
diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c
index 299a3ff4..2a1d83bc 100644
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -705,8 +705,8 @@ static boolean CacheSFX(sfxinfo_t *sfxinfo)
{
char filename[16];
- snprintf(filename, sizeof(filename), "%s.wav",
- DEH_String(S_sfx[sound].name));
+ M_snprintf(filename, sizeof(filename), "%s.wav",
+ DEH_String(S_sfx[sound].name));
WriteWAV(filename, sound_chunks[sound].abuf,
sound_chunks[sound].alen, mixer_freq);
}
@@ -733,7 +733,7 @@ static void GetSfxLumpName(sfxinfo_t *sfx, char *buf, size_t buf_len)
if (use_sfx_prefix)
{
- snprintf(buf, buf_len, "ds%s", DEH_String(sfx->name));
+ M_snprintf(buf, buf_len, "ds%s", DEH_String(sfx->name));
}
else
{
diff --git a/src/i_system.c b/src/i_system.c
index 5e3ae89e..041217b0 100644
--- a/src/i_system.c
+++ b/src/i_system.c
@@ -318,7 +318,7 @@ void I_Error (char *error, ...)
va_start(argptr, error);
memset(msgbuf, 0, sizeof(msgbuf));
- vsnprintf(msgbuf, sizeof(msgbuf) - 1, error, argptr);
+ M_vsnprintf(msgbuf, sizeof(msgbuf), error, argptr);
va_end(argptr);
MultiByteToWideChar(CP_ACP, 0,
@@ -338,7 +338,7 @@ void I_Error (char *error, ...)
va_start(argptr, error);
memset(msgbuf, 0, sizeof(msgbuf));
- vsnprintf(msgbuf, sizeof(msgbuf) - 1, error, argptr);
+ M_vsnprintf(msgbuf, sizeof(msgbuf), error, argptr);
va_end(argptr);
// The CoreFoundation message box wraps text lines, so replace
diff --git a/src/i_video.c b/src/i_video.c
index 823209b8..7c739c17 100644
--- a/src/i_video.c
+++ b/src/i_video.c
@@ -1820,7 +1820,7 @@ static void SetWindowPositionVars(void)
}
else if (sscanf(window_position, "%i,%i", &x, &y) == 2)
{
- snprintf(buf, sizeof(buf), "SDL_VIDEO_WINDOW_POS=%i,%i", x, y);
+ M_snprintf(buf, sizeof(buf), "SDL_VIDEO_WINDOW_POS=%i,%i", x, y);
putenv(buf);
}
}
@@ -1990,7 +1990,7 @@ void I_InitGraphics(void)
int winid;
sscanf(env, "0x%x", &winid);
- snprintf(winenv, sizeof(winenv), "SDL_WINDOWID=%i", winid);
+ M_snprintf(winenv, sizeof(winenv), "SDL_WINDOWID=%i", winid);
putenv(winenv);
}
diff --git a/src/m_controls.c b/src/m_controls.c
index 792c7406..73e81b1b 100644
--- a/src/m_controls.c
+++ b/src/m_controls.c
@@ -28,6 +28,7 @@
#include "doomkeys.h"
#include "m_config.h"
+#include "m_misc.h"
//
// Keyboard controls
@@ -385,7 +386,7 @@ void M_BindChatControls(unsigned int num_players)
for (i=0; i<num_players; ++i)
{
- snprintf(name, sizeof(name), "key_multi_msgplayer%i", i + 1);
+ M_snprintf(name, sizeof(name), "key_multi_msgplayer%i", i + 1);
M_BindVariable(name, &key_multi_msgplayer[i]);
}
}
diff --git a/src/m_misc.c b/src/m_misc.c
index 15daee3b..c280661f 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -449,6 +449,39 @@ char *M_StringJoin(const char *s, ...)
return result;
}
+// On Windows, vsnprintf() is _vsnprintf().
+#ifdef _WIN32
+#if _MSC_VER < 1400 /* not needed for Visual Studio 2008 */
+#define vsnprintf _vsnprintf
+#endif
+#endif
+
+// Safe, portable vsnprintf().
+int M_vsnprintf(char *buf, size_t buf_len, const char *s, va_list args)
+{
+ if (buf_len < 1)
+ {
+ return 0;
+ }
+
+ // Windows (and other OSes?) has a vsnprintf() that doesn't always
+ // append a trailing \0. So we must do it, and write into a buffer
+ // that is one byte shorter; otherwise this function is unsafe.
+ buf[buf_len - 1] = '\0';
+ return vsnprintf(buf, buf_len - 1, s, args);
+}
+
+// Safe, portable snprintf().
+int M_snprintf(char *buf, size_t buf_len, const char *s, ...)
+{
+ va_list args;
+ int result;
+ va_start(args, s);
+ result = M_vsnprintf(buf, buf_len, s, args);
+ va_end(args);
+ return result;
+}
+
#ifdef _WIN32
char *M_OEMToUTF8(const char *oem)
diff --git a/src/m_misc.h b/src/m_misc.h
index cb3dc8f6..681605bf 100644
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -28,8 +28,8 @@
#ifndef __M_MISC__
#define __M_MISC__
-
#include <stdio.h>
+#include <stdarg.h>
#include "doomtype.h"
@@ -50,6 +50,8 @@ char *M_StringReplace(const char *haystack, const char *needle,
char *M_StringJoin(const char *s, ...);
boolean M_StringStartsWith(const char *s, const char *prefix);
boolean M_StringEndsWith(const char *s, const char *suffix);
+int M_vsnprintf(char *buf, size_t buf_len, const char *s, va_list args);
+int M_snprintf(char *buf, size_t buf_len, const char *s, ...);
char *M_OEMToUTF8(const char *ansi);
#endif
diff --git a/src/net_gui.c b/src/net_gui.c
index 41ef7d3b..80c606b1 100644
--- a/src/net_gui.c
+++ b/src/net_gui.c
@@ -34,6 +34,7 @@
#include "i_system.h"
#include "i_timer.h"
#include "i_video.h"
+#include "m_misc.h"
#include "net_client.h"
#include "net_gui.h"
@@ -101,7 +102,7 @@ static void BuildWindow(void)
for (i = 0; i < net_client_wait_data.max_players; ++i)
{
- snprintf(buf, sizeof(buf), " %i. ", i + 1);
+ M_snprintf(buf, sizeof(buf), " %i. ", i + 1);
TXT_AddWidget(table, TXT_NewLabel(buf));
player_labels[i] = TXT_NewLabel("");
ip_labels[i] = TXT_NewLabel("");
@@ -164,8 +165,8 @@ static void UpdateGUI(void)
if (net_client_wait_data.num_drones > 0)
{
- snprintf(buf, sizeof(buf), " (+%i observer clients)",
- net_client_wait_data.num_drones);
+ M_snprintf(buf, sizeof(buf), " (+%i observer clients)",
+ net_client_wait_data.num_drones);
TXT_SetLabel(drone_label, buf);
}
else
diff --git a/src/net_loop.c b/src/net_loop.c
index acdc2cb6..cff0f37a 100644
--- a/src/net_loop.c
+++ b/src/net_loop.c
@@ -28,6 +28,7 @@
#include "doomtype.h"
#include "i_system.h"
+#include "m_misc.h"
#include "net_defs.h"
#include "net_loop.h"
#include "net_packet.h"
@@ -128,7 +129,7 @@ static boolean NET_CL_RecvPacket(net_addr_t **addr, net_packet_t **packet)
static void NET_CL_AddrToString(net_addr_t *addr, char *buffer, int buffer_len)
{
- snprintf(buffer, buffer_len, "local server");
+ M_snprintf(buffer, buffer_len, "local server");
}
static void NET_CL_FreeAddress(net_addr_t *addr)
@@ -204,7 +205,7 @@ static boolean NET_SV_RecvPacket(net_addr_t **addr, net_packet_t **packet)
static void NET_SV_AddrToString(net_addr_t *addr, char *buffer, int buffer_len)
{
- snprintf(buffer, buffer_len, "local client");
+ M_snprintf(buffer, buffer_len, "local client");
}
static void NET_SV_FreeAddress(net_addr_t *addr)
diff --git a/src/net_sdl.c b/src/net_sdl.c
index de86172f..e27e4da5 100644
--- a/src/net_sdl.c
+++ b/src/net_sdl.c
@@ -30,6 +30,7 @@
#include "doomtype.h"
#include "i_system.h"
#include "m_argv.h"
+#include "m_misc.h"
#include "net_defs.h"
#include "net_io.h"
#include "net_packet.h"
@@ -312,12 +313,12 @@ void NET_SDL_AddrToString(net_addr_t *addr, char *buffer, int buffer_len)
ip = (IPaddress *) addr->handle;
- snprintf(buffer, buffer_len,
- "%i.%i.%i.%i",
- ip->host & 0xff,
- (ip->host >> 8) & 0xff,
- (ip->host >> 16) & 0xff,
- (ip->host >> 24) & 0xff);
+ M_snprintf(buffer, buffer_len,
+ "%i.%i.%i.%i",
+ ip->host & 0xff,
+ (ip->host >> 8) & 0xff,
+ (ip->host >> 16) & 0xff,
+ (ip->host >> 24) & 0xff);
}
net_addr_t *NET_SDL_ResolveAddress(char *address)
diff --git a/src/net_server.c b/src/net_server.c
index c22d57e9..ef0ab7b5 100644
--- a/src/net_server.c
+++ b/src/net_server.c
@@ -200,7 +200,7 @@ static void NET_SV_SendConsoleMessage(net_client_t *client, char *s, ...)
net_packet_t *packet;
va_start(args, s);
- vsnprintf(buf, sizeof(buf), s, args);
+ M_vsnprintf(buf, sizeof(buf), s, args);
va_end(args);
packet = NET_Conn_NewReliable(&client->connection,
@@ -218,7 +218,7 @@ static void NET_SV_BroadcastMessage(char *s, ...)
int i;
va_start(args, s);
- vsnprintf(buf, sizeof(buf), s, args);
+ M_vsnprintf(buf, sizeof(buf), s, args);
va_end(args);
for (i=0; i<MAXNETNODES; ++i)
diff --git a/src/setup/txt_mouseinput.c b/src/setup/txt_mouseinput.c
index a69d35b4..aec7d5d9 100644
--- a/src/setup/txt_mouseinput.c
+++ b/src/setup/txt_mouseinput.c
@@ -90,7 +90,7 @@ static void GetMouseButtonDescription(int button, char *buf, size_t buf_len)
M_StringCopy(buf, "MID", buf_len);
break;
default:
- snprintf(buf, buf_len, "BUTTON #%i", button + 1);
+ M_snprintf(buf, buf_len, "BUTTON #%i", button + 1);
break;
}
}
diff --git a/src/strife/am_map.c b/src/strife/am_map.c
index 05f8a519..b1336d20 100644
--- a/src/strife/am_map.c
+++ b/src/strife/am_map.c
@@ -32,6 +32,7 @@
#include "z_zone.h"
#include "doomkeys.h"
#include "doomdef.h"
+#include "m_misc.h"
#include "st_stuff.h"
#include "p_local.h"
#include "w_wad.h"
@@ -670,8 +671,8 @@ AM_Responder
}
else if (key == key_map_mark)
{
- snprintf(buffer, sizeof(buffer),
- "%s %d", DEH_String(AMSTR_MARKEDSPOT), markpointnum);
+ M_snprintf(buffer, sizeof(buffer),
+ "%s %d", DEH_String(AMSTR_MARKEDSPOT), markpointnum);
plr->message = buffer;
AM_addMark();
}
diff --git a/src/strife/d_main.c b/src/strife/d_main.c
index e419fd99..db5e40f2 100644
--- a/src/strife/d_main.c
+++ b/src/strife/d_main.c
@@ -461,7 +461,7 @@ void D_BindVariables(void)
{
char buf[12];
- snprintf(buf, sizeof(buf), "chatmacro%i", i);
+ M_snprintf(buf, sizeof(buf), "chatmacro%i", i);
M_BindVariable(buf, &chat_macros[i]);
}
}
@@ -792,8 +792,8 @@ static char *GetGameName(char *gamename)
gamename_size = strlen(deh_sub) + 10;
gamename = Z_Malloc(gamename_size, PU_STATIC, 0);
- snprintf(gamename, gamename_size, deh_sub,
- STRIFE_VERSION / 100, STRIFE_VERSION % 100);
+ M_snprintf(gamename, gamename_size, deh_sub,
+ STRIFE_VERSION / 100, STRIFE_VERSION % 100);
while (gamename[0] != '\0' && isspace(gamename[0]))
{
diff --git a/src/strife/g_game.c b/src/strife/g_game.c
index 23e0cef9..c67d7be1 100644
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -985,8 +985,8 @@ void G_Ticker (void)
{
static char turbomessage[80];
extern char player_names[8][16];
- snprintf(turbomessage, sizeof(turbomessage),
- "%s is turbo!", player_names[i]);
+ M_snprintf(turbomessage, sizeof(turbomessage),
+ "%s is turbo!", player_names[i]);
players[consoleplayer].message = turbomessage;
turbodetected[i] = false;
}
@@ -1290,7 +1290,7 @@ void G_LoadPath(int map)
char mapbuf[33];
memset(mapbuf, 0, sizeof(mapbuf));
- snprintf(mapbuf, sizeof(mapbuf), "%d", map);
+ M_snprintf(mapbuf, sizeof(mapbuf), "%d", map);
// haleyjd: free if already set, and use M_SafeFilePath
if(loadpath)
@@ -1805,7 +1805,7 @@ void G_DoSaveGame (char *path)
// [STRIFE] custom save file path logic
memset(gamemapstr, 0, sizeof(gamemapstr));
- snprintf(gamemapstr, sizeof(gamemapstr), "%d", gamemap);
+ M_snprintf(gamemapstr, sizeof(gamemapstr), "%d", gamemap);
savegame_file = M_SafeFilePath(path, gamemapstr);
// [STRIFE] write the "current" file, which tells which hub map
@@ -1870,7 +1870,7 @@ void G_DoSaveGame (char *path)
// [STRIFE]: custom message logic
if(!strcmp(path, savepath))
{
- snprintf(savename, sizeof(savename), "%s saved.", character_name);
+ M_snprintf(savename, sizeof(savename), "%s saved.", character_name);
players[consoleplayer].message = savename;
}
@@ -2195,7 +2195,7 @@ void G_RecordDemo (char* name)
usergame = false;
demoname_size = strlen(name) + 5;
demoname = Z_Malloc(demoname_size, PU_STATIC, NULL);
- snprintf(demoname, demoname_size, "%s.lmp", name);
+ M_snprintf(demoname, demoname_size, "%s.lmp", name);
maxsize = 0x20000;
//!
@@ -2290,8 +2290,8 @@ static char *DemoVersionDescription(int version)
}
// Unknown version. Who knows?
- snprintf(resultbuf, sizeof(resultbuf),
- "%i.%i (unknown)", version / 100, version % 100);
+ M_snprintf(resultbuf, sizeof(resultbuf),
+ "%i.%i (unknown)", version / 100, version % 100);
return resultbuf;
}
diff --git a/src/strife/m_saves.c b/src/strife/m_saves.c
index 4303dbe2..e4d5919f 100644
--- a/src/strife/m_saves.c
+++ b/src/strife/m_saves.c
@@ -222,7 +222,7 @@ void M_SaveMoveMapToHere(void)
char tmpnum[33];
// haleyjd: no itoa available...
- snprintf(tmpnum, sizeof(tmpnum), "%d", gamemap);
+ M_snprintf(tmpnum, sizeof(tmpnum), "%d", gamemap);
// haleyjd: use M_SafeFilePath, not sprintf
mapsave = M_SafeFilePath(savepath, tmpnum);
@@ -251,7 +251,7 @@ void M_SaveMoveHereToMap(void)
char tmpnum[33];
// haleyjd: no itoa available...
- snprintf(tmpnum, sizeof(tmpnum), "%d", gamemap);
+ M_snprintf(tmpnum, sizeof(tmpnum), "%d", gamemap);
mapsave = M_SafeFilePath(savepathtemp, tmpnum);
heresave = M_SafeFilePath(savepathtemp, "here");
@@ -437,7 +437,7 @@ char *M_SafeFilePath(const char *basepath, const char *newcomponent)
// that either basepath or newcomponent includes a redundant slash at the
// end or beginning respectively.
newstrlen = M_StringAlloc(&newstr, 3, 1, basepath, "/", newcomponent);
- snprintf(newstr, newstrlen, "%s/%s", basepath, newcomponent);
+ M_snprintf(newstr, newstrlen, "%s/%s", basepath, newcomponent);
M_NormalizeSlashes(newstr);
return newstr;
@@ -477,8 +477,8 @@ char *M_MakeStrifeSaveDir(int slotnum, const char *extra)
{
static char tmpbuffer[32];
- snprintf(tmpbuffer, sizeof(tmpbuffer),
- "strfsav%d.ssg%s", slotnum, extra);
+ M_snprintf(tmpbuffer, sizeof(tmpbuffer),
+ "strfsav%d.ssg%s", slotnum, extra);
return tmpbuffer;
}
diff --git a/src/strife/p_inter.c b/src/strife/p_inter.c
index 00b0ef24..96594211 100644
--- a/src/strife/p_inter.c
+++ b/src/strife/p_inter.c
@@ -971,8 +971,8 @@ void P_KillMobj(mobj_t* source, mobj_t* target)
EV_DoDoor(&junk, close);
P_NoiseAlert(players[0].mo, players[0].mo);
- snprintf(plrkilledmsg, sizeof(plrkilledmsg),
- "%s", DEH_String("You're dead! You set off the alarm."));
+ M_snprintf(plrkilledmsg, sizeof(plrkilledmsg),
+ "%s", DEH_String("You're dead! You set off the alarm."));
if(!deathmatch)
players[consoleplayer].message = plrkilledmsg;
@@ -1011,8 +1011,8 @@ void P_KillMobj(mobj_t* source, mobj_t* target)
case MT_TOKEN_ALARM:
P_NoiseAlert(players[0].mo, players[0].mo);
- snprintf(plrkilledmsg, sizeof(plrkilledmsg),
- "%s", DEH_String("You Fool! You've set off the alarm"));
+ M_snprintf(plrkilledmsg, sizeof(plrkilledmsg),
+ "%s", DEH_String("You Fool! You've set off the alarm"));
if(!deathmatch)
players[consoleplayer].message = plrkilledmsg;
return;
diff --git a/src/strife/p_saveg.c b/src/strife/p_saveg.c
index 47fb7e8c..2f59c732 100644
--- a/src/strife/p_saveg.c
+++ b/src/strife/p_saveg.c
@@ -32,6 +32,7 @@
#include "deh_main.h"
#include "i_system.h"
#include "z_zone.h"
+#include "m_misc.h"
#include "p_local.h"
#include "p_saveg.h"
@@ -80,7 +81,7 @@ char *P_SaveGameFile(int slot)
DEH_snprintf(basename, 32, SAVEGAMENAME "%d.dsg", slot);
- snprintf(filename, filename_size, "%s%s", savegamedir, basename);
+ M_snprintf(filename, filename_size, "%s%s", savegamedir, basename);
return filename;
}
@@ -1609,7 +1610,7 @@ void P_WriteSaveGameHeader(char *description)
*/
memset (name,0,sizeof(name));
- snprintf(name, sizeof(name), "ver %i", STRIFE_VERSION);
+ M_snprintf(name, sizeof(name), "ver %i", STRIFE_VERSION);
for (i=0; i<VERSIONSIZE; ++i)
saveg_write8(name[i]);
@@ -1649,7 +1650,7 @@ boolean P_ReadSaveGameHeader(void)
read_vcheck[i] = saveg_read8();
memset (vcheck,0,sizeof(vcheck));
- snprintf(vcheck, sizeof(vcheck), "ver %i", STRIFE_VERSION);
+ M_snprintf(vcheck, sizeof(vcheck), "ver %i", STRIFE_VERSION);
if (strcmp(read_vcheck, vcheck) != 0)
return false; // bad version
diff --git a/src/strife/p_user.c b/src/strife/p_user.c
index d2f8b8e3..e24e40fe 100644
--- a/src/strife/p_user.c
+++ b/src/strife/p_user.c
@@ -39,6 +39,7 @@
#include "z_zone.h"
#include "w_wad.h"
#include "p_pspr.h"
+#include "m_misc.h"
#include "m_random.h"
#include "s_sound.h"
#include "p_inter.h"
@@ -861,8 +862,8 @@ boolean P_UseInventoryItem(player_t* player, int item)
if(name == NULL)
name = "Item";
- snprintf(useinventorymsg, sizeof(useinventorymsg),
- "You used the %s.", name);
+ M_snprintf(useinventorymsg, sizeof(useinventorymsg),
+ "You used the %s.", name);
player->message = useinventorymsg;
if(player == &players[consoleplayer])
diff --git a/src/strife/s_sound.c b/src/strife/s_sound.c
index 861586fe..fb1fc44f 100644
--- a/src/strife/s_sound.c
+++ b/src/strife/s_sound.c
@@ -788,7 +788,7 @@ void S_ChangeMusic(int musicnum, int looping)
// get lumpnum if neccessary
if (!music->lumpnum)
{
- snprintf(namebuf, sizeof(namebuf), "d_%s", DEH_String(music->name));
+ M_snprintf(namebuf, sizeof(namebuf), "d_%s", DEH_String(music->name));
music->lumpnum = W_GetNumForName(namebuf);
}
diff --git a/src/strife/st_stuff.c b/src/strife/st_stuff.c
index 34682093..dc6db608 100644
--- a/src/strife/st_stuff.c
+++ b/src/strife/st_stuff.c
@@ -54,6 +54,7 @@
#include "am_map.h"
#include "m_cheat.h"
#include "m_menu.h" // villsa [STRIFE]
+#include "m_misc.h"
#include "s_sound.h"
@@ -663,11 +664,11 @@ boolean ST_Responder(event_t* ev)
{
// [STRIFE] 'GPS' for player position
static char buf[ST_MSGWIDTH];
- snprintf(buf, sizeof(buf),
- "ang=0x%x;x,y=(0x%x,0x%x)",
- players[consoleplayer].mo->angle,
- players[consoleplayer].mo->x,
- players[consoleplayer].mo->y);
+ M_snprintf(buf, sizeof(buf),
+ "ang=0x%x;x,y=(0x%x,0x%x)",
+ players[consoleplayer].mo->angle,
+ players[consoleplayer].mo->x,
+ players[consoleplayer].mo->y);
plyr->message = buf;
}
diff --git a/src/v_video.c b/src/v_video.c
index d8934456..ac275ec6 100644
--- a/src/v_video.c
+++ b/src/v_video.c
@@ -818,7 +818,7 @@ void V_ScreenShot(char *format)
for (i=0; i<=99; i++)
{
- snprintf(lbmname, sizeof(lbmname), format, i, ext);
+ M_snprintf(lbmname, sizeof(lbmname), format, i, ext);
if (!M_FileExists(lbmname))
{