RetroAchievements / rcheevos

Library to parse and evaluate achievements and leaderboards for RetroAchievements
MIT License
86 stars 33 forks source link

allow shared file opening when using secure CRT functions #331

Closed Jamiras closed 4 months ago

Jamiras commented 4 months ago

https://discord.com/channels/310192285306454017/1230730290650026055/1230929459574607952

fopen_s and _wfopen_s cannot open files already opened by another piece of code.

The fopen_s and _wfopen_s functions can't open a file for sharing. If you need to share the file, use _fsopen or _wfsopen with the appropriate sharing mode constant

This switches them out for _fsopen and _wfsopen, which also don't generate the secure CRT warning and support opening files already open by another piece of code. These are Windows only, so fopen_s is still used if WINVER is not defined, but the likelihood of that happening and __STDC_WANT_SECURE_LIB__ being defined is minimal.

The need for opening files in shared mode stems from the blueMSX core holding a write lock on a dsk file so it can potentially modify it. The core should not be modifying the original dsk file. Instead it should be creating a copy to modify (see https://github.com/libretro/blueMSX-libretro/issues/134).