SDL: os2, geniconv: replaced many uses of libc calls with SDL_ counterparts.

From c4bac66b74fe7486f03f3e2e7fb36514b4ae25b8 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Mon, 18 Oct 2021 14:11:20 +0300
Subject: [PATCH] os2, geniconv: replaced many uses of libc calls with SDL_
 counterparts.

FIXME: figure out a way to handle errno checks properly.
---
 src/core/os2/geniconv/makefile   |  2 +-
 src/core/os2/geniconv/os2cp.c    | 30 +++++++++++++++++---------
 src/core/os2/geniconv/os2iconv.c | 37 +++++++++++++++++++++-----------
 src/core/os2/geniconv/sys2utf8.c | 16 ++++++++++----
 4 files changed, 57 insertions(+), 28 deletions(-)

diff --git a/src/core/os2/geniconv/makefile b/src/core/os2/geniconv/makefile
index 7dffd30c33..566c13d296 100644
--- a/src/core/os2/geniconv/makefile
+++ b/src/core/os2/geniconv/makefile
@@ -11,7 +11,7 @@ LIBFILE = geniconv.lib
 
 all: $(LIBFILE) test.exe .symbolic
 
-CFLAGS = -I$(%WATCOM)/h/os2 -I$(%WATCOM)/h -I. -bt=os2 -q -d0 -w2
+CFLAGS = -I$(%WATCOM)/h/os2 -I$(%WATCOM)/h -I. -bt=os2 -q -d0 -w2 -DGENICONV_STANDALONE=1
 
 SRCS = geniconv.c os2cp.c os2iconv.c
 SRCS+= sys2utf8.c
diff --git a/src/core/os2/geniconv/os2cp.c b/src/core/os2/geniconv/os2cp.c
index 3566f68f50..3e571f8988 100644
--- a/src/core/os2/geniconv/os2cp.c
+++ b/src/core/os2/geniconv/os2cp.c
@@ -22,11 +22,21 @@
 #define INCL_DOSNLS
 #define INCL_DOSERRORS
 #include <os2.h>
-#include <string.h>
-#include <ctype.h>
 
 #include "os2cp.h"
 
+#ifndef GENICONV_STANDALONE
+#include "../../../SDL_internal.h"
+#else
+#include <string.h>
+#include <ctype.h>
+#define SDL_isspace isspace
+#define SDL_strchr strchr
+#define SDL_memcpy memcpy
+#define SDL_strupr strupr
+#define SDL_strcmp strcmp
+#endif
+
 typedef struct _CP2NAME {
   ULONG ulCode;
   PSZ  pszName;
@@ -354,28 +364,28 @@ unsigned long os2cpFromName(char *cp)
         return (DosQueryCp(sizeof(aulCP), aulCP, &cCP) != NO_ERROR)? 0 : aulCP[0];
     }
 
-    while (isspace(*cp))
+    while (SDL_isspace(*cp))
         cp++;
 
-    pcEnd = strchr(cp, ' ');
+    pcEnd = SDL_strchr(cp, ' ');
     if (pcEnd == NULL)
-        pcEnd = strchr(cp, '\0');
+        pcEnd = SDL_strchr(cp, '\0');
 
     ulNext = pcEnd - cp;
     if (ulNext >= sizeof(acBuf))
         return 0;
 
-    memcpy(acBuf, cp, ulNext);
+    SDL_memcpy(acBuf, cp, ulNext);
     acBuf[ulNext] = '\0';
-    strupr(acBuf);
+    SDL_strupr(acBuf);
 
-    lCmp = strcmp(aName2CP[0].pszName, acBuf);
+    lCmp = SDL_strcmp(aName2CP[0].pszName, acBuf);
     if (lCmp > 0)
         return 0;
     else if (lCmp == 0)
         return aName2CP[0].ulCode;
 
-    lCmp = strcmp(aName2CP[ulHi].pszName, acBuf);
+    lCmp = SDL_strcmp(aName2CP[ulHi].pszName, acBuf);
     if (lCmp < 0)
         return 0;
     else if (lCmp == 0)
@@ -384,7 +394,7 @@ unsigned long os2cpFromName(char *cp)
     while ((ulHi - ulLo) > 1) {
         ulNext = (ulLo + ulHi) / 2;
 
-        lCmp = strcmp(aName2CP[ulNext].pszName, acBuf);
+        lCmp = SDL_strcmp(aName2CP[ulNext].pszName, acBuf);
         if (lCmp < 0)
             ulLo = ulNext;
         else if (lCmp > 0)
diff --git a/src/core/os2/geniconv/os2iconv.c b/src/core/os2/geniconv/os2iconv.c
index c48aa0ce46..2aed47f053 100644
--- a/src/core/os2/geniconv/os2iconv.c
+++ b/src/core/os2/geniconv/os2iconv.c
@@ -31,19 +31,30 @@
 #define _ULS_CALLCONV_
 #define CALLCONV _System
 #include <uconv.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
 #ifdef ICONV_THREAD_SAFE
 #define INCL_DOSSEMAPHORES
 #define INCL_DOSERRORS
 #include <os2.h>
 #endif
+
 #include "os2cp.h"
 
+#ifndef GENICONV_STANDALONE
+#include "../../../SDL_internal.h"
+#else
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #if !defined(min)
 #define min(a, b) (((a) < (b)) ? (a) : (b))
 #endif
+#define SDL_min   min
+#define SDL_strcasecmp stricmp
+#define SDL_snprintf _snprintf
+#define SDL_malloc malloc
+#define SDL_free free
+#define SDL_memcpy memcpy
+#endif
 
 #define MAX_CP_NAME_LEN 64
 
@@ -82,7 +93,7 @@ static int uconv_open(const char *code, UconvObject *uobj)
 {
     int rc;
 
-    if (!stricmp(code, "UTF-16")) {
+    if (!SDL_strcasecmp(code, "UTF-16")) {
         *uobj = NULL;
         return ULS_SUCCESS;
     }
@@ -92,7 +103,7 @@ static int uconv_open(const char *code, UconvObject *uobj)
         unsigned long cp = os2cpFromName((char *)code);
         char cp_name[16];
 
-        if (cp != 0 && _snprintf(cp_name, sizeof(cp_name), "IBM-%u", cp) > 0)
+        if (cp != 0 && SDL_snprintf(cp_name, sizeof(cp_name), "IBM-%u", cp) > 0)
             rc = _createUconvObj(cp_name, uobj);
     }
 
@@ -113,7 +124,7 @@ extern iconv_t _System os2_iconv_open(const char* tocode, const char* fromcode)
     if (fromcode == NULL)
         fromcode = "";
 
-    if (stricmp(tocode, fromcode) != 0) {
+    if (SDL_strcasecmp(tocode, fromcode) != 0) {
         rc = uconv_open(fromcode, &uo_fromcode);
         if (rc != ULS_SUCCESS) {
             errno = EINVAL;
@@ -131,7 +142,7 @@ extern iconv_t _System os2_iconv_open(const char* tocode, const char* fromcode)
         uo_fromcode = NULL;
     }
 
-    iuobj = (iuconv_obj *) malloc(sizeof(iuconv_obj));
+    iuobj = (iuconv_obj *) SDL_malloc(sizeof(iuconv_obj));
     iuobj->uo_tocode = uo_tocode;
     iuobj->uo_fromcode = uo_fromcode;
     iuobj->buf_len = 0;
@@ -158,8 +169,8 @@ extern size_t _System os2_iconv(iconv_t cd, char* * inbuf,
     size_t ret = (size_t)(-1);
 
     if (uo_tocode == NULL && uo_fromcode == NULL) {
-        uc_buf_len = min(*inbytesleft, *outbytesleft);
-        memcpy(*outbuf, *inbuf, uc_buf_len);
+        uc_buf_len = SDL_min(*inbytesleft, *outbytesleft);
+        SDL_memcpy(*outbuf, *inbuf, uc_buf_len);
         *inbytesleft -= uc_buf_len;
         *outbytesleft -= uc_buf_len;
         outbuf += uc_buf_len;
@@ -174,9 +185,9 @@ extern size_t _System os2_iconv(iconv_t cd, char* * inbuf,
     if (uo_tocode && uo_fromcode &&
         (((iuconv_obj *)cd)->buf_len >> 1) < *inbytesleft) {
         if (((iuconv_obj *)cd)->buf != NULL)
-            free(((iuconv_obj *)cd)->buf);
+            SDL_free(((iuconv_obj *)cd)->buf);
         ((iuconv_obj *)cd)->buf_len = *inbytesleft << 1;
-        ((iuconv_obj *)cd)->buf = (UniChar *)malloc(((iuconv_obj *)cd)->buf_len);
+        ((iuconv_obj *)cd)->buf = (UniChar *)SDL_malloc(((iuconv_obj *)cd)->buf_len);
     }
 
     if (uo_fromcode) {
@@ -260,9 +271,9 @@ int _System os2_iconv_close(iconv_t cd)
         UniFreeUconvObject(((iuconv_obj *)cd)->uo_fromcode);
 
     if (((iuconv_obj *)cd)->buf != NULL)
-        free(((iuconv_obj *)cd)->buf);
+        SDL_free(((iuconv_obj *)cd)->buf);
 
-    free(cd);
+    SDL_free(cd);
 
     return 0;
 }
diff --git a/src/core/os2/geniconv/sys2utf8.c b/src/core/os2/geniconv/sys2utf8.c
index c3f4883d53..fb9643045f 100644
--- a/src/core/os2/geniconv/sys2utf8.c
+++ b/src/core/os2/geniconv/sys2utf8.c
@@ -20,7 +20,15 @@
 */
 
 #include "geniconv.h"
+
+#ifndef GENICONV_STANDALONE
+#include "../../../SDL_internal.h"
+#else
 #include <stdlib.h>
+#define SDL_malloc malloc
+#define SDL_realloc realloc
+#define SDL_free free
+#endif
 
 int StrUTF8(int fToUTF8, char *pcDst, int cbDst, char *pcSrc, int cbSrc)
 {
@@ -83,25 +91,25 @@ int StrUTF8(int fToUTF8, char *pcDst, int cbDst, char *pcSrc, int cbSrc)
 char *StrUTF8New(int fToUTF8, char *pcStr, int cbStr)
 {
     int   cbNewStr = (((cbStr > 4)? cbStr : 4) + 1) * 2;
-    char *pszNewStr = (char *) malloc(cbNewStr);
+    char *pszNewStr = (char *) SDL_malloc(cbNewStr);
 
     if (pszNewStr == NULL)
         return NULL;
 
     cbNewStr = StrUTF8(fToUTF8, pszNewStr, cbNewStr, pcStr, cbStr);
     if (cbNewStr != -1) {
-        pcStr = (char *) realloc(pszNewStr, cbNewStr + ((fToUTF8)? 1 : sizeof(short)));
+        pcStr = (char *) SDL_realloc(pszNewStr, cbNewStr + ((fToUTF8)? 1 : sizeof(short)));
         if (pcStr)
             return pcStr;
     }
 
-    free(pszNewStr);
+    SDL_free(pszNewStr);
     return NULL;
 }
 
 void StrUTF8Free(char *pszStr)
 {
-    free(pszStr);
+    SDL_free(pszStr);
 }
 
 /* vi: set ts=4 sw=4 expandtab: */