Greg Stein: Implement the new bf_getcharbuffer function, indicating
that (as far as the data type is concerned!) this is character data.
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 648e6e2..1f1a41b 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -465,7 +465,7 @@
 {
 	if ( index != 0 ) {
 		PyErr_SetString(PyExc_SystemError,
-				"Accessing non-existent string segment");
+				"accessing non-existent string segment");
 		return -1;
 	}
 	*ptr = (void *)self->ob_sval;
@@ -493,6 +493,21 @@
 	return 1;
 }
 
+static int
+string_buffer_getcharbuf(self, index, ptr)
+	PyStringObject *self;
+	int index;
+	const char **ptr;
+{
+	if ( index != 0 ) {
+		PyErr_SetString(PyExc_SystemError,
+				"accessing non-existent string segment");
+		return -1;
+	}
+	*ptr = self->ob_sval;
+	return self->ob_size;
+}
+
 static PySequenceMethods string_as_sequence = {
 	(inquiry)string_length, /*sq_length*/
 	(binaryfunc)string_concat, /*sq_concat*/
@@ -507,6 +522,7 @@
 	(getreadbufferproc)string_buffer_getreadbuf,
 	(getwritebufferproc)string_buffer_getwritebuf,
 	(getsegcountproc)string_buffer_getsegcount,
+	(getcharbufferproc)string_buffer_getcharbuf,
 };
 
 PyTypeObject PyString_Type = {
@@ -530,7 +546,7 @@
 	0,		/*tp_getattro*/
 	0,		/*tp_setattro*/
 	&string_as_buffer,	/*tp_as_buffer*/
-	0,		/*tp_xxx4*/
+	Py_TPFLAGS_DEFAULT,	/*tp_flags*/
 	0,		/*tp_doc*/
 };