The listdir function had three memory corruption bugs causing a
data abort (Err:19) on the Switch:
1. Heap buffer overflow: CpyStr("sd:/") allocated only 5 bytes but
listdir appends full subdirectory paths in-place via memcpy.
Fixed by using a 1024-byte stack buffer instead.
2. Use-after-free: _DeleteFileSimple(path) freed the shared traversal
buffer, but the loop continued using it. Fixed by inlining f_unlink
without freeing.
3. Recursive free + missing else: free(path) at the end of listdir
freed the buffer shared across all recursive frames, and a missing
else caused recursion into directories that were just deleted.
Removed the free and added an else guard.
Co-authored-by: Cursor <cursoragent@cursor.com>