src/options: fix bad TriBool ThirdValue for pefile compress_resources

This commit is contained in:
Markus F.X.J. Oberhumer 2023-10-30 21:36:36 +01:00
parent acfda848cd
commit 19c6b969ab
2 changed files with 15 additions and 3 deletions

View File

@ -88,14 +88,26 @@ void Options::reset() noexcept {
**************************************************************************/
TEST_CASE("Options::reset") {
#define opt DO_NOT_USE_opt
COMPILE_TIME_ASSERT(std::is_standard_layout<Options>::value)
COMPILE_TIME_ASSERT(std::is_nothrow_default_constructible<Options>::value)
COMPILE_TIME_ASSERT(std::is_trivially_copyable<Options>::value)
Options local_options;
Options *o = &local_options;
Options *const o = &local_options;
o->reset();
CHECK(o->o_unix.osabi0 == 3);
//
static_assert(TABLESIZE(o->win32_pe.compress_rt) == 25); // 25 == RT_LAST
CHECK(o->win32_pe.compress_exports);
CHECK(o->win32_pe.compress_icons);
CHECK(o->win32_pe.strip_relocs);
// issue 728
CHECK(o->win32_pe.compress_resources);
for (size_t i = 0; i < 24; i++)
CHECK(o->win32_pe.compress_rt[i]);
CHECK(!o->win32_pe.compress_rt[24]); // 24 == RT_MANIFEST
#undef opt
}
template <size_t N>

View File

@ -170,8 +170,8 @@ struct Options final {
struct {
int compress_exports;
int compress_icons;
upx::TriBool<upx_int8_t> compress_resources;
upx::TriBool<upx_int8_t> compress_rt[25]; // 25 == RT_LAST
upx::TriBool<upx_int8_t, 2> compress_resources;
upx::TriBool<upx_int8_t, 2> compress_rt[25]; // 25 == RT_LAST
int strip_relocs;
const char *keep_resource;
} win32_pe;