[Python-Dev] r84430 - in python/branches/py3k: Include/unicodeobject.h Objects/unicodeobject.c

M.-A. Lemburg mal at egenix.com
Thu Sep 2 11:13:22 CEST 2010


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/


More information about the Python-Dev mailing list