Change UnicodeDecodeError objects so that the 'object' attribute
is a bytes object.
Add 'y' and 'y#' format specifiers that work like 's' and 's#'
but only accept bytes objects.
diff --git a/Doc/api/utilities.tex b/Doc/api/utilities.tex
index 93e3796..fb9c909 100644
--- a/Doc/api/utilities.tex
+++ b/Doc/api/utilities.tex
@@ -424,6 +424,18 @@
compatible objects pass back a reference to the raw internal data
representation.
+ \item[\samp{y} (bytes object)
+ {[const char *]}]
+ This variant on \samp{s} convert a Python bytes object to a C pointer to a
+ character string. The bytes object must not contain embedded NUL bytes;
+ if it does, a \exception{TypeError} exception is raised.
+
+ \item[\samp{y\#} (bytes object)
+ {[const char *, int]}]
+ This variant on \samp{s#} stores into two C variables, the first one
+ a pointer to a character string, the second one its length. This only
+ accepts bytes objects.
+
\item[\samp{z} (string or \code{None}) {[const char *]}]
Like \samp{s}, but the Python object may also be \code{None}, in
which case the C pointer is set to \NULL.
diff --git a/Doc/ext/extending.tex b/Doc/ext/extending.tex
index 2af88b5..1f3e2d5 100644
--- a/Doc/ext/extending.tex
+++ b/Doc/ext/extending.tex
@@ -802,8 +802,10 @@
Py_BuildValue("i", 123) 123
Py_BuildValue("iii", 123, 456, 789) (123, 456, 789)
Py_BuildValue("s", "hello") 'hello'
+ Py_BuildValue("y", "hello") b'hello'
Py_BuildValue("ss", "hello", "world") ('hello', 'world')
Py_BuildValue("s#", "hello", 4) 'hell'
+ Py_BuildValue("y#", "hello", 4) b'hell'
Py_BuildValue("()") ()
Py_BuildValue("(i)", 123) (123,)
Py_BuildValue("(ii)", 123, 456) (123, 456)