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/bufferobject.c b/Objects/bufferobject.c
index 9be1e43..091688d 100644
--- a/Objects/bufferobject.c
+++ b/Objects/bufferobject.c
@@ -523,7 +523,7 @@
 {
 	if ( idx != 0 ) {
 		PyErr_SetString(PyExc_SystemError,
-				"Accessing non-existent buffer segment");
+				"accessing non-existent buffer segment");
 		return -1;
 	}
 	*pp = self->b_ptr;
@@ -554,6 +554,21 @@
 	return 1;
 }
 
+static int
+buffer_getcharbuf(self, idx, pp)
+	PyBufferObject *self;
+	int idx;
+	const char ** pp;
+{
+	if ( idx != 0 ) {
+		PyErr_SetString(PyExc_SystemError,
+				"accessing non-existent buffer segment");
+		return -1;
+	}
+	*pp = (const char *)self->b_ptr;
+	return self->b_size;
+}
+
 
 static PySequenceMethods buffer_as_sequence = {
 	(inquiry)buffer_length, /*sq_length*/
@@ -569,6 +584,7 @@
 	(getreadbufferproc)buffer_getreadbuf,
 	(getwritebufferproc)buffer_getwritebuf,
 	(getsegcountproc)buffer_getsegcount,
+	(getcharbufferproc)buffer_getcharbuf,
 };
 
 PyTypeObject PyBuffer_Type = {
@@ -592,7 +608,7 @@
 	0,		/*tp_getattro*/
 	0,		/*tp_setattro*/
 	&buffer_as_buffer,	/*tp_as_buffer*/
-	0,		/*tp_xxx4*/
+	Py_TPFLAGS_DEFAULT,	/*tp_flags*/
 	0,		/*tp_doc*/
 };
 
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*/
 };