diff options
author | Andy Wingo <wingo@pobox.com> | 2016-06-21 11:27:21 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-06-21 11:29:14 +0200 |
commit | 4e27e3c054442189f05355f631176d94b4f5019f (patch) | |
tree | cc11727a020d3a152f08936d3f55bd6e30d242fd /module/rnrs | |
parent | 59f062ec78bca8ac08284771cc09fdb272888f07 (diff) | |
download | guile-4e27e3c054442189f05355f631176d94b4f5019f.tar.gz |
Add R6RS bytevector->string, string->bytevector
* module/rnrs/io/ports.scm (string->bytevector):
(bytevector->string): New procedures.
* module/rnrs.scm: Export new procedures.
* test-suite/tests/r6rs-ports.test: Add string->bytevector and
bytevector->string tests.
Diffstat (limited to 'module/rnrs')
-rw-r--r-- | module/rnrs/io/ports.scm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/module/rnrs/io/ports.scm b/module/rnrs/io/ports.scm index 8ff674894..5ddc3d58d 100644 --- a/module/rnrs/io/ports.scm +++ b/module/rnrs/io/ports.scm @@ -36,6 +36,9 @@ transcoder-error-handling-mode native-transcoder latin-1-codec utf-8-codec utf-16-codec + ;; transcoding bytevectors + bytevector->string string->bytevector + ;; input & output ports port? input-port? output-port? port-eof? @@ -110,6 +113,7 @@ (only (ice-9 ports internal) port-write-buffer port-buffer-bytevector port-line-buffered?) (only (rnrs bytevectors) bytevector-length) + (prefix (ice-9 iconv) iconv:) (rnrs enums) (rnrs records syntactic) (rnrs exceptions) @@ -173,6 +177,33 @@ ;;; +;;; Transcoding bytevectors +;;; + +(define (string->bytevector str transcoder) + "Encode @var{str} using @var{transcoder}, returning a bytevector." + (iconv:string->bytevector + str + (transcoder-codec transcoder) + (case (transcoder-error-handling-mode transcoder) + ((raise) 'error) + ((replace) 'substitute) + (else (error "unsupported error handling mode" + (transcoder-error-handling-mode transcoder)))))) + +(define (bytevector->string bv transcoder) + "Decode @var{bv} using @var{transcoder}, returning a string." + (iconv:bytevector->string + bv + (transcoder-codec transcoder) + (case (transcoder-error-handling-mode transcoder) + ((raise) 'error) + ((replace) 'substitute) + (else (error "unsupported error handling mode" + (transcoder-error-handling-mode transcoder)))))) + + +;;; ;;; Internal helpers ;;; |