Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b317f8a

Browse files
committed
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.
1 parent 1db7070 commit b317f8a

1 file changed

Lines changed: 25 additions & 0 deletions

File tree

Python/getargs.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,31 @@ convertsimple1(arg, p_format, p_va)
712712
break;
713713
}
714714

715+
case 't': /* 8-bit character buffer, read-only access */
716+
{
717+
const char **p = va_arg(*p_va, const char **);
718+
PyBufferProcs *pb = arg->ob_type->tp_as_buffer;
719+
int count;
720+
721+
if ( *format++ != '#' )
722+
return "invalid use of 't' format character";
723+
if ( !PyType_HasFeature(
724+
arg->ob_type,
725+
Py_TPFLAGS_HAVE_GETCHARBUFFER) ||
726+
pb == NULL ||
727+
pb->bf_getcharbuffer == NULL ||
728+
pb->bf_getsegcount == NULL )
729+
return "read-only character buffer";
730+
if ( (*pb->bf_getsegcount)(arg, NULL) != 1 )
731+
return "single-segment read-only buffer";
732+
if ( (count = pb->bf_getcharbuffer(arg, 0, p)) < 0 )
733+
return "(unspecified)";
734+
735+
*va_arg(*p_va, int *) = count;
736+
737+
break;
738+
}
739+
715740

716741
default:
717742
return "impossible<bad format char>";

0 commit comments

Comments
 (0)