Commit graph

12355 commits

Author SHA1 Message Date
Kp 407ab585a8 Move window existence flag to a mixin, and track using std::shared_ptr
gcc-12 does enough escape analysis to notice that
newmenu::process_until_closed stores the address of a stack local into a
heap-allocated structure, but not enough analysis to notice that the
stack variable always outlives the escaped address.  The compiler then
warns about the address escaping the local scope.  Reworking the calling
code not to do this is somewhat invasive, and gcc seems unlikely to
change behavior.  Switch to a less efficient implementation that does
not provoke a compiler warning:

- Store a shared_ptr<bool> in the object
- In the object's destructor, write through the pointer to clear the
  shared boolean
- In the caller, store a copy of the shared_ptr<bool> as a local, and
  use that copy to monitor the shared boolean

This is similar to a change proposed by JoeNotCharles
<10a2b2d337>,
but differs in its details.  Among other things, this version takes the
opportunity to move the variable out to a mixin, so that only windows
which expect to be tracked can be tracked.  Previously, all windows were
capable of this, even though most never needed it.
2023-01-14 19:05:37 +00:00
Kp 7a9e43da61 Merge branch 693/overflow-check into master 2023-01-14 19:05:37 +00:00
Kp b6ce89eb54 Add compile-time sanity check on multi_send_data_direct length
JoeNotCharles reported
<1f1903a3b9>
an overflow in `net_udp_send_mdata_direct`.  This overflow is impossible
as currently written, because it can occur only if
`multi_send_data_direct` passes an oversized buffer to
`net_udp_send_mdata_direct`, and no messages are large enough to trigger
this.  JoeNotCharles proposed adding a runtime check to abort the
program if this happens.  Instead, this commit adds a compile-time check
to detect use of an excessively large input buffer.
2023-01-14 19:05:37 +00:00
Kp 6cbfc2fd55 Merge branch 693/newmenu-separator into master 2023-01-14 19:05:37 +00:00
Kp b8f25c9d1e Fix off-by-strlen(sep) in buffer capacity check
JoeNotCharles reports that gcc-12 (architecture unspecified) warns about
a possible truncation when constructing a path.  This would only occur
if the user had a path that was almost PATH_MAX deep (4096 bytes on most
platforms).  Add safety checks around this, and around an underflow if
this path were somehow reached while `newpath` was shorter than `sep`.
This is loosely based on a proposed commit by JoeNotCharles, but
rewritten to update comments and adjust the code flow.

Reported-by: JoeNotCharles <edfb3c4b77>
2023-01-14 19:05:37 +00:00
Kp 9839ca185b Merge branch 'osx-clang-missing-ranges' to master 2023-01-14 19:05:37 +00:00
Kp 99b98bb555 Rework convert_integer to return result in some cases
Prefer returning the result in a std::optional<T> over returning a flag
value and taking a non-const reference to the result.
2023-01-14 19:05:37 +00:00
Kp 34046216a2 Make enumerate() iterator suitable for use with std::ranges
std::ranges algorithms include requires() clauses that:
- rejected enumerated_sentinel: not default-constructible
- rejected enumerated_sentinel: not assignable due to `const` member
- rejected enumerated_iterator: no postfix operator++

None of these need to be satisfied for enumerate to work properly, but
this commit satisfies and models these requirements, so that future use
of std::ranges algorithms will work.
2023-01-14 19:05:37 +00:00
Kp 9188c72b34 Reduce maximum nm_messagebox strings
Nothing uses 5 strings.
2023-01-14 19:05:37 +00:00
Kp 97c8a7a081 Remove macro wrapper around nm_messagebox
Construct the nm_messagebox_tie directly, without use of a macro.  This
produces simpler compiler error messages when nm_messagebox is called
incorrectly.
2023-01-14 19:05:37 +00:00
Kp 28bb251eea Remove unused return value for select_mission 2023-01-14 19:05:37 +00:00
Kp 8538a96451 Remove write-only multi_protocol 2023-01-14 19:05:37 +00:00
Kp 2790c5b14a Use run_blocking_newmenu for newdemo save-as dialog 2023-01-14 19:05:37 +00:00
Kp 43470c09bd Use run_blocking_newmenu for newdemo error dialog 2023-01-14 19:05:37 +00:00
Kp dfce7ed40d Simplify SDL_QUIT handling
Remove the global `Quitting` and instead run the window close loop
immediately upon receiving SDL_QUIT.
2023-01-14 19:05:37 +00:00
Kp 7a087702d0 Remove Mac-specific Command-Q handler
Per SDL documentation, SDL will generate an SDL_QUIT event when
Command-Q is used.  Rebirth already handles SDL_QUIT, so there is no
need to explicitly detect Command-Q.
2023-01-14 19:05:37 +00:00
Kp 820ba19883 Move vclip id validation down into paging_touch_vclip
This avoids repeating the ID in every caller's test, and centralizes the
definition of a valid vclip id.
2023-01-14 19:05:37 +00:00
Kp 3f1aa85ad6 Make partial_range_t inherit from ranges::subrange
Delegate work to the standard library where possible.
2023-01-14 19:05:37 +00:00
Kp 932c8370d5 Make iterator_result_converter satisfy std::ranges::range
std::ranges::range requires the iterator to be default-constructible and
have postfix operator++.  Add those to satisfy the concept.
2023-01-14 19:05:37 +00:00
Joe Mason 1f1903a3b9 Overflow check in net_udp_send_mdata_direct 2023-01-13 21:50:00 -05:00
Joe Mason edfb3c4b77 Leave space for separator in EVENT_NEWMENU_SELECTED handler
If newpath ends in a directory separator, the EVENT_NEWMENU_SELECTED
handler appends another copy of the separate before appending
list[citem]. However the bounds check before snprintf didn't include the
extra separator, leading to a -Wformat-truncation warning.
2023-01-13 21:45:08 -05:00
Kp 9fd0cc96a5 Use correct coefficient table for 11Khz sounds
The new resampler sets upFactor to either `2` (for 22Khz sounds) or
`4` (for 11Khz sounds).  However, the logic to pick which coefficient
table to use tested for `0` versus non-zero, so it always picked the
coefficient table meant for 22Khz sounds, even when the sample was an
11Khz sound.  This caused a high pitched ringing in sampled sounds.
Switch to use an `enum class` to prevent using zero-vs-nonzero tests
without a cast.  Change the existing test to test for the 22Khz `enum`
value, as originally intended.  In testing, this eliminated the ringing
effect in 11Khz sounds.

Identified-by: Chris <https://forum.zdoom.org/viewtopic.php?p=1234989> (in response to a request by KynikossDragonn)
Fixes: 5165efbc46 ("Use custom fixed-point audio resampler: - Hopefully fixes issues with poor quality resampling when using SDL_AudioCVT - Converts 11025 Hz or 22050 Hz samples to the default 44100 Hz outputs - Uses high order brick wall filter like Sound Blaster 16")
2023-01-08 14:19:52 +00:00
Kreeblah 476affd806
Fix macOS compilation 2023-01-07 15:47:23 -08:00
Kp 28a83aa43f Harden D2 loading of D1 texture numbers 2023-01-07 22:17:31 +00:00
Kp 06bb1b74ad Harden bm_read_alias against bad input 2023-01-07 22:17:31 +00:00
Kp 2a4a06aca0 Use enum class for pigfile_size 2023-01-07 22:17:31 +00:00
Kp 91496e1d4a Use enum class for properties_init result 2023-01-07 22:17:31 +00:00
Kp 058ad139e4 Return earlier if no sound data is available
There is no point to retrieving the SDL_mixer output settings if the
sound data is missing, since they are only used when the data is
present.
2023-01-07 22:17:31 +00:00
Kp 704bde86bd Move SysNoHogDir to CGameArg
Move DXX_USE_SHAREPATH definition to apply to common files too, since
common files see CGameArg.
2023-01-07 22:17:31 +00:00
Kp 5ce4d49004 Use enum class for sound_sample_rate 2023-01-07 22:17:31 +00:00
Kp 60adb6ecd8 Hold digi_sample_rate const
In any given run of the program, either the SDL_mixer code will be used,
or it will not be used.  `digi_sample_rate` only needs to vary if a
single run both uses SDL_mixer and avoids it.  Make `digi_sample_rate` a
`static const` with an appropriate value for each path.
2023-01-07 22:17:31 +00:00
Kp d9241c2d69 Add back old SDL_mixer-based resampler
Add the SDL_mixer-based resampler as a compile-time alternative, which
can be chosen by setting `-DDXX_FEATURE_INTERNAL_RESAMPLER=0`.  Keep the
new internal resampler as the default.
2023-01-07 22:17:31 +00:00
Kp 9e3ebdb1f7 Add static asserts that the custom resampler does not truncate input 2023-01-07 22:17:31 +00:00
Kp f002678974 Fix integer overflow in mixer resampler 2023-01-07 22:17:31 +00:00
Kp b5a609868e Remove inline stub for swap_polygon_model_data
All callers are either in `#if DXX_WORDS_BIGENDIAN` or in
`if constexpr (words_bigendian)`, so there are no callers that use the
`static inline` stub.
2023-01-07 22:17:31 +00:00
Kp 08cc393e74 Return DiskSoundHeader from DiskSoundHeader_read
This allows the structure to be const in the caller.
2023-01-07 22:17:31 +00:00
Kp 66d588c624 Use bitmap name in place for non-animated bitmaps 2023-01-07 22:17:31 +00:00
Kp 165b50bcc7 Use mve_audio_spec to track whether audio can play
This is nullptr in all the cases that audio is disabled, and non-nullptr
in all the cases where it is enabled.  Use it instead of a separate flag
variable.
2023-01-07 22:17:31 +00:00
Kp 095b19e450 Use standard new[]/delete[] for movie audio buffer 2023-01-07 22:17:31 +00:00
Kp 7b602efedc Pass std::span to mveaudio_uncompress 2023-01-07 22:17:31 +00:00
Kp 05eea350a0 Move unique_span to d_uspan.h 2023-01-07 22:17:31 +00:00
Kp 5700cc28e7 Pass std::span to decodeFrame16 2023-01-07 22:17:31 +00:00
Kp 870c85ceab Pass std::span to decodeFrame8 2023-01-07 22:17:31 +00:00
Kp 38ff4a7b19 Use std::span for MVE g_pCurMap, g_nMapLength 2023-01-07 22:17:31 +00:00
Kp f9ac799d88 Detect escort goal even for silent powerups 2023-01-07 22:17:31 +00:00
Kp 3a4927ddb1 Switch do_morph_frame to enumerate(zip())
Use structured bindings instead of manual decomposition.  This makes the
code more consistent with other zip sites.
2023-01-07 22:17:31 +00:00
Kp e0478f8111 Use if constexpr to guard calls to align_polygon_model_data
This allows the compiler to see and perform basic checks on the call
even in builds with `DXX_WORDS_NEED_ALIGNMENT == 0`.

Also, fix a missing address-of operator in one invocation of
`align_polygon_model_data`.

Reported-by: Brunnis <https://github.com/dxx-rebirth/dxx-rebirth/issues/687> (missing address-of operator)
Fixes: 43e1c841f0 ("Pass polymodel& to polymodel_read")
2022-12-31 16:21:47 +00:00
Kp 9ba1c13d9f Flatten type information for zip<> 2022-12-31 16:21:47 +00:00
Kp 1fcb02f100 Inline zip sentinel type resolution 2022-12-31 16:21:47 +00:00
Kp a56ceca502 Use distinct sentinel type on zip<> 2022-12-31 16:21:47 +00:00