Commit Graph
83 Commits
Author SHA1 Message Date
libretroadmin f1208a7a5a Make threading lock-free
The core and the headless tools no longer use mutexes, condition variables,
spinlocks, std::atomic, std::thread or volatile flags. Threads hand off through
libretro-common's retro_atomic and rthreads plus a few small pieces on top of
them in Common/Thread: Thread, MpscQueue, EventCounter, ParkingLot waits and
ReaderGate. Every wait blocks until it's woken; nothing polls on a timer.

State that only one thread touches just loses its lock. The PSP filesystem,
sceIo and the savedata dialog now belong to the emulation thread: async reads
and writes run when they're queued and complete later in emulated time, and
the IO and savedata threads are gone. The friend finder only talks to the
adhoc server and hands what it gets to the emulation thread. GPU init always
runs on the thread that starts the game.

The Vulkan render and compile queues, pipeline and render pass caches, delete
list and SPIR-V cache, the GL render queue, the software renderer's jit caches,
the file loader caches, the web debugger, UPnP, input, savestates, logging and
the GE debugger all hand off through queues and atomics. The IR jit's spinning
profiler thread goes.

A CPU thread with nothing to run now sleeps until work is queued instead of
spinning. Headless with --debugger waits for a client while stopped, and ends
the run once every client that connected has left. Web server shutdown keeps
servicing the CPU queue until the server has finished.
2026-10-09 04:56:16 +02:00
libretroadmin d56b453891 Replace zlib, zstd, libchdr, libzip and libpng with libretro-common
Deflate, zlib and gzip streams go through rinflate and rdeflate, zstd
through rzstd, CHD images through rchd, zip archives through
rzip_archive and PNG through rpng. The bundled libraries, their build
glue and the system-library options are gone; adler32 and uncompress
keep zlib's ABI for the prebuilt FFmpeg archives that still call them.
libretro-common is one CMake library that the core, the headless tool
and the unit tests all link.

The reads take shorter paths on the way. CHD decodes straight from the
loader's reads and a range of blocks at a time, and a file read at any
alignment decodes into place; CSO keeps one inflate stream instead of
one per block; a plain ISO serves a file read with one read of its exact
bytes; a stored zip member is read in place and a deflated one through
restart points rather than a copy of the whole image in memory; zip
members decode into the caller's buffer; sequential reads through the
frontend's VFS skip the seek, which also keeps its buffering.

libretro/test reads one image as ISO, CSO, CHD and zip through the block
devices, boots each, and checks the codecs against Python-made vectors;
a CI job runs it.
2026-10-08 14:14:38 +02:00
Henrik Rydgård 632fa10b23 Use VFS directly to read HLE-sceFont fonts instead of relying on the flash0: mount 2026-08-24 09:30:42 +02:00
Henrik RydgårdandClaude Sonnet 5 df751d5571 URL/VFS: fix latent pointer/index UB on empty or tiny input
UriDecode() formed SRC_END - 2 unconditionally, a pointer before the
start of the buffer (UB) for a 0- or 1-byte input. IsLocalAbsolutePath()
indexed path[0]/path[1] on a std::string_view with no bounds check,
UB for an empty path (path[0]) or a 1-byte path on Windows (path[1]).
Neither was known to crash in practice, but both are real UB flagged
by hardened/UBSan builds and easy to trigger (e.g. an empty query
string, or listing the VFS root).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4QAoxV2KY7ek4PcZw3WvY
2026-08-10 11:26:39 +02:00
Henrik RydgårdandClaude Sonnet 5 6ee6641fe5 ZipFileReader: guard against implausible/overflowing declared sizes
ReadFile()/ReadSingleFileFromZip() allocated/resized directly off a
zip entry's declared uncompressed size with no sanity check. A
crafted size near UINT64_MAX would wrap ReadFile()'s "size + 1" to 0,
allocating almost nothing while zip_fread() still writes the full
declared size into it - a length-field-driven heap overflow from a
malicious zip/texture pack. Both now reject entries above a generous
4GB cap. Also fixes GetFileInfo() reading zstat.name[strlen(name)-1]
unchecked, which underflows to SIZE_MAX for a zero-length entry name.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L4QAoxV2KY7ek4PcZw3WvY
2026-08-10 11:26:24 +02:00
Henrik Rydgård 0a0b4b9d95 Make opening 7z file android-compatible. Assorted buildfixes. 2026-03-27 14:34:18 -06:00
Henrik Rydgård 288b72cb16 Add 7z streaming support, so we can have a progress bar 2026-03-27 14:34:18 -06:00
Henrik Rydgård 5e0a9a0113 Add really simple 7z extraction, using the 7z VFS 2026-03-27 14:34:18 -06:00
Henrik Rydgård 0c077acc74 Do some include untangling, to limit the spread of the Windows.h include from SevenZipFileReader.h 2026-03-27 14:34:18 -06:00
Henrik Rydgård 8380e13f10 Add AI-generated SevenZipFileReader 2026-03-27 14:34:18 -06:00
Henrik Rydgård 116c31e7d9 Add the LZMA sdk 2026-03-27 14:34:15 -06:00
Henrik Rydgård e8d648e91d InstallZip: Fix problem where the delete-after option didn't work
The file was held open.
2026-03-06 10:57:22 +01:00
Henrik Rydgård 4ccd41110b Correctly do the VFS refactor that I tried to do in #21218
See #21218
2026-02-09 13:08:44 +01:00
Henrik Rydgård dd648b596c Revert "VFS: Remove some code duplication" (logic bug)
This reverts commit f257ad4f7f.
2026-02-08 18:44:48 +01:00
Henrik Rydgård f257ad4f7f VFS: Remove some code duplication 2026-02-08 00:53:50 +01:00
Henrik Rydgård dd28f75852 Buildfixes 2026-02-07 12:03:44 +01:00
Henrik Rydgård b1fa6b4671 Remove some uses of textScale 2026-02-06 14:30:47 +01:00
Henrik Rydgård de702ced45 Use std::string_view in VFS 2026-02-06 13:22:35 +01:00
刘皓 0b3cf1de8d Check that source is non-null before attempting to use it in the ZipContainer constructor 2026-01-08 11:59:12 -05:00
刘皓 17acfe31a3 Fix several problems with ZipContainer in Common/File/VFS/ZipFileReader.cpp 2026-01-02 14:25:13 -05:00
刘皓 5716cbd41d Use the libretro VFS interface in libretro builds 2026-01-01 00:24:01 -05:00
Henrik Rydgård 52c4c31508 Runtime atlas generation 2025-09-17 09:49:54 -06:00
Henrik Rydgård b472eb8b8b Remove a lot of unnecessary string constructors 2025-08-31 15:49:29 +02:00
Henrik Rydgård 61a3d40303 Fix memory leak when looking for icons in texture replacement zip files 2025-06-14 09:49:07 +02:00
Henrik Rydgård 252d342cc5 Fix another texture replacement crash (only happens with broken png texture files).
Fix a warning too.
2025-06-10 15:03:15 +02:00
Henrik Rydgård deb2fa4a63 Texture replacement: Fix issue where we could accidentally close a file twice.
Add a sanity check.
2025-06-06 10:31:01 +02:00
Henrik Rydgård 91bf4d5b5c Correct some log categories, add UI category, some warning fixes 2025-04-09 13:45:21 +02:00
Henrik Rydgård 4b2bce388c Minor error handling improvements, remove redundant Exists checks 2025-02-18 10:56:49 -06:00
Henrik Rydgård b7cec64fb2 ZipFileReader: Small performance optimization when reading by filename 2025-02-13 11:42:46 -06:00
LunaMoo ed9b202671 Basic custom icon support (through texture replacement)
uses path textures/gameID/icon.png, or icon.png from textures.zip.

requires restart to re-load icons.
2025-02-13 10:47:58 -06:00
Henrik Rydgård e67b673e4e Fix regression in zip texture packs
Can't seek in compressed zips. Let's add a comment too to not do this
again.

Thanks Nukem for debugging.
2025-01-11 09:37:37 +01:00
Henrik Rydgård 4dd3621fa0 Remove some unnecessary <algorithm> includes. 2024-12-18 17:04:27 +01:00
Henrik Rydgård 36d10b89e2 Remove locks on safe zip file operations (that don't involve the file pointer) 2024-11-30 11:55:36 +01:00
Henrik Rydgård ed296e4587 ZipFileReader: Save the zip path so we can log it 2024-11-30 02:44:01 +01:00
Henrik Rydgård 5eeb15b30a Use Exists instead of GetFileInfo in more cases 2024-11-30 00:39:38 +01:00
Henrik Rydgård 98780ba603 Theme: Avoid checking the ui_atlas multiple times 2024-11-28 15:02:25 +01:00
Henrik Rydgård c30ec47937 ZipFileReader: Better implementation of Rewind 2024-10-28 17:02:03 +01:00
Henrik Rydgård e51c58716b Fix minor code issues flagged by PVS-Studio and reported by alphrixus. 2024-10-10 14:10:30 +02:00
Herman Semenov 45429bcd85 [Common/Data/File/Input/Net/Serialize/System/UI] Using for based loop C++17 and replaced on structured binding map C++17 2024-09-17 17:42:08 +02:00
Henrik Rydgård e01ca5b057 Logging API change (refactor) (#19324)
* Rename LogType to Log

* Explicitly use the Log:: enum when logging. Allows for autocomplete when editing.

* Mac/ARM64 buildfix

* Do the same with the hle result log macros

* Rename the log names to mixed case while at it.

* iOS buildfix

* Qt buildfix attempt, ARM32 buildfix
2024-07-14 14:42:59 +02:00
Henrik Rydgård ccbcf1369b Convert DrawString* functions to use std::string_view 2024-05-24 22:52:51 +02:00
Signed-off-by: Henrik Rydgård 9c3c23daa6 Fixed memleaks and incorrect add tab in ui::view_group
Signed-off-by: Herman Semenov <GermanAizek@yandex.ru>
2024-04-02 13:48:16 +03:00
Henrik Rydgård 9979372a97 Assorted paranoia, get rid of an allocation in the audio loop 2024-01-29 10:37:38 +01:00
Henrik Rydgård 0170e8f081 Logging updates 2024-01-29 00:54:24 +01:00
Herman Semenov 4ea842a3c1 Minor replaced insert to emplace C++11 2023-12-19 16:06:48 +03:00
Herman Semenov b8748ae9e5 [Common/File/GPU/Render/Input] Using reserve if possible 2023-12-15 14:00:51 +03:00
German Semenov c27481d637 GPU, VFS, UI: Fixed minor memleaks 2023-09-15 12:23:54 +03:00
Henrik Rydgård 2537f76277 UI: Add a basic FileChooserChoice view 2023-07-16 12:14:40 +02:00
Henrik Rydgård 919979eece Disable excessive logging 2023-05-02 11:40:50 +02:00
Henrik Rydgård ee7e8d7c06 Add a unit test, fix listing zip directories 2023-05-02 11:35:45 +02:00