Zhiyi Zhang (@zhiyi) commented about dlls/winex11.drv/display.c:
for (display_idx = 0; !NtUserEnumDisplayDevices( NULL, display_idx, &display_device, 0 ); ++display_idx) ++display_count;
- displays = calloc(display_count, sizeof(*displays)); - if (!displays) - goto done; + /* allocate an extra mode to make iteration easier */ + if (!(displays = calloc(display_count + 1, sizeof(struct display_setting)))) goto done; + mode = displays;
- for (display_idx = 0; display_idx < display_count; ++display_idx) + for (display_idx = 0; !NtUserEnumDisplayDevices( NULL, display_idx, &display_device, 0 ); ++display_idx)
Why do you need to change the loop? And even if you have to, NtUserEnumDisplayDevices is called twice for the same display_idx. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/561#note_5400