Remove some usage of strdup
To fix visual c++ warning:
warning C4996: 'strdup': The POSIX name for this item is deprecated.
diff --git a/Doc/Manual/Varargs.html b/Doc/Manual/Varargs.html
index 620f2e5..80e391e 100644
--- a/Doc/Manual/Varargs.html
+++ b/Doc/Manual/Varargs.html
@@ -512,7 +512,7 @@
<pre>
%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 @@
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 @@
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 3ff5d52..7087d42 100644
--- a/Examples/python/multimap/example.i
+++ b/Examples/python/multimap/example.i
@@ -39,12 +39,14 @@
%#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 d809bf1..65ce72f 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