mirror of https://github.com/python/cpython
54 lines
1.1 KiB
C
54 lines
1.1 KiB
C
|
#include "parts.h"
|
||
|
#include "util.h"
|
||
|
|
||
|
|
||
|
/* Test _PyBytes_Resize() */
|
||
|
static PyObject *
|
||
|
bytes_resize(PyObject *Py_UNUSED(module), PyObject *args)
|
||
|
{
|
||
|
PyObject *obj;
|
||
|
Py_ssize_t newsize;
|
||
|
int new;
|
||
|
|
||
|
if (!PyArg_ParseTuple(args, "Onp", &obj, &newsize, &new))
|
||
|
return NULL;
|
||
|
|
||
|
NULLABLE(obj);
|
||
|
if (new) {
|
||
|
assert(obj != NULL);
|
||
|
assert(PyBytes_CheckExact(obj));
|
||
|
PyObject *newobj = PyBytes_FromStringAndSize(NULL, PyBytes_Size(obj));
|
||
|
if (newobj == NULL) {
|
||
|
return NULL;
|
||
|
}
|
||
|
memcpy(PyBytes_AsString(newobj), PyBytes_AsString(obj), PyBytes_Size(obj));
|
||
|
obj = newobj;
|
||
|
}
|
||
|
else {
|
||
|
Py_XINCREF(obj);
|
||
|
}
|
||
|
if (_PyBytes_Resize(&obj, newsize) < 0) {
|
||
|
assert(obj == NULL);
|
||
|
}
|
||
|
else {
|
||
|
assert(obj != NULL);
|
||
|
}
|
||
|
return obj;
|
||
|
}
|
||
|
|
||
|
|
||
|
static PyMethodDef test_methods[] = {
|
||
|
{"bytes_resize", bytes_resize, METH_VARARGS},
|
||
|
{NULL},
|
||
|
};
|
||
|
|
||
|
int
|
||
|
_PyTestCapi_Init_Bytes(PyObject *m)
|
||
|
{
|
||
|
if (PyModule_AddFunctions(m, test_methods) < 0) {
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|