shithub: choc

Download patch

ref: 28b514bb0e54250e69585b544a6c78a556f6ba0f
parent: eef7a4e066b3bc19c0f6f6f39b67ac0bac5f2d9e
parent: 14e9e565715db5e1d1fc92aa4f3d31b488b00112
author: Mike Swanson <mikeonthecomputer@gmail.com>
date: Tue Feb 20 10:10:41 EST 2018

Merge branch 'printf' of gh:turol/chocolate-doom

--- a/src/deh_io.h
+++ b/src/deh_io.h
@@ -25,8 +25,8 @@
 void DEH_CloseFile(deh_context_t *context);
 int DEH_GetChar(deh_context_t *context);
 char *DEH_ReadLine(deh_context_t *context, boolean extended);
-void DEH_Error(deh_context_t *context, char *msg, ...);
-void DEH_Warning(deh_context_t *context, char *msg, ...);
+void DEH_Error(deh_context_t *context, char *msg, ...) PRINTF_ATTR(2, 3);
+void DEH_Warning(deh_context_t *context, char *msg, ...) PRINTF_ATTR(2, 3);
 boolean DEH_HadError(deh_context_t *context);
 
 #endif /* #ifndef DEH_IO_H */
--- a/src/deh_str.h
+++ b/src/deh_str.h
@@ -20,12 +20,14 @@
 
 #include <stdio.h>
 
+#include "doomtype.h"
+
 // Used to do dehacked text substitutions throughout the program
 
-char *DEH_String(char *s);
-void DEH_printf(char *fmt, ...);
-void DEH_fprintf(FILE *fstream, char *fmt, ...);
-void DEH_snprintf(char *buffer, size_t len, char *fmt, ...);
+char *DEH_String(char *s) PRINTF_ARG_ATTR(1);
+void DEH_printf(char *fmt, ...) PRINTF_ATTR(1, 2);
+void DEH_fprintf(FILE *fstream, char *fmt, ...) PRINTF_ATTR(2, 3);
+void DEH_snprintf(char *buffer, size_t len, char *fmt, ...) PRINTF_ATTR(3, 4);
 void DEH_AddStringReplacement(char *from_text, char *to_text);
 
 
--- a/src/doom/r_plane.c
+++ b/src/doom/r_plane.c
@@ -368,15 +368,15 @@
 				
 #ifdef RANGECHECK
     if (ds_p - drawsegs > MAXDRAWSEGS)
-	I_Error ("R_DrawPlanes: drawsegs overflow (%i)",
+	I_Error ("R_DrawPlanes: drawsegs overflow (%" PRIiPTR ")",
 		 ds_p - drawsegs);
     
     if (lastvisplane - visplanes > MAXVISPLANES)
-	I_Error ("R_DrawPlanes: visplane overflow (%i)",
+	I_Error ("R_DrawPlanes: visplane overflow (%" PRIiPTR ")",
 		 lastvisplane - visplanes);
     
     if (lastopening - openings > MAXOPENINGS)
-	I_Error ("R_DrawPlanes: opening overflow (%i)",
+	I_Error ("R_DrawPlanes: opening overflow (%" PRIiPTR ")",
 		 lastopening - openings);
 #endif
 
--- a/src/doomtype.h
+++ b/src/doomtype.h
@@ -65,8 +65,13 @@
 #define PACKEDATTR __attribute__((packed))
 #endif
 
+#define PRINTF_ATTR(fmt, first) __attribute__((format(printf, fmt, first)))
+#define PRINTF_ARG_ATTR(x) __attribute__((format_arg(x)))
+
 #else
 #define PACKEDATTR
+#define PRINTF_ATTR(fmt, first)
+#define PRINTF_ARG_ATTR(x)
 #endif
 
 #ifdef __WATCOMC__
--- a/src/heretic/r_plane.c
+++ b/src/heretic/r_plane.c
@@ -386,12 +386,13 @@
 
 #ifdef RANGECHECK
     if (ds_p - drawsegs > MAXDRAWSEGS)
-        I_Error("R_DrawPlanes: drawsegs overflow (%i)", ds_p - drawsegs);
+        I_Error("R_DrawPlanes: drawsegs overflow (%" PRIiPTR ")",
+                ds_p - drawsegs);
     if (lastvisplane - visplanes > MAXVISPLANES)
-        I_Error("R_DrawPlanes: visplane overflow (%i)",
+        I_Error("R_DrawPlanes: visplane overflow (%" PRIiPTR ")",
                 lastvisplane - visplanes);
     if (lastopening - openings > MAXOPENINGS)
-        I_Error("R_DrawPlanes: opening overflow (%i)",
+        I_Error("R_DrawPlanes: opening overflow (%" PRIiPTR ")",
                 lastopening - openings);
 #endif
 
--- a/src/hexen/r_plane.c
+++ b/src/hexen/r_plane.c
@@ -390,16 +390,17 @@
 #ifdef RANGECHECK
     if (ds_p - drawsegs > MAXDRAWSEGS)
     {
-        I_Error("R_DrawPlanes: drawsegs overflow (%i)", ds_p - drawsegs);
+        I_Error("R_DrawPlanes: drawsegs overflow (%" PRIiPTR ")",
+                ds_p - drawsegs);
     }
     if (lastvisplane - visplanes > MAXVISPLANES)
     {
-        I_Error("R_DrawPlanes: visplane overflow (%i)",
+        I_Error("R_DrawPlanes: visplane overflow (%" PRIiPTR ")",
                 lastvisplane - visplanes);
     }
     if (lastopening - openings > MAXOPENINGS)
     {
-        I_Error("R_DrawPlanes: opening overflow (%i)",
+        I_Error("R_DrawPlanes: opening overflow (%" PRIiPTR ")",
                 lastopening - openings);
     }
 #endif
--- a/src/hexen/st_start.h
+++ b/src/hexen/st_start.h
@@ -17,6 +17,8 @@
 #ifndef STSTART_H
 #define STSTART_H
 
+#include "doomtype.h"
+
 // HEADER FILES ------------------------------------------------------------
 
 // MACROS ------------------------------------------------------------------
@@ -26,8 +28,8 @@
 // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
 extern void ST_Init(void);
 extern void ST_Done(void);
-extern void ST_Message(char *message, ...);
-extern void ST_RealMessage(char *message, ...);
+extern void ST_Message(char *message, ...) PRINTF_ATTR(1, 2);
+extern void ST_RealMessage(char *message, ...) PRINTF_ATTR(1, 2);
 extern void ST_Progress(void);
 extern void ST_NetProgress(void);
 extern void ST_NetDone(void);
--- a/src/i_system.c
+++ b/src/i_system.c
@@ -335,7 +335,7 @@
 
     if (size != 0 && new_ptr == NULL)
     {
-        I_Error ("I_Realloc: failed on reallocation of %i bytes", size);
+        I_Error ("I_Realloc: failed on reallocation of %" PRIuPTR " bytes", size);
     }
 
     return new_ptr;
--- a/src/i_system.h
+++ b/src/i_system.h
@@ -52,7 +52,7 @@
 // Clean exit, displays sell blurb.
 void I_Quit (void);
 
-void I_Error (char *error, ...);
+void I_Error (char *error, ...) PRINTF_ATTR(1, 2);
 
 void I_Tactile (int on, int off, int total);
 
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -384,7 +384,7 @@
 
     if (result == NULL)
     {
-        I_Error("Failed to duplicate string (length %i)\n",
+        I_Error("Failed to duplicate string (length %" PRIuPTR ")\n",
                 strlen(orig));
     }
 
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -46,7 +46,7 @@
 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, ...);
+int M_snprintf(char *buf, size_t buf_len, const char *s, ...) PRINTF_ATTR(3, 4);
 char *M_OEMToUTF8(const char *ansi);
 
 #endif
--- a/src/net_query.c
+++ b/src/net_query.c
@@ -642,6 +642,7 @@
 
 // -----------------------------------------------------------------------
 
+static void formatted_printf(int wide, char *s, ...) PRINTF_ATTR(2, 3);
 static void formatted_printf(int wide, char *s, ...)
 {
     va_list args;
--- a/src/setup/execute.h
+++ b/src/setup/execute.h
@@ -15,6 +15,7 @@
 #ifndef TESTCONFIG_H
 #define TESTCONFIG_H
 
+#include "doomtype.h"
 #include "textscreen.h"
 
 typedef struct execute_context_s execute_context_t;
@@ -27,7 +28,7 @@
 #define IWAD_CHEX     (1 << 5)       /* chex.wad */
 
 execute_context_t *NewExecuteContext(void);
-void AddCmdLineParameter(execute_context_t *context, char *s, ...);
+void AddCmdLineParameter(execute_context_t *context, char *s, ...) PRINTF_ATTR(2, 3);
 void PassThroughArguments(execute_context_t *context);
 int ExecuteDoom(execute_context_t *context);
 int FindInstalledIWADs(void);
--- a/src/setup/multiplayer.c
+++ b/src/setup/multiplayer.c
@@ -189,7 +189,7 @@
     {
         if (extra_params[i] != NULL && strlen(extra_params[i]) > 0)
         {
-            AddCmdLineParameter(exec, extra_params[i]);
+            AddCmdLineParameter(exec, "%s", extra_params[i]);
         }
     }
 }
@@ -421,7 +421,8 @@
                     continue;
                 }
 
-                M_snprintf(buf, sizeof(buf), " E%iM%i ", x, y);
+                M_snprintf(buf, sizeof(buf),
+                           " E%" PRIiPTR "M%" PRIiPTR " ", x, y);
                 button = TXT_NewButton(buf);
                 TXT_SignalConnect(button, "pressed",
                                   SetExMyWarp, (void *) (x * 10 + y));
@@ -453,7 +454,7 @@
                 continue;
             }
 
-            M_snprintf(buf, sizeof(buf), " MAP%02i ", l);
+            M_snprintf(buf, sizeof(buf), " MAP%02" PRIiPTR " ", l);
             button = TXT_NewButton(buf);
             TXT_SignalConnect(button, "pressed", 
                               SetMAPxyWarp, (void *) l);
--- a/src/strife/r_plane.c
+++ b/src/strife/r_plane.c
@@ -369,15 +369,15 @@
 				
 #ifdef RANGECHECK
     if (ds_p - drawsegs > MAXDRAWSEGS)
-	I_Error ("R_DrawPlanes: drawsegs overflow (%i)",
+	I_Error ("R_DrawPlanes: drawsegs overflow (%" PRIiPTR ")",
 		 ds_p - drawsegs);
     
     if (lastvisplane - visplanes > MAXVISPLANES)
-	I_Error ("R_DrawPlanes: visplane overflow (%i)",
+	I_Error ("R_DrawPlanes: visplane overflow (%" PRIiPTR ")",
 		 lastvisplane - visplanes);
     
     if (lastopening - openings > MAXOPENINGS)
-	I_Error ("R_DrawPlanes: opening overflow (%i)",
+	I_Error ("R_DrawPlanes: opening overflow (%" PRIiPTR ")",
 		 lastopening - openings);
 #endif
 
--- a/textscreen/txt_main.h
+++ b/textscreen/txt_main.h
@@ -122,6 +122,17 @@
     TXT_INPUT_TEXT,
 } txt_input_mode_t;
 
+
+#ifdef __GNUC__
+
+#define PRINTF_ATTR(fmt, first) __attribute__((format(printf, fmt, first)))
+
+#else  // __GNUC__
+
+#define PRINTF_ATTR(fmt, first)
+
+#endif  // __GNUC__
+
 // Initialize the screen
 // Returns 1 if successful, 0 if failed.
 int TXT_Init(void);
@@ -181,7 +192,7 @@
 int TXT_vsnprintf(char *buf, size_t buf_len, const char *s, va_list args);
 
 // Safe version of snprintf().
-int TXT_snprintf(char *buf, size_t buf_len, const char *s, ...);
+int TXT_snprintf(char *buf, size_t buf_len, const char *s, ...) PRINTF_ATTR(3, 4);
 
 #endif /* #ifndef TXT_MAIN_H */