SDL: SDL_iconv_string: simplify recomputation of outbuf and outbytesleft (9dcfc)

From 9dcfc308ef71731d8df35562664a6ac5921fa0fa Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Fri, 10 May 2024 18:56:24 +0300
Subject: [PATCH] SDL_iconv_string: simplify recomputation of outbuf and
 outbytesleft

Noticed this in SDL-1.2 where gcc-13 emits a -Wuse-after-free warning.
No such warning in SDL2 and SDL3, because unlike SDL1.2, SDL_realloc()
is not a macro expanding to libc realloc(). It warns, of course, if
SDL_realloc() is replaced with plain realloc():

src/stdlib/SDL_iconv.c: In function 'SDL_iconv_string_REAL':
src/stdlib/SDL_iconv.c:824:39: warning: pointer 'oldstring' may be used after 'realloc' [-Wuse-after-free]
  824 |             outbuf = string + (outbuf - oldstring);
      |                               ~~~~~~~~^~~~~~~~~~~~
src/stdlib/SDL_iconv.c:818:30: note: call to 'realloc' here
  818 |             string = (char *)realloc(string, stringsize + sizeof(Uint32));
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(cherry picked from commit 22056268168fa62bb66af62ef648b7030c9522d9)
(cherry picked from commit b6899f82fb35896c94d831a5eff3ec99dd6cd45e)
---
 src/stdlib/SDL_iconv.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/stdlib/SDL_iconv.c b/src/stdlib/SDL_iconv.c
index 2ab748c98f528..416e199b76cf2 100644
--- a/src/stdlib/SDL_iconv.c
+++ b/src/stdlib/SDL_iconv.c
@@ -822,6 +822,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
         switch (retCode) {
         case SDL_ICONV_E2BIG:
         {
+            const ptrdiff_t diff = (ptrdiff_t) (outbuf - string);
             char *oldstring = string;
             stringsize *= 2;
             string = (char *)SDL_realloc(string, stringsize + sizeof(Uint32));
@@ -830,8 +831,8 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
                 SDL_iconv_close(cd);
                 return NULL;
             }
-            outbuf = string + (outbuf - oldstring);
-            outbytesleft = stringsize - (outbuf - string);
+            outbuf = string + diff;
+            outbytesleft = stringsize - diff;
             SDL_memset(outbuf, 0, sizeof(Uint32));
             continue;
         }