g++-12 bits, mostly Qt5 related
I forced a test compile to -std=c++20 mostly to see what we would
be up against. There was only a small number of things and they
are corrected in this commit.
c++20 has some issues with comparisons and bit twiddling between
different enums.
The vendor-supplied Qt5 header files triggered some of those issues as
well, so the qt_pre.h and qt_post.h NetHack header files were adjusted
to make those new warnings go away. I have not tested Qt6 under the
new compiler and c++ version yet.
Because there are multiple pragmas in qt_pre.h now, the conditional
ifdef structure in there was modified a little to make maintenance
simpler and have a single pragma push at the top. The pragma pop
comes after the Qt vendor-supplied header files, and is done
in qt_post.h.
The display.h macro cmap_to_glyph() was used in
a Qt c++ file and triggered a series of warnings because of that.
Rather than write c++20-friendly versions of those macros, the
simple fix is to provide a function on the C side of things
to front the cmap_to_glyph() macro, so fn_cmap_to_glyph()
was added.
Also thrown into this commit, PatR picked up on the fact that for
yesterday's new warning in qt_menu.cpp, the compiler had correctly
picked up on the fact that the format range of the variable 'cash'
had been correctly upper-capped at 999999999L in the warning message
because of an assignment prior. He suggested that perhaps by also adding
if (cash < 0)
cash = 0;
the warning might be eliminated altogether.
After a test, that was proven to be correct, so yesterday's
more-kludgy change is reverted and replaced with that variable
variable restriction ahead of the snprintf().
This commit is contained in:
@@ -170,7 +170,12 @@ NetHackQtMenuWindow::NetHackQtMenuWindow(QWidget *parent) :
|
||||
|
||||
QGridLayout *grid = new QGridLayout();
|
||||
table->setColumnCount(5);
|
||||
#if __cplusplus >= 202002L
|
||||
table->setFrameStyle(static_cast<int>(QFrame::Panel)
|
||||
| static_cast<int>(QFrame::Raised));
|
||||
#else
|
||||
table->setFrameStyle(QFrame::Panel|QFrame::Sunken);
|
||||
#endif
|
||||
table->setLineWidth(2); // note: this is not row spacing
|
||||
table->setShowGrid(false);
|
||||
table->horizontalHeader()->hide();
|
||||
@@ -1058,7 +1063,7 @@ void NetHackQtTextWindow::UseRIP(int how, time_t when)
|
||||
|
||||
char buf[BUFSZ];
|
||||
char *dpx;
|
||||
int line, snpres;
|
||||
int line;
|
||||
|
||||
/* Put name on stone */
|
||||
(void) snprintf(rip_line[NAME_LINE], STONE_LINE_LEN + 1,
|
||||
@@ -1077,10 +1082,12 @@ void NetHackQtTextWindow::UseRIP(int how, time_t when)
|
||||
long cash = std::max(g.done_money, 0L);
|
||||
/* force less that 10 digits to satisfy elaborate format checking;
|
||||
it's arbitrary but still way, way more than could ever be needed */
|
||||
if (cash < 0)
|
||||
cash = 0;
|
||||
if (cash > 999999999L)
|
||||
cash = 999999999L;
|
||||
snpres = snprintf(rip_line[GOLD_LINE], STONE_LINE_LEN + 1, "%ld Au", cash);
|
||||
nhUse(snpres);
|
||||
(void) snprintf(rip_line[GOLD_LINE], STONE_LINE_LEN + 1, "%ld Au", cash);
|
||||
|
||||
/* Put together death description */
|
||||
formatkiller(buf, sizeof buf, how, FALSE);
|
||||
//str_copy(buf, killer, SIZE(buf));
|
||||
|
||||
Reference in New Issue
Block a user