From fd846be18bdaa7dda8f24e01aa24f73568a23a23 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Sat, 7 May 2022 07:09:44 +0100 Subject: [PATCH] Remove some usage of strdup To fix visual c++ warning: warning C4996: 'strdup': The POSIX name for this item is deprecated. --- Doc/Manual/Varargs.html | 8 ++++++-- Examples/python/multimap/example.i | 8 +++++--- Examples/test-suite/python_varargs_typemap.i | 14 +++++++++----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Doc/Manual/Varargs.html b/Doc/Manual/Varargs.html index 620f2e5a0..80e391e49 100644 --- a/Doc/Manual/Varargs.html +++ b/Doc/Manual/Varargs.html @@ -512,7 +512,7 @@ like this:
 %typemap(in) (...)(char *vargs[10]) {
   int i;
-  int argc;
+  Py_ssize_t argc;
   for (i = 0; i < 10; i++) vargs[i] = 0;
   argc = PyTuple_Size(varargs);
   if (argc > 10) {
@@ -523,6 +523,7 @@ like this:
     PyObject *pyobj = PyTuple_GetItem(varargs, i);
     char *str = 0;
 %#if PY_VERSION_HEX>=0x03000000
+    const char *strtmp = 0;
     PyObject *pystr;
     if (!PyUnicode_Check(pyobj)) {
       PyErr_SetString(PyExc_ValueError, "Expected a string");
@@ -532,7 +533,10 @@ like this:
     if (!pystr) {
       SWIG_fail;
     }
-    str = strdup(PyBytes_AsString(pystr));
+    strtmp = PyBytes_AsString(pystr);
+    str = (char *)malloc(strlen(strtmp) + 1);
+    if (str)
+      strcpy(str, strtmp);
     Py_DECREF(pystr);
 %#else  
     if (!PyString_Check(pyobj)) {
diff --git a/Examples/python/multimap/example.i b/Examples/python/multimap/example.i
index 3ff5d52c0..7087d426b 100644
--- a/Examples/python/multimap/example.i
+++ b/Examples/python/multimap/example.i
@@ -39,12 +39,14 @@ extern int    gcd(int x, int y);
 %#if PY_VERSION_HEX >= 0x03000000
     {
       PyObject *utf8str = PyUnicode_AsUTF8String(s);
-      const char *cstr;
+      const char *strtmp = 0;
       if (!utf8str) {
         SWIG_fail;
       }
-      cstr = PyBytes_AsString(utf8str);
-      $2[i] = strdup(cstr);
+      strtmp = PyBytes_AsString(utf8str);
+      $2[i] = (char *)malloc(strlen(strtmp) + 1);
+      if ($2[i])
+        strcpy($2[i], strtmp);
       Py_DECREF(utf8str);
     }
 %#else
diff --git a/Examples/test-suite/python_varargs_typemap.i b/Examples/test-suite/python_varargs_typemap.i
index d809bf1fa..65ce72f43 100644
--- a/Examples/test-suite/python_varargs_typemap.i
+++ b/Examples/test-suite/python_varargs_typemap.i
@@ -17,21 +17,25 @@
     PyObject *pyobj = PyTuple_GetItem(varargs, i);
     char *str = 0;
 %#if PY_VERSION_HEX>=0x03000000
+    const char *strtmp = 0;
     PyObject *pystr;
     if (!PyUnicode_Check(pyobj)) {
-       PyErr_SetString(PyExc_ValueError, "Expected a string");
-       SWIG_fail;
+      PyErr_SetString(PyExc_ValueError, "Expected a string");
+      SWIG_fail;
     }
     pystr = PyUnicode_AsUTF8String(pyobj);
     if (!pystr) {
       SWIG_fail;
     }
-    str = strdup(PyBytes_AsString(pystr));
+    strtmp = PyBytes_AsString(pystr);
+    str = (char *)malloc(strlen(strtmp) + 1);
+    if (str)
+      strcpy(str, strtmp);
     Py_DECREF(pystr);
 %#else  
     if (!PyString_Check(pyobj)) {
-       PyErr_SetString(PyExc_ValueError, "Expected a string");
-       SWIG_fail;
+      PyErr_SetString(PyExc_ValueError, "Expected a string");
+      SWIG_fail;
     }
     str = PyString_AsString(pyobj);
 %#endif