aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libpcsxcore/psxbios.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c
index 90c11ae..fc28ff8 100644
--- a/libpcsxcore/psxbios.c
+++ b/libpcsxcore/psxbios.c
@@ -1010,9 +1010,24 @@ void psxBios_realloc() { // 0x38
#endif
a0 = block;
- psxBios_free();
- a0 = size;
- psxBios_malloc();
+ /* If "old_buf" is zero, executes malloc(new_size), and returns r2=new_buf (or 0=failed). */
+ if (block == 0)
+ {
+ psxBios_malloc();
+ }
+ /* Else, if "new_size" is zero, executes free(old_buf), and returns r2=garbage. */
+ else if (size == 0)
+ {
+ psxBios_free();
+ }
+ /* Else, executes malloc(new_size), bcopy(old_buf,new_buf,new_size), and free(old_buf), and returns r2=new_buf (or 0=failed). */
+ /* Note that it is not quite implemented this way here. */
+ else
+ {
+ psxBios_free();
+ a0 = size;
+ psxBios_malloc();
+ }
}