diff options
author | Guido van Rossum <guido@python.org> | 2007-08-31 13:48:41 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-08-31 13:48:41 (GMT) |
commit | 06b8b027112a491af996d8be25ee79959f8c18dc (patch) | |
tree | b9c0836a86b64eba20815eb74f48dcc4cf38443e /Objects | |
parent | 674e9389e9fdadd622829f4833367ac3b38475b5 (diff) | |
download | cpython-06b8b027112a491af996d8be25ee79959f8c18dc.zip cpython-06b8b027112a491af996d8be25ee79959f8c18dc.tar.gz cpython-06b8b027112a491af996d8be25ee79959f8c18dc.tar.bz2 |
Per Georg's suggestion, get rid of str.decode() (which always raises an
exception) and change bytes.find() to use _getbuffer(), so b"".find("")
will raise TypeError instead of SystemError.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/bytesobject.c | 25 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 19 |
2 files changed, 9 insertions, 35 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index ec37928..930b761 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -1067,32 +1067,25 @@ Py_LOCAL_INLINE(Py_ssize_t) bytes_find_internal(PyBytesObject *self, PyObject *args, int dir) { PyObject *subobj; - const char *sub; - Py_ssize_t sub_len; + PyBuffer subbuf; Py_ssize_t start=0, end=PY_SSIZE_T_MAX; + Py_ssize_t res; if (!PyArg_ParseTuple(args, "O|O&O&:find/rfind/index/rindex", &subobj, _PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end)) return -2; - if (PyBytes_Check(subobj)) { - sub = PyBytes_AS_STRING(subobj); - sub_len = PyBytes_GET_SIZE(subobj); - } - /* XXX --> use the modern buffer interface */ - else if (PyObject_AsCharBuffer(subobj, &sub, &sub_len)) { - /* XXX - the "expected a character buffer object" is pretty - confusing for a non-expert. remap to something else ? */ + if (_getbuffer(subobj, &subbuf) < 0) return -2; - } - if (dir > 0) - return stringlib_find_slice( + res = stringlib_find_slice( PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), - sub, sub_len, start, end); + subbuf.buf, subbuf.len, start, end); else - return stringlib_rfind_slice( + res = stringlib_rfind_slice( PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), - sub, sub_len, start, end); + subbuf.buf, subbuf.len, start, end); + PyObject_ReleaseBuffer(subobj, &subbuf); + return res; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index e9ce08c..680ed5f 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6462,23 +6462,6 @@ unicode_encode(PyUnicodeObject *self, PyObject *args) return NULL; } -PyDoc_STRVAR(decode__doc__, -"S.decode([encoding[,errors]]) -> string or unicode\n\ -\n\ -Decodes S using the codec registered for encoding. encoding defaults\n\ -to the default encoding. errors may be given to set a different error\n\ -handling scheme. Default is 'strict' meaning that encoding errors raise\n\ -a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n\ -as well as any other name registerd with codecs.register_error that is\n\ -able to handle UnicodeDecodeErrors."); - -static PyObject * -unicode_decode(PyUnicodeObject *self, PyObject *args) -{ - PyErr_Format(PyExc_TypeError, "decoding str is not supported"); - return NULL; -} - PyDoc_STRVAR(expandtabs__doc__, "S.expandtabs([tabsize]) -> unicode\n\ \n\ @@ -7997,8 +7980,6 @@ static PyMethodDef unicode_methods[] = { {"ljust", (PyCFunction) unicode_ljust, METH_VARARGS, ljust__doc__}, {"lower", (PyCFunction) unicode_lower, METH_NOARGS, lower__doc__}, {"lstrip", (PyCFunction) unicode_lstrip, METH_VARARGS, lstrip__doc__}, - {"decode", (PyCFunction) unicode_decode, METH_VARARGS, decode__doc__}, -/* {"maketrans", (PyCFunction) unicode_maketrans, METH_VARARGS, maketrans__doc__}, */ {"rfind", (PyCFunction) unicode_rfind, METH_VARARGS, rfind__doc__}, {"rindex", (PyCFunction) unicode_rindex, METH_VARARGS, rindex__doc__}, {"rjust", (PyCFunction) unicode_rjust, METH_VARARGS, rjust__doc__}, |