| #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; |
| } |