Explorar o código

Fix `WAVEFORMATEX` struct size (#5356)

* fix WAVEFORMATEX struct size
* fix size test for WAVEFORMATEX
* pack WAVEFORMATEXTENSIBLE
David Holland hai 2 meses
pai
achega
0a45d4de0c

+ 2 - 2
core/sys/windows/winmm.odin

@@ -589,7 +589,7 @@ WAVE_FORMAT_FLAC                       :: 0xF1AC /* flac.sourceforge.net */
 WAVE_FORMAT_EXTENSIBLE                 :: 0xFFFE /* Microsoft */
 
 
-WAVEFORMATEX :: struct {
+WAVEFORMATEX :: struct #packed {
 	wFormatTag:      WORD,
 	nChannels:       WORD,
 	nSamplesPerSec:  DWORD,
@@ -603,7 +603,7 @@ LPCWAVEFORMATEX :: ^WAVEFORMATEX
 //  New wave format development should be based on the WAVEFORMATEXTENSIBLE structure.
 //  WAVEFORMATEXTENSIBLE allows you to avoid having to register a new format tag with Microsoft.
 //  Simply define a new GUID value for the WAVEFORMATEXTENSIBLE.SubFormat field and use WAVE_FORMAT_EXTENSIBLE in the WAVEFORMATEXTENSIBLE.Format.wFormatTag field.
-WAVEFORMATEXTENSIBLE :: struct {
+WAVEFORMATEXTENSIBLE :: struct #packed {
 	using Format: WAVEFORMATEX,
 	Samples: struct #raw_union {
 		wValidBitsPerSample: WORD,      /* bits of precision  */

+ 3 - 1
tests/core/sys/windows/test_windows_generated.odin

@@ -527,8 +527,10 @@ verify_winmm :: proc(t: ^testing.T) {
 	// mmsyscom.h
 	expect_size(t, win32.MMVERSION, 4)
 	expect_size(t, win32.MMTIME, 12)
+	// mmreg.h
+	expect_size(t, win32.WAVEFORMATEX, 18)
+	expect_size(t, win32.WAVEFORMATEXTENSIBLE, 40)
 	// mmeapi.h
-	expect_size(t, win32.WAVEFORMATEX, 20)
 	expect_size(t, win32.WAVEHDR, 48)
 	expect_size(t, win32.WAVEINCAPSW, 80)
 	expect_size(t, win32.WAVEOUTCAPSW, 84)

+ 4 - 1
tests/core/sys/windows/win32gen/win32gen.cpp

@@ -1,6 +1,7 @@
 #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
 #include <windows.h>
 #include <timeapi.h>
+#include <mmreg.h>
 #include <mmeapi.h>
 #include <windns.h>
 #include <commdlg.h>
@@ -702,8 +703,10 @@ static void verify_winmm(ofstream& out) {
 	test_proc_comment("mmsyscom.h");
 	expect_size(MMVERSION);
 	expect_size(MMTIME);
-	test_proc_comment("mmeapi.h");
+	test_proc_comment("mmreg.h");
 	expect_size(WAVEFORMATEX);
+	expect_size(WAVEFORMATEXTENSIBLE);
+	test_proc_comment("mmeapi.h");
 	expect_size(WAVEHDR);
 	expect_size(WAVEINCAPSW);
 	expect_size(WAVEOUTCAPSW);