diff --git a/CHANGES b/CHANGES index b9592e7ea..becdd5edd 100644 --- a/CHANGES +++ b/CHANGES @@ -35,6 +35,7 @@ Misc: - GBA: Detect hardware for Pokémon FireRed ROM hacks - CMake: Fix CPack dependencies for libpng 1.6 - Qt: Allow overrides to be saved before a game is loaded + - VFS: Make VFile.truncate work growing files on PSV (fixes mgba.io/i/885) 0.6.0: (2017-07-16) Features: diff --git a/src/platform/psp2/sce-vfs.c b/src/platform/psp2/sce-vfs.c index 4b6fdce52..284479660 100644 --- a/src/platform/psp2/sce-vfs.c +++ b/src/platform/psp2/sce-vfs.c @@ -120,7 +120,20 @@ static void _vfsceUnmap(struct VFile* vf, void* memory, size_t size) { static void _vfsceTruncate(struct VFile* vf, size_t size) { struct VFileSce* vfsce = (struct VFileSce*) vf; - // TODO + SceOff cur = sceIoLseek(vfsce->fd, 0, SEEK_CUR); + SceOff end = sceIoLseek(vfsce->fd, 0, SEEK_END); + if (end < size) { + uint8_t buffer[2048] = {}; + size_t write = size - end; + while (write >= sizeof(buffer)) { + sceIoWrite(vfsce->fd, buffer, sizeof(buffer)); + write -= sizeof(buffer); + } + if (write) { + sceIoWrite(vfsce->fd, buffer, write); + } + } // TODO: Else + sceIoLseek(vfsce->fd, cur, SEEK_SET); } ssize_t _vfsceSize(struct VFile* vf) {