]> granicus.if.org Git - nethack/commitdiff
enable -Wformat-nonliteral for linux and equivalent for windows compilers
authornhmall <nhmall@nethack.org>
Wed, 3 Feb 2021 00:03:12 +0000 (19:03 -0500)
committernhmall <nhmall@nethack.org>
Wed, 3 Feb 2021 00:03:12 +0000 (19:03 -0500)
Whitelist all the verified existing triggers:
makedefs.c: In function ‘name_file’
attrib.c: one compiler balks at a ? b : c for fmtstring
cmd.c: In function ‘extcmd_via_menu’
cmd.c: In function ‘wiz_levltyp_legend’
do.c: In function ‘goto_level’
do_name.c: In function ‘coord_desc’
dungeon.c: In function ‘overview_stats’
eat.c:  one compiler balks at a ? b : c for fmtstring
end.c:  one compiler balks at a ? b : c for fmtstring
engrave.c: In function ‘engr_stats’
hack:c one compiler balks at a ? b : c for fmtstring
hacklib.c: one compiler balks at a ? b : c for fmtstring
insight.c: one compiler balks at a ? b : c for fmtstring
invent.c: In function ‘let_to_name’
light.c: In function ‘light_stats’
mhitm.c: In function ‘missmm’
options.c: In function ‘handler_symset’
options.c: In function ‘basic_menu_colors’
options.c: In function ‘optfn_o_autopickup_exceptions’
options.c: In function ‘optfn_o_menu_colors’
options.c: In function ‘optfn_o_message_types’
options.c: In function ‘optfn_o_status_cond’
options.c: In function ‘optfn_o_status_hilites’
options.c: In function ‘doset’
options.c: In function ‘doset_add_menu’
options.c: In function ‘show_menu_controls’
options.c: In function ‘handle_add_list_remove’
pager.c: In function ‘do_supplemental_info’
pager.c: In function ‘dohelp’
region.c: In function ‘region_stats’
rumors.c: sscanf usage
sounds.c: In function ‘domonnoise’
spell.c: In function ‘dospellmenu’
timeout.c: In function ‘timer_stats’
topten.c: In function ‘outentry’, fscanf, sscanf, fprintf usage
windows.c: In function ‘genl_status_update’
zap.c: one compiler balks at a ? b : c for fmtstring
win/curses/cursstat.c: In function ‘curses_status_update’
win/tty/wintty.c: In function ‘tty_status_update’
win/win32/mswproc.c: In function ‘mswin_status_update’

32 files changed:
include/warnings.h
src/attrib.c
src/cmd.c
src/do.c
src/do_name.c
src/dungeon.c
src/eat.c
src/end.c
src/engrave.c
src/hacklib.c
src/insight.c
src/invent.c
src/light.c
src/mhitm.c
src/options.c
src/pager.c
src/region.c
src/rumors.c
src/sounds.c
src/spell.c
src/timeout.c
src/topten.c
src/windows.c
src/zap.c
sys/unix/hints/include/compiler.2020
sys/winnt/Makefile.msc
util/makedefs.c
win/curses/cursstat.c
win/tty/wintty.c
win/win32/mswproc.c
win/win32/vs/NetHack.vcxproj
win/win32/vs/NetHackW.vcxproj

index 01d10923fb6c70e4f69b9a8c7c804c4a91a07fcb..8559f0d4321dbfb0f18943b69b97f919bfa041f7 100644 (file)
  * When STDC_Pragma_AVAILABLE is not defined, these are defined as no-ops:
  *     DISABLE_WARNING_UNREACHABLE_CODE
  *     DISABLE_WARNING_CONDEXPR_IS_CONSTANT
+ *     DISABLE_WARNING_FORMAT_NONLITERAL
  *       ...
  *     RESTORE_WARNINGS
+ *     RESTORE_WARNING_CONDEXPR_IS_CONSTANT
+ *     RESTORE_WARNING_FORMAT_NONLITERAL
  *
  */
 
 #define DISABLE_WARNING_UNREACHABLE_CODE \
                            _Pragma("clang diagnostic push") \
                            _Pragma("clang diagnostic ignored \"-Wunreachable-code\"")
+#define DISABLE_WARNING_FORMAT_NONLITERAL \
+                           _Pragma("clang diagnostic push") \
+                           _Pragma("clang diagnostic ignored \"-Wformat-nonliteral\"")
 #define DISABLE_WARNING_CONDEXPR_IS_CONSTANT
 #define RESTORE_WARNING_CONDEXPR_IS_CONSTANT
+#define RESTORE_WARNING_FORMAT_NONLITERAL _Pragma("clang diagnostic pop")
 #define RESTORE_WARNINGS _Pragma("clang diagnostic pop")
 #define STDC_Pragma_AVAILABLE
 
 #define DISABLE_WARNING_UNREACHABLE_CODE \
                            _Pragma("GCC diagnostic push") \
                            _Pragma("GCC diagnostic ignored \"-Wunreachable-code\"")
+#define DISABLE_WARNING_FORMAT_NONLITERAL \
+                           _Pragma("GCC diagnostic push") \
+                           _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"")
 #define DISABLE_WARNING_CONDEXPR_IS_CONSTANT
 #define RESTORE_WARNING_CONDEXPR_IS_CONSTANT
+#define RESTORE_WARNING_FORMAT_NONLITERAL _Pragma("GCC diagnostic pop")
 #define RESTORE_WARNINGS _Pragma("GCC diagnostic pop")
 #define STDC_Pragma_AVAILABLE
 
 #define DISABLE_WARNING_UNREACHABLE_CODE \
                            _Pragma("warning( push )") \
                            _Pragma("warning( disable : 4702 )")
+#define DISABLE_WARNING_FORMAT_NONLITERAL \
+                           _Pragma("warning( push )") \
+                           _Pragma("warning( disable : 4774 )")
 #define DISABLE_WARNING_CONDEXPR_IS_CONSTANT \
                            _Pragma("warning( push )") \
                            _Pragma("warning( disable : 4127 )")
 #define RESTORE_WARNING_CONDEXPR_IS_CONSTANT _Pragma("warning( pop )")
+#define RESTORE_WARNING_FORMAT_NONLITERAL _Pragma("warning( pop )")
 #define RESTORE_WARNINGS _Pragma("warning( pop )")
 #define STDC_Pragma_AVAILABLE
 
 
 #if !defined(STDC_Pragma_AVAILABLE)
 #define DISABLE_WARNING_UNREACHABLE_CODE
+#define DISABLE_WARNING_FORMAT_NONLITERAL
 #define DISABLE_WARNING_CONDEXPR_IS_CONSTANT
 #define RESTORE_WARNING_CONDEXPR_IS_CONSTANT
+#define RESTORE_WARNING_FORMAT_NONLITERAL
 #define RESTORE_WARNINGS
 #endif
 
index 6bc92b3c1a150befe5880acec188603dcc6b0519..911d0ecc571fea7d78e145ed4974586c39bad91c 100644 (file)
@@ -799,6 +799,8 @@ is_innate(int propidx)
     return FROM_NONE;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 char *
 from_what(int propidx) /* special cases can have negative values */
 {
@@ -891,6 +893,8 @@ from_what(int propidx) /* special cases can have negative values */
     return buf;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 adjabil(int oldlevel, int newlevel)
 {
index 75330355cfb94d181fe4ff30eac0da26d64aad9a..5abad96bb3ab57969254fac408e53f787a8d27a7 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -551,6 +551,8 @@ doextlist(void)
 #if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS)
 #define MAX_EXT_CMD 200 /* Change if we ever have more ext cmds */
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /*
  * This is currently used only by the tty interface and is
  * controlled via runtime option 'extmenu'.  (Most other interfaces
@@ -692,6 +694,9 @@ extcmd_via_menu(void)
     }
     return ret;
 }
+
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 #endif /* TTY_GRAPHICS */
 
 /* #monster command - use special monster ability while polymorphed */
@@ -1457,6 +1462,8 @@ levltyp_to_name(int typ)
     return NULL;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* explanation of base-36 output from wiz_map_levltyp() */
 static void
 wiz_levltyp_legend(void)
@@ -1497,6 +1504,8 @@ wiz_levltyp_legend(void)
     return;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 DISABLE_WARNING_CONDEXPR_IS_CONSTANT
 
 /* #wizsmell command - test usmellmon(). */
@@ -1541,6 +1550,8 @@ wiz_smell(void)
 
 RESTORE_WARNING_CONDEXPR_IS_CONSTANT
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 #define DEFAULT_TIMEOUT_INCR 30
 
 /* #wizinstrinsic command to set some intrinsics for testing */
@@ -1695,6 +1706,8 @@ wiz_intrinsic(void)
     return 0;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* #wizrumorcheck command - verify each rumor access */
 static int
 wiz_rumor_check(void)
@@ -2589,6 +2602,8 @@ count_obj(struct obj *chain, long *total_count, long *total_size,
     *total_size += size;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL  /* RESTORE_WARNING follows show_wiz_stats */
+
 static void
 obj_chain(winid win, const char *src, struct obj *chain, boolean force,
           long *total_count, long *total_size)
@@ -2905,6 +2920,8 @@ wiz_show_stats(void)
     return 0;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 sanity_check(void)
 {
index b3e5530fb358b39b12b00cf7bcf9430a5bb904f9..fadc37ff83cef1bf5b6f5aac6b9edc4971074485 100644 (file)
--- a/src/do.c
+++ b/src/do.c
@@ -1232,6 +1232,8 @@ u_collide_m(struct monst *mtmp)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 void
 goto_level(d_level *newlevel, boolean at_stairs, boolean falling, boolean portal)
 {
@@ -1730,6 +1732,8 @@ goto_level(d_level *newlevel, boolean at_stairs, boolean falling, boolean portal
     (void) pickup(1);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* usually called from goto_level(); might be called from Sting_effects() */
 void
 maybe_lvltport_feedback(void)
index f7d353cd127ee644476d5c54dfe8841c695cb175..b1a9c61b11eb741d4c82d3c55332ea805d283ce9 100644 (file)
@@ -96,6 +96,8 @@ getpos_help_keyxhelp(winid tmpwin, const char *k1, const char *k2, int gloc)
     putstr(tmpwin, 0, sbuf);
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* the response for '?' help request in getpos() */
 static void
 getpos_help(boolean force, const char *goal)
@@ -225,6 +227,8 @@ getpos_help(boolean force, const char *goal)
     destroy_nhwindow(tmpwin);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int QSORTCALLBACK
 cmp_coord_distu(const void *a, const void *b)
 {
@@ -486,6 +490,8 @@ dxdy_to_dist_descr(int dx, int dy, boolean fulldir)
     return buf;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* coordinate formatting for 'whatis_coord' option */
 char *
 coord_desc(int x, int y, char *outbuf, char cmode)
@@ -527,6 +533,8 @@ coord_desc(int x, int y, char *outbuf, char cmode)
     return outbuf;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static void
 auto_describe(int cx, int cy)
 {
index 63d08c6666cf2e862d6831d3d9c01b81f41d587d..f789d266a0d4eb4f96661c87d477017df8d838f2 100644 (file)
@@ -2517,6 +2517,8 @@ load_mapseen(NHFILE *nhfp)
     return load;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* to support '#stats' wizard-mode command */
 void
 overview_stats(winid win, const char *statsfmt,
@@ -2559,6 +2561,8 @@ overview_stats(winid win, const char *statsfmt,
     *total_size += osize + bsize + asize;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* Remove all mapseen objects for a particular dnum.
  * Useful during quest expulsion to remove quest levels.
  * [No longer deleted, just marked as unreachable.  #overview will
index 7bdb450a894d965cde43b2d1f2b54a7dc7b6eb36..9a57cbf93593de545cd5d89ebb0c2d5309b08e09 100644 (file)
--- a/src/eat.c
+++ b/src/eat.c
@@ -915,6 +915,8 @@ givit(int type, register struct permonst *ptr)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* called after completely consuming a corpse */
 static void
 cpostfx(int pm)
@@ -1142,6 +1144,8 @@ cpostfx(int pm)
     return;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 violated_vegetarian(void)
 {
index 28cb12a76d23a33991b87ec13b072dd221c79d89..b71f0fb6a5effc36ff4c679504a52acd486a5c93 100644 (file)
--- a/src/end.c
+++ b/src/end.c
@@ -385,6 +385,9 @@ done_hangup(int sig)
 #endif
 #endif /* NO_SIGNAL */
 
+DISABLE_WARNING_FORMAT_NONLITERAL /* one compiler warns if the format
+                                     string is the result of a ? x : y */
+
 void
 done_in_by(struct monst *mtmp, int how)
 {
@@ -504,6 +507,8 @@ done_in_by(struct monst *mtmp, int how)
     return;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* some special cases for overriding while-helpless reason */
 static const struct {
     int why, unmulti;
index cfa81983fd996afb57bd0b0e0a8652f7daeb46f8..f098b460749f41fae0322037f16dc860891d96a2 100644 (file)
@@ -1234,6 +1234,8 @@ rest_engravings(NHFILE *nhfp)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* to support '#stats' wizard-mode command */
 void
 engr_stats(const char *hdrfmt, char *hdrbuf, long *count, long *size)
@@ -1248,6 +1250,8 @@ engr_stats(const char *hdrfmt, char *hdrbuf, long *count, long *size)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 del_engr(register struct engr *ep)
 {
index 08e346d733835ce2bb5f307bfc24584766c8b3ba..12c2006a66c3df5b9047872725125e36402db35e 100644 (file)
@@ -572,6 +572,9 @@ ordin(int n)               /* note: should be non-negative */
                : (dd == 1) ? "st" : (dd == 2) ? "nd" : "rd";
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL  /* one compiler complains about
+                                      result of ?: for format string */
+
 /* make a signed digit string from a number */
 char *
 sitoa(int n)
@@ -582,6 +585,8 @@ sitoa(int n)
     return buf;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* return the sign of a number: -1, 0, or 1 */
 int
 sgn(int n)
index 2c8a36ce40233c1cd5ce6f1e8d3b9e8fc3e5720e..7df49eabef60d47bb39cdef2a4cc78805d4048d4 100644 (file)
@@ -2316,6 +2316,8 @@ dovanquished(void)
     return 0;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* #wizborn extended command */
 int
 doborn(void)
@@ -2349,6 +2351,8 @@ doborn(void)
     return 0;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* high priests aren't unique but are flagged as such to simplify something */
 #define UniqCritterIndx(mndx) ((mons[mndx].geno & G_UNIQ) \
                                && mndx != PM_HIGH_CLERIC)
index d44c41b7153b942cf6a3fd518a806deb23995d0c..9cd60dc40d21e08bf873caae20430fbe8ca36387 100644 (file)
@@ -2320,6 +2320,8 @@ prinv(const char *prefix, struct obj *obj, long quan)
           xprname(obj, (char *) 0, obj_to_let(obj), TRUE, 0L, quan));
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 char *
 xprname(struct obj *obj,
         const char *txt, /* text to print instead of obj */
@@ -2365,6 +2367,8 @@ xprname(struct obj *obj,
     return li;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* the 'i' command */
 int
 ddoinv(void)
@@ -3781,6 +3785,8 @@ static NEARDATA const char *names[] = {
 static NEARDATA const char oth_symbols[] = { CONTAINED_SYM, '\0' };
 static NEARDATA const char *oth_names[] = { "Bagged/Boxed items" };
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 char *
 let_to_name(char let, boolean unpaid, boolean showsym)
 {
@@ -3823,6 +3829,8 @@ let_to_name(char let, boolean unpaid, boolean showsym)
     return g.invbuf;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* release the static buffer used by let_to_name() */
 void
 free_invbuf(void)
index 60dd07e3eb64c12d32069ceac5e0bc0d33082636..273038b3e3d1a54bf7573e0e066909d5cb6d7072 100644 (file)
@@ -436,6 +436,8 @@ restore_light_sources(NHFILE *nhfp)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* to support '#stats' wizard-mode command */
 void
 light_stats(const char *hdrfmt, char *hdrbuf, long *count, long *size)
@@ -450,6 +452,8 @@ light_stats(const char *hdrfmt, char *hdrbuf, long *count, long *size)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* Relink all lights that are so marked. */
 void
 relink_light_sources(boolean ghostly)
index 9c396ff6c7dfd046ac66a07a13327fb0c1a0bd3c..e818ad97d4632fedeae2ed3a74d9ffae22ea6042 100644 (file)
@@ -71,6 +71,8 @@ pre_mm_attack(struct monst *magr, struct monst *mdef)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static
 void
 missmm(register struct monst *magr, register struct monst *mdef,
@@ -91,6 +93,8 @@ missmm(register struct monst *magr, register struct monst *mdef,
         noises(magr, mattk);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /*
  *  fightm()  -- fight some other monster
  *
index e45a174156f3f70fb79b32cf16ab1c22d38145c5..ab78f7400bb00096376d06e3ab7ff70bfebec9bb 100644 (file)
@@ -4849,6 +4849,8 @@ handler_whatis_filter(void)
     return optn_ok;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static int
 handler_symset(int optidx)
 {
@@ -5026,6 +5028,8 @@ handler_symset(int optidx)
     return optidx;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int
 handler_autopickup_exception(void)
 {
@@ -6150,6 +6154,8 @@ match_str2attr(const char *str, boolean complain)
 
 extern const char regex_id[]; /* from sys/share/<various>regex.{c,cpp} */
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* True: temporarily replace menu color entries with a fake set of menu
    colors, { "light blue"=light_blue, "blue"=blue, "red"=red, &c }, that
    illustrates most colors for use when the pick-a-color menu is rendered;
@@ -6203,6 +6209,8 @@ basic_menu_colors(boolean load_colors)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 int
 query_color(const char *prompt)
 {
@@ -6970,6 +6978,8 @@ static char fmtstr_doset[] = "%s%-15s [%s]   ";
 static char fmtstr_doset_tab[] = "%s\t[%s]";
 static char n_currently_set[] = "(%d currently set)";
 
+DISABLE_WARNING_FORMAT_NONLITERAL   /* RESTORE is after show_menucontrols() */
+
 static int
 optfn_o_autopickup_exceptions(int optidx UNUSED, int req, boolean negated UNUSED,
               char *opts, char *op UNUSED)
@@ -7340,6 +7350,7 @@ doset_add_menu(winid win,          /* window to add to */
              ATR_NONE, buf, MENU_ITEMFLAGS_NONE);
 }
 
+
 /* display keys for menu actions; used by cmd.c '?i' and pager.c '?k' */
 void
 show_menu_controls(winid win, boolean dolist)
@@ -7431,6 +7442,9 @@ show_menu_controls(winid win, boolean dolist)
         arg = "";
     }
 }
+
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int
 count_cond(void)
 {
@@ -7457,6 +7471,8 @@ count_apes(void)
     return numapes;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* common to msg-types, menu-colors, autopickup-exceptions */
 static int
 handle_add_list_remove(const char *optname, int numtotal)
@@ -7504,6 +7520,8 @@ handle_add_list_remove(const char *optname, int numtotal)
     return opt_idx;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 int
 dotogglepickup(void)
 {
index 1897de7942e714e8cdeed5149ecc621b73952699..436ce8c154b3bdadb16dc8b6a7f23fda5bd07b8e 100644 (file)
@@ -1425,6 +1425,8 @@ do_look(int mode, coord *click_cc)
     return 0;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL /* RESTORE is after do_supplemental_info() */
+
 static void
 look_all(boolean nearby,  /* True => within BOLTLIM, False => entire map */
          boolean do_mons) /* True => monsters, False => objects */
@@ -1600,6 +1602,8 @@ do_supplemental_info(char *name, struct permonst *pm, boolean without_asking)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* the '/' command */
 int
 dowhatis(void)
@@ -2098,6 +2102,8 @@ static const struct {
     { (void (*)(void)) 0, (char *) 0 }
 };
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* the '?' command */
 int
 dohelp(void)
@@ -2135,6 +2141,8 @@ dohelp(void)
     return 0;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* the 'V' command; also a choice for '?' */
 int
 dohistory(void)
index 8bd10e5e3c721d85ea551d327a2dc79605e70a43..b62257c9c6331ec9148e6e414e52ae3b94f8f910 100644 (file)
@@ -802,6 +802,8 @@ rest_regions(NHFILE* nhfp)
             reset_region_mids(g.regions[i]);
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* to support '#stats' wizard-mode command */
 void
 region_stats(const char* hdrfmt, char* hdrbuf, long* count, long* size)
@@ -825,6 +827,8 @@ region_stats(const char* hdrfmt, char* hdrbuf, long* count, long* size)
     /* ? */
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* update monster IDs for region being loaded from bones; `ghostly' implied */
 static void
 reset_region_mids(NhRegion* reg)
index a41447981395ac55488294b283927fe247d87561..3adfc4432a52fe8def833633d3b6450ef146d88d 100644 (file)
@@ -45,6 +45,8 @@ static void init_oracles(dlb *);
 static void others_check(const char *ftype, const char *, winid *);
 static void couldnt_open_file(const char *);
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static void
 init_rumors(dlb* fp)
 {
@@ -70,6 +72,8 @@ init_rumors(dlb* fp)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* exclude_cookie is a hack used because we sometimes want to get rumors in a
  * context where messages such as "You swallowed the fortune!" that refer to
  * cookies should not appear.  This has no effect for true rumors since none
@@ -272,6 +276,8 @@ rumor_check(void)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* 3.7: augments rumors_check(); test 'engrave' or 'epitaph' or 'bogusmon' */
 static void
 others_check(const char* ftype, const char* fname, winid* winptr)
@@ -373,6 +379,8 @@ others_check(const char* ftype, const char* fname, winid* winptr)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* Gets a random line of text from file 'fname', and returns it.
    rng is the random number generator to use, and should act like rn2 does. */
 char *
index a43ecb402dd31641be799cd62e48d2223fc39481..402a6b16a9eda255fb66e863bc4457e6793396df 100644 (file)
@@ -548,6 +548,8 @@ mon_is_gecko(struct monst* mon)
     return (boolean) (glyph_to_mon(glyph) == PM_GECKO);
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static int
 domonnoise(register struct monst* mtmp)
 {
@@ -1048,6 +1050,8 @@ domonnoise(register struct monst* mtmp)
     return 1;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* #chat command */
 int
 dotalk(void)
index e20acfbe57c594ac32517bea0bd1c8bbe6e263b2..7cd1b4541beb64fca4aef2eff329187631cd5c00 100644 (file)
@@ -337,6 +337,8 @@ book_cursed(struct obj* book)
         stop_occupation();
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static int
 learn(void)
 {
@@ -435,6 +437,8 @@ learn(void)
     return 0;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 int
 study_book(register struct obj* spellbook)
 {
@@ -1628,6 +1632,8 @@ dovspell(void)
     return 0;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static boolean
 dospellmenu(
     const char *prompt,
@@ -1712,6 +1718,8 @@ dospellmenu(
     return FALSE;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int
 percent_success(int spell)
 {
index 47ea90490a52d171c5ebac10df049978d1bc4f75..47434ad7ad0e6059fdc19237d07c16c49c5bac29 100644 (file)
@@ -2377,6 +2377,8 @@ restore_timers(NHFILE* nhfp, int range, long adjust)
     }
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* to support '#stats' wizard-mode command */
 void
 timer_stats(const char* hdrfmt, char *hdrbuf, long *count, long *size)
@@ -2391,6 +2393,8 @@ timer_stats(const char* hdrfmt, char *hdrbuf, long *count, long *size)
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* reset all timers that are marked for reseting */
 void
 relink_timers(boolean ghostly)
index 672ea348a3de9beba05fcbecdb7ebf55c3612ef1..430cd39ea720461394bb43a8ead15033e62b82ee 100644 (file)
@@ -205,6 +205,8 @@ discardexcess(FILE* rfile)
     } while (c != '\n' && c != EOF);
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static void
 readentry(FILE* rfile, struct toptenentry* tt)
 {
@@ -320,6 +322,8 @@ writeentry(FILE* rfile, struct toptenentry* tt)
 #endif
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 #ifdef XLOGFILE
 
 /* as tab is never used in eg. g.plname or death, no need to mangle those. */
@@ -908,6 +912,8 @@ outheader(void)
     topten_print(linebuf);
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* so>0: standout line; so=0: ordinary line */
 static void
 outentry(int rank, struct toptenentry* t1, boolean so)
@@ -1069,6 +1075,8 @@ outentry(int rank, struct toptenentry* t1, boolean so)
         topten_print(linebuf);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int
 score_wanted(
     boolean current_ver,
index 002d5c54cfc534363f5db4763d9d1bace2794543..5234213405a95e7d6166616dfd9062b6c3749414 100644 (file)
@@ -888,6 +888,8 @@ genl_status_enablefield(int fieldidx, const char *nm, const char *fmt,
     status_activefields[fieldidx] = enable;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 /* call once for each field, then call with BL_FLUSH to output the result */
 void
 genl_status_update(int idx, genericptr_t ptr, int chg UNUSED,
@@ -1068,6 +1070,8 @@ genl_status_update(int idx, genericptr_t ptr, int chg UNUSED,
     putmixed(WIN_STATUS, 0, newbot2); /* putmixed() due to GOLD glyph */
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static struct window_procs dumplog_windowprocs_backup;
 static FILE *dumplog_file;
 
index 3b210789de437abb166bd0c82ea612b91a0f701e..8b46940315c711993ad344d25af34ac4d3cc7440 100644 (file)
--- a/src/zap.c
+++ b/src/zap.c
@@ -5256,6 +5256,8 @@ resist(struct monst *mtmp, char oclass, int damage, int tell)
 
 #define MAXWISHTRY 5
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static void
 wishcmdassist(int triesleft)
 {
@@ -5313,6 +5315,8 @@ wishcmdassist(int triesleft)
     destroy_nhwindow(win);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 makewish(void)
 {
index e8ab62fcc52af516338eccb5ca10413934f10ef6..07fca15c3074c8de512c4fb8c9373413de6dd7b4 100755 (executable)
@@ -52,6 +52,7 @@ CFLAGS+=-Wimplicit-function-declaration
 CFLAGS+=-Wimplicit-int
 CFLAGS+=-Wmissing-declarations
 CFLAGS+=-Wmissing-prototypes
+CFLAGS+=-Wformat-nonliteral
 ifeq "$(CCISCLANG)" ""
 #gcc-specific here
 CFLAGS+=-Wmissing-parameter-type
index 3565f257017d06b3c7c6138bcf4bab9621432991..6745afeaa56741b3cd5782adc86682c55179a1ad 100644 (file)
@@ -678,8 +678,10 @@ scall  =
 # 4244 conversion possible loss of data
 # 4245 conversion from 'char' to 'uchar', signed/unsigned mismatch
 # 4100 unreferenced formal parameter
+# 4774 format string is not a string literal (default is off at W4)
+#
 #cflags = $(cflags:-W3=-W4) -wd4131 -wd4820 -wd4706 -wd4244 -wd4245 -wd4100
-cflags = $(cflags:-W3=-W4) -wd4820 -wd4706 -wd4244 -wd4245 -wd4100 -wd4310
+cflags = $(cflags:-W3=-W4) -wd4820 -wd4706 -wd4244 -wd4245 -wd4100 -wd4310 -w44774
 !ENDIF
 
 #More verbose warning output options below
index ed17b202bb4224a51e6a900b22ce4afcde5266a6..73321749871088d403b504a3620a9abd0846659e 100644 (file)
@@ -337,6 +337,8 @@ do_makedefs(char *options)
 
 static char namebuf[1000];
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static char *
 name_file(const char* template, const char* tag)
 {
@@ -390,6 +392,8 @@ getfp(const char* template, const char* tag, const char* mode, int flg)
     return rv;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static boolean debug = FALSE;
 
 static FILE *inputfp;
@@ -972,6 +976,8 @@ do_rnd_access_file(const char* fname, const char* deflt_content)
     return;
 }
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 void
 do_rumors(void)
 {
@@ -1064,6 +1070,8 @@ rumors_failure:
     exit(EXIT_FAILURE);
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 void
 do_date(void)
 {
index 02aff4f5835bedd3aac54e37b53e6cd8c0e0b564..65087675c106cde77828b49a68c2bc6175ca6b6b 100644 (file)
@@ -136,6 +136,8 @@ curses_status_finish(void)
 
 static int changed_fields = 0;
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 void
 curses_status_update(int fldidx, genericptr_t ptr, int chg UNUSED, int percent,
                      int color_and_attr, unsigned long *colormasks)
@@ -202,6 +204,8 @@ curses_status_update(int fldidx, genericptr_t ptr, int chg UNUSED, int percent,
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static void
 draw_status(void)
 {
@@ -981,6 +985,8 @@ curs_HPbar(char *text, /* pre-padded with trailing spaces if short */
 extern const struct conditions_t conditions[]; /* botl.c */
 extern int cond_idx[CONDITION_COUNT];
 
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 static void
 curs_stat_conds(
     int vert_cond,     /* 0 => horizontal, 1 => vertical */
@@ -1104,6 +1110,8 @@ curs_stat_conds(
     return;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 /* status_update() sets up values for horizontal status; do vertical */
 void
 curs_vert_status_vals(int win_width)
index 8a209dad61dbbed4d693ea460e0dbfb5a2bc94c6..4fbb855f2cccbed4c516b7da77f58091fcde9237 100644 (file)
@@ -3843,6 +3843,8 @@ tty_status_enablefield(int fieldidx, const char *nm, const char *fmt,
  *         See doc/window.doc for more details.
  */
 
+DISABLE_WARNING_FORMAT_NONLITERAL
 void
 tty_status_update(int fldidx, genericptr_t ptr, int chg UNUSED, int percent,
                   int color, unsigned long *colormasks)
@@ -3964,6 +3966,8 @@ tty_status_update(int fldidx, genericptr_t ptr, int chg UNUSED, int percent,
     return;
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
 static int
 make_things_fit(boolean force_update)
 {
index 4a5fb1987fdfea655fbe8e6eb029f14633533e85..60d65ff2a94189a3957abda81ad1c616335fd4c6 100644 (file)
@@ -3072,6 +3072,9 @@ status_update(int fldindex, genericptr_t ptr, int chg, int percent, int color, u
                    longs telling which conditions should be displayed in each
                    color and attriubte.
 */
+
+DISABLE_WARNING_FORMAT_NONLITERAL
+
 void
 mswin_status_update(int idx, genericptr_t ptr, int chg, int percent, int color, unsigned long *condmasks)
 {
@@ -3173,3 +3176,5 @@ mswin_status_update(int idx, genericptr_t ptr, int chg, int percent, int color,
     }
 }
 
+RESTORE_WARNING_FORMAT_NONLITERAL
+
index 02240e2c08a6402d7354ab00edae3126e7efcfc1..c2dd05dc4cb7e04e96bf6dd03f398f06bff3eda0 100644 (file)
@@ -29,7 +29,7 @@
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup>\r
     <ClCompile>\r
-      <AdditionalOptions>/Gs /Oi- %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions>/Gs /Oi- /w44774 %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <InlineFunctionExpansion>Default</InlineFunctionExpansion>\r
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>\r
@@ -43,7 +43,7 @@
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="@(Lua)">\r
-      <DisableSpecificWarnings>4701;4702;4244;4310</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings>4701;4702;4244;4310;4774</DisableSpecificWarnings>\r
     </ClCompile>\r
     <ClCompile Include="$(SrcDir)allmain.c" />\r
     <ClCompile Include="$(SrcDir)alloc.c" />\r
index f9c0319c666d37e41ab11a9332087548260c1f12..98338781a60eaa2ed17b44903c85a220869efc06 100644 (file)
@@ -17,7 +17,7 @@
   </PropertyGroup>\r
   <ItemDefinitionGroup>\r
     <ClCompile>\r
-      <AdditionalOptions>/Gs /Oi- %(AdditionalOptions)</AdditionalOptions>\r
+      <AdditionalOptions>/Gs /Oi- /w44774 %(AdditionalOptions)</AdditionalOptions>\r
       <Optimization>Disabled</Optimization>\r
       <OmitFramePointers>true</OmitFramePointers>\r
       <AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWinntDir);$(SysShareDir);$(WinShareDir);$(LuaDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
@@ -37,7 +37,7 @@
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="@(Lua)">\r
-      <DisableSpecificWarnings>4701;4702;4244;4310</DisableSpecificWarnings>\r
+      <DisableSpecificWarnings>4701;4702;4244;4310;4774</DisableSpecificWarnings>\r
     </ClCompile>\r
     <ClCompile Include="$(SrcDir)allmain.c" />\r
     <ClCompile Include="$(SrcDir)alloc.c" />\r