mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +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;
|
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:
|
default:
|
||||||
return "impossible<bad format char>";
|
return "impossible<bad format char>";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue