diff 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
line wrap: on
line diff
--- a/Python/getargs.c	Thu Oct 08 02:18:52 1998 +0000
+++ b/Python/getargs.c	Thu Oct 08 02:21:21 1998 +0000
@@ -712,6 +712,31 @@
 			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>";