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 }