summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-05-31 21:59:43 +0200
committerLudovic Courtès <ludo@gnu.org>2015-05-31 22:39:48 +0200
commit1a706ff5cf12202c80bcaafb77a3cab43bac6f4f (patch)
treee263440fe6e4b985255b4bde7be5fbb0f1775526 /guix
parent23185ceadcb522c702cde28be2b5a7379d4ee9f1 (diff)
base32: Use a custom error condition instead of 'misc-error'.
Suggested by Christopher Allan Webber <cwebber@dustycloud.org>. * guix/base32.scm (&invalid-base32-character): New error condition. (make-base32-string->bytevector): Use it instead of 'error'. * tests/base32.scm ("&invalid-base32-character"): New test.
Diffstat (limited to 'guix')
-rw-r--r--guix/base32.scm21
1 files changed, 18 insertions, 3 deletions
diff --git a/guix/base32.scm b/guix/base32.scm
index e0599dc01e..7b2e2a6712 100644
--- a/guix/base32.scm
+++ b/guix/base32.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2015 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,6 +18,8 @@
(define-module (guix base32)
#:use-module (srfi srfi-1)
+ #:use-module (srfi srfi-34)
+ #:use-module (srfi srfi-35)
#:use-module (srfi srfi-60)
#:use-module (rnrs bytevectors)
#:use-module (ice-9 vlist)
@@ -25,7 +27,11 @@
bytevector->base32-string
bytevector->nix-base32-string
base32-string->bytevector
- nix-base32-string->bytevector))
+ nix-base32-string->bytevector
+ &invalid-base32-character
+ invalid-base32-character?
+ invalid-base32-character-value
+ invalid-base32-character-string))
;;; Commentary:
;;;
@@ -264,6 +270,12 @@ starting from the right of S."
s)
bv))
+;; Invalid base32 character error condition when decoding base32.
+(define-condition-type &invalid-base32-character &error
+ invalid-base32-character?
+ (character invalid-base32-character-value)
+ (string invalid-base32-character-string))
+
(define (make-base32-string->bytevector base32-string-unfold base32-chars)
(let ((char->value (let loop ((i 0)
(v vlist-null))
@@ -276,7 +288,10 @@ starting from the right of S."
"Return the binary representation of base32 string S as a bytevector."
(base32-string-unfold (lambda (chr)
(or (and=> (vhash-assv chr char->value) cdr)
- (error "invalid base32 character" chr)))
+ (raise (condition
+ (&invalid-base32-character
+ (character chr)
+ (string s))))))
s))))
(define base32-string->bytevector