From 88aab05e8de72ac07dc7639f9254cf8e727176ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20H=C3=B6rnquist?= Date: Sun, 28 Jun 2020 23:27:47 +0200 Subject: Add base64 utility functions. --- module/output/types.scm | 6 ++---- module/util/base64.scm | 12 ++++++++++++ module/vcomponent/parse/types.scm | 5 ++--- 3 files changed, 16 insertions(+), 7 deletions(-) (limited to 'module') diff --git a/module/output/types.scm b/module/output/types.scm index 08ac878a..22f3ca5b 100644 --- a/module/output/types.scm +++ b/module/output/types.scm @@ -4,13 +4,11 @@ :use-module (util exceptions) :use-module (util base64) :use-module (datetime) - :use-module (datetime util) - :use-module (rnrs io ports)) + :use-module (datetime util)) (define (write-binary _ value) - (bytevector->string (bytevector->base64 value) - (make-transcoder (latin-1-codec)))) + (bytevector->base64-string value)) (define (write-boolean _ value) (if value "TRUE" "FALSE")) diff --git a/module/util/base64.scm b/module/util/base64.scm index 2a49ba1e..148055c9 100644 --- a/module/util/base64.scm +++ b/module/util/base64.scm @@ -132,11 +132,23 @@ ret)) +;; string -> bv +(define-public (base64-string->bytevector string) + (base64->bytevector + (string->bytevector string (make-transcoder (latin-1-codec))))) + +;; bv -> string +(define-public (bytevector->base64-string bv) + (bytevector->string (bytevector->base64 bv) + (make-transcoder (latin-1-codec)))) + +;; string -> string (define*-public (base64encode string optional: (transcoder (native-transcoder))) (bytevector->string (bytevector->base64 (string->bytevector string transcoder)) (make-transcoder (latin-1-codec)))) +;; string -> string (define*-public (base64decode string optional: (transcoder (native-transcoder))) (bytevector->string (base64->bytevector diff --git a/module/vcomponent/parse/types.scm b/module/vcomponent/parse/types.scm index e9c5e811..552aa191 100644 --- a/module/vcomponent/parse/types.scm +++ b/module/vcomponent/parse/types.scm @@ -2,7 +2,6 @@ :use-module (util) :use-module (util exceptions) :use-module (util base64) - :use-module (rnrs io ports) :use-module (datetime) :use-module (srfi srfi-9 gnu) ) @@ -13,8 +12,8 @@ (unless (string=? "BASE64" (hashq-ref props 'ENCODING)) (warning "Binary field not marked ENCODING=BASE64")) - (base64->bytevector - (string->bytevector value (make-transcoder (latin-1-codec))))) + ;; TODO whitespace in binary? + (base64-string->bytevector value)) ;; BOOLEAN (define (parse-boolean props value) -- cgit v1.2.3