Have `read-char' & co. throw to `decoding-error'.
authorLudovic Courtès <ludo@gnu.org>
Wed, 2 Feb 2011 14:52:56 +0000 (15:52 +0100)
committerLudovic Courtès <ludo@gnu.org>
Wed, 2 Feb 2011 17:06:28 +0000 (18:06 +0100)
commitc62da8f891569aa717f4f8557c7e87650ec92fb1
treeb176c4ccfc858a9e55915da0131901c3fa3e0907
parentd6cf96974ea21b2f0deb1908baefb3dd2b704331
Have `read-char' & co. throw to `decoding-error'.

* libguile/ports.c (scm_read_char): Mention `decoding-error' in the
  docstring.
  (get_codepoint): Change to return an error code; add `codepoint'
  output parameter.  Don't raise an error from here.
  (scm_getc): Raise an error with `scm_decoding_error' if
  `get_codepoint' returns an error.
  (scm_peek_char): Likewise.  Update docstring.

* libguile/strings.c (scm_decoding_error_key): New variable.
  (scm_decoding_error): New function.
  (scm_from_stringn): Use `scm_decoding_error' instead of
  `scm_encoding_error'.

* libguile/strings.h (scm_decoding_error): New declaration.

* test-suite/tests/ports.test ("string ports")["read-char, wrong
  encoding, error"]: Change to expect `decoding-error'.  Make sure PORT
  points past the error.
  ["read-char, wrong encoding, escape"]: Likewise.
  ["peek-char, wrong encoding, error"]: New test.

* test-suite/tests/r6rs-ports.test ("7.2.11 Binary
  Output")["put-bytevector with wrong-encoding string port"]: Change to
  expect `decoding-error'.
  ("8.2.6  Input and output ports")["transcoded-port [error handling
  mode = raise]"]: Likewise.

* test-suite/tests/rdelim.test ("read-line")["decoding error", "decoding
  error, substitute"]: New tests.

* doc/ref/api-io.texi (Reading): Update documentation of `read-char' and
  `peek-char'.
  (Line/Delimited): Update documentation of `read-line'.
doc/ref/api-io.texi
libguile/ports.c
libguile/strings.c
libguile/strings.h
test-suite/tests/ports.test
test-suite/tests/r6rs-ports.test
test-suite/tests/rdelim.test