cleanup after custom buffer converter

This commit is contained in:
Benjamin Peterson 2014-01-26 10:41:58 -05:00
parent 08673c57f0
commit b62deac9a3
2 changed files with 31 additions and 6 deletions

View File

@ -195,6 +195,11 @@ class ascii_buffer_converter(CConverter):
type = 'Py_buffer' type = 'Py_buffer'
converter = 'ascii_buffer_converter' converter = 'ascii_buffer_converter'
impl_by_reference = True impl_by_reference = True
c_default = "{NULL, NULL}"
def cleanup(self):
name = self.name
return "".join(["if (", name, ".obj)\n PyBuffer_Release(&", name, ");\n"])
[python start generated code]*/ [python start generated code]*/
/*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/ /*[python end generated code: checksum=da39a3ee5e6b4b0d3255bfef95601890afd80709]*/

View File

@ -16,7 +16,7 @@ static PyObject *
binascii_a2b_uu(PyModuleDef *module, PyObject *args) binascii_a2b_uu(PyModuleDef *module, PyObject *args)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
Py_buffer data; Py_buffer data = {NULL, NULL};
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"O&:a2b_uu", "O&:a2b_uu",
@ -25,6 +25,10 @@ binascii_a2b_uu(PyModuleDef *module, PyObject *args)
return_value = binascii_a2b_uu_impl(module, &data); return_value = binascii_a2b_uu_impl(module, &data);
exit: exit:
/* Cleanup for data */
if (data.obj)
PyBuffer_Release(&data);
return return_value; return return_value;
} }
@ -72,7 +76,7 @@ static PyObject *
binascii_a2b_base64(PyModuleDef *module, PyObject *args) binascii_a2b_base64(PyModuleDef *module, PyObject *args)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
Py_buffer data; Py_buffer data = {NULL, NULL};
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"O&:a2b_base64", "O&:a2b_base64",
@ -81,6 +85,10 @@ binascii_a2b_base64(PyModuleDef *module, PyObject *args)
return_value = binascii_a2b_base64_impl(module, &data); return_value = binascii_a2b_base64_impl(module, &data);
exit: exit:
/* Cleanup for data */
if (data.obj)
PyBuffer_Release(&data);
return return_value; return return_value;
} }
@ -128,7 +136,7 @@ static PyObject *
binascii_a2b_hqx(PyModuleDef *module, PyObject *args) binascii_a2b_hqx(PyModuleDef *module, PyObject *args)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
Py_buffer data; Py_buffer data = {NULL, NULL};
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"O&:a2b_hqx", "O&:a2b_hqx",
@ -137,6 +145,10 @@ binascii_a2b_hqx(PyModuleDef *module, PyObject *args)
return_value = binascii_a2b_hqx_impl(module, &data); return_value = binascii_a2b_hqx_impl(module, &data);
exit: exit:
/* Cleanup for data */
if (data.obj)
PyBuffer_Release(&data);
return return_value; return return_value;
} }
@ -350,7 +362,7 @@ static PyObject *
binascii_a2b_hex(PyModuleDef *module, PyObject *args) binascii_a2b_hex(PyModuleDef *module, PyObject *args)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
Py_buffer hexstr; Py_buffer hexstr = {NULL, NULL};
if (!PyArg_ParseTuple(args, if (!PyArg_ParseTuple(args,
"O&:a2b_hex", "O&:a2b_hex",
@ -359,6 +371,10 @@ binascii_a2b_hex(PyModuleDef *module, PyObject *args)
return_value = binascii_a2b_hex_impl(module, &hexstr); return_value = binascii_a2b_hex_impl(module, &hexstr);
exit: exit:
/* Cleanup for hexstr */
if (hexstr.obj)
PyBuffer_Release(&hexstr);
return return_value; return return_value;
} }
@ -377,7 +393,7 @@ binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
{ {
PyObject *return_value = NULL; PyObject *return_value = NULL;
static char *_keywords[] = {"data", "header", NULL}; static char *_keywords[] = {"data", "header", NULL};
Py_buffer data; Py_buffer data = {NULL, NULL};
int header = 0; int header = 0;
if (!PyArg_ParseTupleAndKeywords(args, kwargs, if (!PyArg_ParseTupleAndKeywords(args, kwargs,
@ -387,6 +403,10 @@ binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs)
return_value = binascii_a2b_qp_impl(module, &data, header); return_value = binascii_a2b_qp_impl(module, &data, header);
exit: exit:
/* Cleanup for data */
if (data.obj)
PyBuffer_Release(&data);
return return_value; return return_value;
} }
@ -427,4 +447,4 @@ exit:
return return_value; return return_value;
} }
/*[clinic end generated code: checksum=abe48ca8020fa3ec25e13bd9fa7414f6b3ee2946]*/ /*[clinic end generated code: checksum=8180e5be47a110ae8c89263a7c12a91d80754f60]*/