mirror of
https://github.com/python/cpython.git
synced 2025-07-12 13:55:34 +00:00
Implement new format character 't#'. This is like s#, accepting an
object that implements the buffer interface, but requires a buffer that contains 8-bit character data. Greg Stein.
This commit is contained in:
parent
1db7070217
commit
b317f8aa0d
1 changed files with 25 additions and 0 deletions
|
@ -712,6 +712,31 @@ convertsimple1(arg, p_format, p_va)
|
|||
break;
|
||||
}
|
||||
|
||||
case 't': /* 8-bit character buffer, read-only access */
|
||||
{
|
||||
const char **p = va_arg(*p_va, const char **);
|
||||
PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
|
||||
int count;
|
||||
|
||||
if ( *format++ != '#' )
|
||||
return "invalid use of 't' format character";
|
||||
if ( !PyType_HasFeature(
|
||||
arg->ob_type,
|
||||
Py_TPFLAGS_HAVE_GETCHARBUFFER) ||
|
||||
pb == NULL ||
|
||||
pb->bf_getcharbuffer == NULL ||
|
||||
pb->bf_getsegcount == NULL )
|
||||
return "read-only character buffer";
|
||||
if ( (*pb->bf_getsegcount)(arg, NULL) != 1 )
|
||||
return "single-segment read-only buffer";
|
||||
if ( (count = pb->bf_getcharbuffer(arg, 0, p)) < 0 )
|
||||
return "(unspecified)";
|
||||
|
||||
*va_arg(*p_va, int *) = count;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
return "impossible<bad format char>";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue