{
PyObject *v;
char *p;
- char *q;
Py_UCS4 ch2;
unsigned int cbAllocated = 3 * size;
unsigned int cbWritten = 0;
if (size == 0)
return v;
- p = q = PyString_AS_STRING(v);
+ p = PyString_AS_STRING(v);
while (i < size) {
Py_UCS4 ch = s[i++];
if (ch < 0x80) {
cbAllocated += 4*10;
if (_PyString_Resize(&v, cbAllocated))
goto onError;
+ p = PyString_AS_STRING(v) + cbWritten;
}
/* combine the two values */
*p++ = (char)(0x80 | ((ch >> 6) & 0x3f));
*p++ = (char)(0x80 | (ch & 0x3f));
} else {
+ if (cbWritten >= (cbAllocated - 4)) {
+ /* Provide enough room for some more large characters. */
+ cbAllocated += 4*10;
+ if (_PyString_Resize(&v, cbAllocated))
+ goto onError;
+ p = PyString_AS_STRING(v) + cbWritten;
+ }
*p++ = 0xf0 | (ch>>18);
*p++ = 0x80 | ((ch>>12) & 0x3f);
*p++ = 0x80 | ((ch>>6) & 0x3f);
}
}
*p = '\0';
- if (_PyString_Resize(&v, p - q))
+ if (_PyString_Resize(&v, cbWritten))
goto onError;
return v;