Relax _PyBytesWriter API

Don't require _PyBytesWriter pointer to be a "char *". Same change for
_PyBytesWriter_WriteBytes() parameter.

For example, binascii uses "unsigned char*".
This commit is contained in:
Victor Stinner 2015-10-12 13:12:54 +02:00
parent b031eaee3b
commit c29e29bed1
2 changed files with 14 additions and 15 deletions

View File

@ -156,7 +156,7 @@ PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
Return a bytes object. Return a bytes object.
Raise an exception and return NULL on error. */ Raise an exception and return NULL on error. */
PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer, PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
char *str); void *str);
/* Deallocate memory of a writer (clear its internal buffer). */ /* Deallocate memory of a writer (clear its internal buffer). */
PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer); PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
@ -164,22 +164,22 @@ PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
/* Allocate the buffer to write size bytes. /* Allocate the buffer to write size bytes.
Return the pointer to the beginning of buffer data. Return the pointer to the beginning of buffer data.
Raise an exception and return NULL on error. */ Raise an exception and return NULL on error. */
PyAPI_FUNC(char*) _PyBytesWriter_Alloc(_PyBytesWriter *writer, PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
Py_ssize_t size); Py_ssize_t size);
/* Add *size* bytes to the buffer. /* Add *size* bytes to the buffer.
str is the current pointer inside the buffer. str is the current pointer inside the buffer.
Return the updated current pointer inside the buffer. Return the updated current pointer inside the buffer.
Raise an exception and return NULL on error. */ Raise an exception and return NULL on error. */
PyAPI_FUNC(char*) _PyBytesWriter_Prepare(_PyBytesWriter *writer, PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
char *str, void *str,
Py_ssize_t size); Py_ssize_t size);
/* Write bytes. /* Write bytes.
Raise an exception and return NULL on error. */ Raise an exception and return NULL on error. */
PyAPI_FUNC(char*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
char *str, void *str,
char *bytes, const void *bytes,
Py_ssize_t size); Py_ssize_t size);
#endif /* Py_LIMITED_API */ #endif /* Py_LIMITED_API */

View File

@ -3923,8 +3923,8 @@ _PyBytesWriter_CheckConsistency(_PyBytesWriter *writer, char *str)
#endif #endif
} }
char* void*
_PyBytesWriter_Prepare(_PyBytesWriter *writer, char *str, Py_ssize_t size) _PyBytesWriter_Prepare(_PyBytesWriter *writer, void *str, Py_ssize_t size)
{ {
Py_ssize_t allocated, pos; Py_ssize_t allocated, pos;
@ -3992,7 +3992,7 @@ _PyBytesWriter_Prepare(_PyBytesWriter *writer, char *str, Py_ssize_t size)
/* Allocate the buffer to write size bytes. /* Allocate the buffer to write size bytes.
Return the pointer to the beginning of buffer data. Return the pointer to the beginning of buffer data.
Raise an exception and return NULL on error. */ Raise an exception and return NULL on error. */
char* void*
_PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size) _PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size)
{ {
/* ensure that _PyBytesWriter_Alloc() is only called once */ /* ensure that _PyBytesWriter_Alloc() is only called once */
@ -4011,7 +4011,7 @@ _PyBytesWriter_Alloc(_PyBytesWriter *writer, Py_ssize_t size)
} }
PyObject * PyObject *
_PyBytesWriter_Finish(_PyBytesWriter *writer, char *str) _PyBytesWriter_Finish(_PyBytesWriter *writer, void *str)
{ {
Py_ssize_t pos; Py_ssize_t pos;
PyObject *result; PyObject *result;
@ -4033,13 +4033,12 @@ _PyBytesWriter_Finish(_PyBytesWriter *writer, char *str)
else { else {
result = PyBytes_FromStringAndSize(writer->small_buffer, pos); result = PyBytes_FromStringAndSize(writer->small_buffer, pos);
} }
return result; return result;
} }
char* void*
_PyBytesWriter_WriteBytes(_PyBytesWriter *writer, char *str, _PyBytesWriter_WriteBytes(_PyBytesWriter *writer, void *str,
char *bytes, Py_ssize_t size) const void *bytes, Py_ssize_t size)
{ {
str = _PyBytesWriter_Prepare(writer, str, size); str = _PyBytesWriter_Prepare(writer, str, size);
if (str == NULL) if (str == NULL)