mirror of https://github.com/python/cpython.git
Create PyUnicode_strdup() function
This commit is contained in:
parent
c4eb765fc1
commit
71133ff368
|
@ -220,6 +220,7 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||||
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS2_AsDefaultEncodedString
|
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS2_AsDefaultEncodedString
|
||||||
# define _PyUnicode_Fini _PyUnicodeUCS2_Fini
|
# define _PyUnicode_Fini _PyUnicodeUCS2_Fini
|
||||||
# define _PyUnicode_Init _PyUnicodeUCS2_Init
|
# define _PyUnicode_Init _PyUnicodeUCS2_Init
|
||||||
|
# define PyUnicode_strdup PyUnicodeUCS2_strdup
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -302,7 +303,7 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||||
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS4_AsDefaultEncodedString
|
# define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS4_AsDefaultEncodedString
|
||||||
# define _PyUnicode_Fini _PyUnicodeUCS4_Fini
|
# define _PyUnicode_Fini _PyUnicodeUCS4_Fini
|
||||||
# define _PyUnicode_Init _PyUnicodeUCS4_Init
|
# define _PyUnicode_Init _PyUnicodeUCS4_Init
|
||||||
|
# define PyUnicode_strdup PyUnicodeUCS4_strdup
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1602,6 +1603,14 @@ PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strrchr(
|
||||||
Py_UNICODE c
|
Py_UNICODE c
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Create a copy of a unicode string ending with a nul character. Return NULL
|
||||||
|
and raise a MemoryError exception on memory allocation failure, otherwise
|
||||||
|
return a new allocated buffer (use PyMem_Free() to free the buffer). */
|
||||||
|
|
||||||
|
PyAPI_FUNC(Py_UNICODE*) PyUnicode_strdup(
|
||||||
|
PyObject *unicode
|
||||||
|
);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10014,6 +10014,28 @@ Py_UNICODE_strrchr(const Py_UNICODE *s, Py_UNICODE c)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Py_UNICODE*
|
||||||
|
PyUnicode_strdup(PyObject *object)
|
||||||
|
{
|
||||||
|
PyUnicodeObject *unicode = (PyUnicodeObject *)object;
|
||||||
|
Py_UNICODE *copy;
|
||||||
|
Py_ssize_t size;
|
||||||
|
|
||||||
|
/* Ensure we won't overflow the size. */
|
||||||
|
if (PyUnicode_GET_SIZE(unicode) > ((PY_SSIZE_T_MAX / sizeof(Py_UNICODE)) - 1)) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
size = PyUnicode_GET_SIZE(unicode) + 1; /* copy the nul character */
|
||||||
|
size *= sizeof(Py_UNICODE);
|
||||||
|
copy = PyMem_Malloc(size);
|
||||||
|
if (copy == NULL) {
|
||||||
|
PyErr_NoMemory();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
memcpy(copy, PyUnicode_AS_UNICODE(unicode), size);
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue