Georg Brandl wrote: > Hi Victor, > > 1. This function and PyUnicode_strcat are missing documentation. > > 2. Are you sure they need to be public APIs? What are they going to > be used for? (I'm not sure myself, but I think we usually have a > short notice here when new C APIs are added.)
If you want to make this a public API function, it also needs to be renamed to fit the rest of the API. I'd suggest PyUnicode_AsUnicodeCopy() which then corresponds to PyUnicode_FromUnicode(), but I'm not sure whether we should have such a public API in the first place. > Georg > > Am 02.09.2010 01:43, schrieb victor.stinner: >> Author: victor.stinner >> Date: Thu Sep 2 01:43:53 2010 >> New Revision: 84430 >> >> Log: >> Create PyUnicode_strdup() function >> >> Modified: >> python/branches/py3k/Include/unicodeobject.h >> python/branches/py3k/Objects/unicodeobject.c >> >> Modified: python/branches/py3k/Include/unicodeobject.h >> ============================================================================== >> --- python/branches/py3k/Include/unicodeobject.h (original) >> +++ python/branches/py3k/Include/unicodeobject.h Thu Sep 2 01:43:53 2010 >> @@ -220,6 +220,7 @@ >> # define _PyUnicode_AsDefaultEncodedString >> _PyUnicodeUCS2_AsDefaultEncodedString >> # define _PyUnicode_Fini _PyUnicodeUCS2_Fini >> # define _PyUnicode_Init _PyUnicodeUCS2_Init >> +# define PyUnicode_strdup PyUnicodeUCS2_strdup >> >> #else >> >> @@ -302,7 +303,7 @@ >> # define _PyUnicode_AsDefaultEncodedString >> _PyUnicodeUCS4_AsDefaultEncodedString >> # define _PyUnicode_Fini _PyUnicodeUCS4_Fini >> # define _PyUnicode_Init _PyUnicodeUCS4_Init >> - >> +# define PyUnicode_strdup PyUnicodeUCS4_strdup >> >> #endif >> >> @@ -1602,6 +1603,14 @@ >> 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 >> } >> #endif >> >> Modified: python/branches/py3k/Objects/unicodeobject.c >> ============================================================================== >> --- python/branches/py3k/Objects/unicodeobject.c (original) >> +++ python/branches/py3k/Objects/unicodeobject.c Thu Sep 2 01:43:53 2010 >> @@ -10014,6 +10014,28 @@ >> 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 >> } > > -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Sep 02 2010) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2010-08-19: Released mxODBC 3.1.0 http://python.egenix.com/ 2010-09-15: DZUG Tagung, Dresden, Germany 12 days to go ::: Try our new mxODBC.Connect Python Database Interface for free ! :::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 http://www.egenix.com/company/contact/ _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com