summaryrefslogtreecommitdiffstats
path: root/Objects/bytes_methods.c
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2015-02-02 23:25:42 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2015-02-02 23:25:42 (GMT)
commit3dd3e26680110b3eeadedc9c8457dfe1db2b913c (patch)
tree584a98eda6e93033ddaf313b95826e6e3cd887cb /Objects/bytes_methods.c
parent0b2a6dc42b9bf02408764133a8dfcd843bbd0e66 (diff)
parent4fdb68491e8b2d044c9173babf625bbb815c39d1 (diff)
downloadcpython-3dd3e26680110b3eeadedc9c8457dfe1db2b913c.zip
cpython-3dd3e26680110b3eeadedc9c8457dfe1db2b913c.tar.gz
cpython-3dd3e26680110b3eeadedc9c8457dfe1db2b913c.tar.bz2
Issue #22896: Avoid to use PyObject_AsCharBuffer(), PyObject_AsReadBuffer()
and PyObject_AsWriteBuffer().
Diffstat (limited to 'Objects/bytes_methods.c')
-rw-r--r--Objects/bytes_methods.c46
1 files changed, 7 insertions, 39 deletions
diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c
index 1cf20c9..a299915 100644
--- a/Objects/bytes_methods.c
+++ b/Objects/bytes_methods.c
@@ -363,59 +363,27 @@ for use in the bytes or bytearray translate method where each byte\n\
in frm is mapped to the byte at the same position in to.\n\
The bytes objects frm and to must be of the same length.");
-static Py_ssize_t
-_getbuffer(PyObject *obj, Py_buffer *view)
-{
- PyBufferProcs *buffer = Py_TYPE(obj)->tp_as_buffer;
-
- if (buffer == NULL || buffer->bf_getbuffer == NULL)
- {
- PyErr_Format(PyExc_TypeError,
- "a bytes-like object is required, not '%.100s'",
- Py_TYPE(obj)->tp_name);
- return -1;
- }
-
- if (buffer->bf_getbuffer(obj, view, PyBUF_SIMPLE) < 0)
- return -1;
- return view->len;
-}
-
PyObject *
-_Py_bytes_maketrans(PyObject *frm, PyObject *to)
+_Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to)
{
PyObject *res = NULL;
- Py_buffer bfrm, bto;
Py_ssize_t i;
char *p;
- bfrm.len = -1;
- bto.len = -1;
-
- if (_getbuffer(frm, &bfrm) < 0)
- return NULL;
- if (_getbuffer(to, &bto) < 0)
- goto done;
- if (bfrm.len != bto.len) {
+ if (frm->len != to->len) {
PyErr_Format(PyExc_ValueError,
"maketrans arguments must have same length");
- goto done;
+ return NULL;
}
res = PyBytes_FromStringAndSize(NULL, 256);
- if (!res) {
- goto done;
- }
+ if (!res)
+ return NULL;
p = PyBytes_AS_STRING(res);
for (i = 0; i < 256; i++)
p[i] = (char) i;
- for (i = 0; i < bfrm.len; i++) {
- p[((unsigned char *)bfrm.buf)[i]] = ((char *)bto.buf)[i];
+ for (i = 0; i < frm->len; i++) {
+ p[((unsigned char *)frm->buf)[i]] = ((char *)to->buf)[i];
}
-done:
- if (bfrm.len != -1)
- PyBuffer_Release(&bfrm);
- if (bto.len != -1)
- PyBuffer_Release(&bto);
return res;
}