/usr/share/guile/3.0/ice-9
NameSizeModeActions
peg/-0755rm
and-let-star.scm25930644editdlrm
arrays.scm26920644editdlrm
atomic.scm15920644editdlrm
binary-ports.scm27730644editdlrm
boot-9.scm1704130644editdlrm
buffered-input.scm49350644editdlrm
calling.scm107900644editdlrm
command-line.scm190500644editdlrm
common-list.scm91600644editdlrm
control.scm41810644editdlrm
copy-tree.scm31190644editdlrm
curried-definitions.scm18290644editdlrm
deprecated.scm15730644editdlrm
documentation.scm75840644editdlrm
eval-string.scm30580644editdlrm
eval.scm256770644editdlrm
exceptions.scm147300644editdlrm
expect.scm56280644editdlrm
fdes-finalizers.scm10840644editdlrm
format.scm670380644editdlrm
ftw.scm256660644editdlrm
futures.scm107390644editdlrm
gap-buffer.scm98250644editdlrm
getopt-long.scm168880644editdlrm
hash-table.scm18130644editdlrm
hcons.scm26140644editdlrm
history.scm23430644editdlrm
i18n.scm210020644editdlrm
iconv.scm32680644editdlrm
lineio.scm39410644editdlrm
list.scm13190644editdlrm
local-eval.scm100720644editdlrm
ls.scm32750644editdlrm
match.scm22330644editdlrm
match.upstream.scm367970644editdlrm
networking.scm34070644editdlrm
null.scm12390644editdlrm
occam-channel.scm74360644editdlrm
optargs.scm161230644editdlrm
peg.scm16840644editdlrm
poe.scm33820644editdlrm
poll.scm59290644editdlrm
popen.scm94900644editdlrm
ports.scm195350644editdlrm
posix.scm27930644editdlrm
pretty-print.scm172890644editdlrm
psyntax-pp.scm1872710644editdlrm
psyntax.scm1525420644editdlrm
q.scm42970644editdlrm
quasisyntax.scm53480644editdlrm
r5rs.scm16020644editdlrm
r6rs-libraries.scm106330644editdlrm
r7rs-libraries.scm43870644editdlrm
rdelim.scm79020644editdlrm
read.scm333010644editdlrm
readline.scm97910644editdlrm
receive.scm10820644editdlrm
regex.scm90840644editdlrm
runq.scm83790644editdlrm
rw.scm10470644editdlrm
safe-r5rs.scm76760644editdlrm
safe.scm12790644editdlrm
sandbox.scm350620644editdlrm
save-stack.scm21980644editdlrm
scm-style-repl.scm119000644editdlrm
serialize.scm38690644editdlrm
session.scm181460644editdlrm
slib.scm15830644editdlrm
stack-catch.scm19830644editdlrm
streams.scm60040644editdlrm
string-fun.scm99160644editdlrm
suspendable-ports.scm305760644editdlrm
textual-ports.scm23460644editdlrm
threads.scm128390644editdlrm
time.scm21210644editdlrm
top-repl.scm26950644editdlrm
unicode.scm10050644editdlrm
vlist.scm220810644editdlrm
weak-vector.scm12290644editdlrm
Edit: /usr/share/guile/3.0/ice-9/iconv.scm (3268B)
;;; Encoding and decoding byte representations of strings ;; Copyright (C) 2013, 2021 Free Software Foundation, Inc. ;;;; This library is free software; you can redistribute it and/or ;;;; modify it under the terms of the GNU Lesser General Public ;;;; License as published by the Free Software Foundation; either ;;;; version 3 of the License, or (at your option) any later version. ;;;; ;;;; This library is distributed in the hope that it will be useful, ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;;; Lesser General Public License for more details. ;;;; ;;;; You should have received a copy of the GNU Lesser General Public ;;;; License along with this library; if not, write to the Free Software ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;;; Code: (define-module (ice-9 iconv) #:use-module (rnrs bytevectors) #:use-module (ice-9 binary-ports) #:use-module ((ice-9 rdelim) #:select (read-string)) #:export (string->bytevector bytevector->string call-with-encoded-output-string)) (define* (call-with-encoded-output-string encoding proc #:optional (conversion-strategy 'error)) "Call PROC on a fresh port. Encode the resulting string as a bytevector according to ENCODING, and return the bytevector." (if (and (string-ci=? encoding "utf-8") (eq? conversion-strategy 'error)) ;; I don't know why, but this appears to be faster; at least for ;; serving examples/debug-sxml.scm (1464 reqs/s versus 850 ;; reqs/s). (string->utf8 (call-with-output-string proc)) (call-with-output-bytevector (lambda (port) (set-port-encoding! port encoding) (if conversion-strategy (set-port-conversion-strategy! port conversion-strategy)) (proc port))))) ;; TODO: Provide C implementations that call scm_from_stringn and ;; friends? (define* (string->bytevector str encoding #:optional (conversion-strategy 'error)) "Encode STRING according to ENCODING, which should be a string naming a character encoding, like \"utf-8\"." (if (and (string-ci=? encoding "utf-8") (eq? conversion-strategy 'error)) (string->utf8 str) (call-with-encoded-output-string encoding (lambda (port) (display str port)) conversion-strategy))) (define* (bytevector->string bv encoding #:optional (conversion-strategy 'error)) "Decode the string represented by BV. The bytes in the bytevector will be interpreted according to ENCODING, which should be a string naming a character encoding, like \"utf-8\"." (if (and (string-ci=? encoding "utf-8") (eq? conversion-strategy 'error)) (utf8->string bv) (let ((p (open-bytevector-input-port bv))) (set-port-encoding! p encoding) (if conversion-strategy (set-port-conversion-strategy! p conversion-strategy)) (let ((res (read-string p))) (close-port p) (if (eof-object? res) "" res)))))