From: gameblabla Date: Thu, 18 Jul 2019 00:01:34 +0000 (+0200) Subject: psxbios: Better realloc implementation X-Git-Tag: r23~156^2~40 X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=391b1d5b1fe4f68676835058af609535feb798a9;hp=f42e1e9003d052bcfcadd5955d2396f11ea0f3c5;p=pcsx_rearmed.git psxbios: Better realloc implementation This should be closer to the real behaviour as described by nocash. It doesn't do any bcopy though but it shouldn't be too much different other than that. --- diff --git a/libpcsxcore/psxbios.c b/libpcsxcore/psxbios.c index 90c11aeb..fc28ff86 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(); + } }