Mercurial > cpython-lru_cache-weakref
diff Python/getargs.c @ 20371:8ef3e95182c3 legacy-trunk
Undo part of 2.59: 't' case of convertsimple() should not use convertbuffer().
convertbuffer() uses the buffer interface's getreadbuffer(), but 't'
should use getcharbuffer().
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Thu, 11 Oct 2001 14:40:37 +0000 |
| parents | 92d56ae63ed3 |
| children | acc7e3b4d042 |
line wrap: on
line diff
--- a/Python/getargs.c Thu Oct 11 14:09:03 2001 +0000 +++ b/Python/getargs.c Thu Oct 11 14:40:37 2001 +0000 @@ -635,7 +635,6 @@ else { /* any buffer-like object */ char *buf; int count = convertbuffer(arg, p, &buf); - if (count < 0) return converterr(buf, arg, msgbuf); *q = count; @@ -936,7 +935,7 @@ case 't': { /* 8-bit character buffer, read-only access */ const char **p = va_arg(*p_va, const char **); - char *buf; + PyBufferProcs *pb = arg->ob_type->tp_as_buffer; int count; if (*format++ != '#') @@ -944,14 +943,21 @@ "invalid use of 't' format character", arg, msgbuf); if (!PyType_HasFeature(arg->ob_type, - Py_TPFLAGS_HAVE_GETCHARBUFFER)) + Py_TPFLAGS_HAVE_GETCHARBUFFER) || + pb == NULL || pb->bf_getcharbuffer == NULL || + pb->bf_getsegcount == NULL) return converterr( "string or read-only character buffer", arg, msgbuf); - count = convertbuffer(arg, (void **)p, &buf); + if (pb->bf_getsegcount(arg, NULL) != 1) + return converterr( + "string or single-segment read-only buffer", + arg, msgbuf); + + count = pb->bf_getcharbuffer(arg, 0, p); if (count < 0) - return converterr(buf, arg, msgbuf); + return converterr("(unspecified)", arg, msgbuf); *va_arg(*p_va, int *) = count; break; }
