static PyObject *
raw_unicode_escape(PyObject *obj)
{
- char *p;
- Py_ssize_t i, size;
- const void *data;
- int kind;
- _PyBytesWriter writer;
+ Py_ssize_t size = PyUnicode_GET_LENGTH(obj);
+ const void *data = PyUnicode_DATA(obj);
+ int kind = PyUnicode_KIND(obj);
- _PyBytesWriter_Init(&writer);
-
- size = PyUnicode_GET_LENGTH(obj);
- data = PyUnicode_DATA(obj);
- kind = PyUnicode_KIND(obj);
-
- p = _PyBytesWriter_Alloc(&writer, size);
- if (p == NULL)
- goto error;
- writer.overallocate = 1;
+ Py_ssize_t alloc = size;
+ PyBytesWriter *writer = PyBytesWriter_Create(alloc);
+ if (writer == NULL) {
+ return NULL;
+ }
+ char *p = PyBytesWriter_GetData(writer);
- for (i=0; i < size; i++) {
+ for (Py_ssize_t i=0; i < size; i++) {
Py_UCS4 ch = PyUnicode_READ(kind, data, i);
/* Map 32-bit characters to '\Uxxxxxxxx' */
if (ch >= 0x10000) {
/* -1: subtract 1 preallocated byte */
- p = _PyBytesWriter_Prepare(&writer, p, 10-1);
- if (p == NULL)
+ p = PyBytesWriter_GrowAndUpdatePointer(writer, 10-1, p);
+ if (p == NULL) {
goto error;
+ }
*p++ = '\\';
*p++ = 'U';
ch == 0x1a)
{
/* -1: subtract 1 preallocated byte */
- p = _PyBytesWriter_Prepare(&writer, p, 6-1);
- if (p == NULL)
+ p = PyBytesWriter_GrowAndUpdatePointer(writer, 6-1, p);
+ if (p == NULL) {
goto error;
+ }
*p++ = '\\';
*p++ = 'u';
*p++ = (char) ch;
}
- return _PyBytesWriter_Finish(&writer, p);
+ return PyBytesWriter_FinishWithPointer(writer, p);
error:
- _PyBytesWriter_Dealloc(&writer);
+ PyBytesWriter_Discard(writer);
return NULL;
}
static PyObject *
s_pack(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
{
- char *buf;
PyStructObject *soself;
_structmodulestate *state = get_struct_state_structinst(self);
}
/* Allocate a new string */
- _PyBytesWriter writer;
- _PyBytesWriter_Init(&writer);
- buf = _PyBytesWriter_Alloc(&writer, soself->s_size);
- if (buf == NULL) {
- _PyBytesWriter_Dealloc(&writer);
+ PyBytesWriter *writer = PyBytesWriter_Create(soself->s_size);
+ if (writer == NULL) {
return NULL;
}
+ char *buf = PyBytesWriter_GetData(writer);
/* Call the guts */
if ( s_pack_internal(soself, args, 0, buf, state) != 0 ) {
- _PyBytesWriter_Dealloc(&writer);
+ PyBytesWriter_Discard(writer);
return NULL;
}
- return _PyBytesWriter_Finish(&writer, buf + soself->s_size);
+ return PyBytesWriter_FinishWithSize(writer, soself->s_size);
}
PyDoc_STRVAR(s_pack_into__doc__,