Mercurial > cpython-lru_cache-weakref
comparison Python/getargs.c @ 9306:79439e4e9976 legacy-trunk
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.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 08 Oct 1998 02:21:21 +0000 |
| parents | d437b6683e24 |
| children | 98e37347378b |
comparison
equal
deleted
inserted
replaced
| 9305:083efa076366 | 9306:79439e4e9976 |
|---|---|
| 710 format++; | 710 format++; |
| 711 } | 711 } |
| 712 break; | 712 break; |
| 713 } | 713 } |
| 714 | 714 |
| 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 | |
| 715 | 740 |
| 716 default: | 741 default: |
| 717 return "impossible<bad format char>"; | 742 return "impossible<bad format char>"; |
| 718 | 743 |
| 719 } | 744 } |
