Mercurial > cpython-lru_cache-weakref
diff Objects/bytesobject.c @ 43150:1bb63a32a6c8
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.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Fri, 31 Aug 2007 13:48:41 +0000 |
| parents | ac2d5d346252 |
| children | 282e2d0c2937 |
line wrap: on
line diff
--- a/Objects/bytesobject.c Fri Aug 31 13:06:44 2007 +0000 +++ b/Objects/bytesobject.c Fri Aug 31 13:48:41 2007 +0000 @@ -1067,32 +1067,25 @@ 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; }
