filename safe mode, see base64 rfc

svn: r3445

original commit: 3021890cd1df838215fddf7daf1d54a20a356221
This commit is contained in:
Jay McCarthy 2006-06-23 13:15:52 +00:00
parent 2474f2657f
commit 486ea7a2e3
2 changed files with 18 additions and 11 deletions

View File

@ -5,7 +5,8 @@
(provide net:base64^)
(define-signature net:base64^
(base64-encode-stream
(base64-filename-safe
base64-encode-stream
base64-decode-stream
base64-encode
base64-decode)))

View File

@ -29,16 +29,22 @@
(loop (add1 n))))
(define digit-base64 (make-vector 64))
(let ([each-char (lambda (s e pos)
(let loop ([i (char->integer s)][pos pos])
(unless (> i (char->integer e))
(vector-set! digit-base64 pos i)
(loop (add1 i) (add1 pos)))))])
(each-char #\A #\Z 0)
(each-char #\a #\z 26)
(each-char #\0 #\9 52)
(each-char #\+ #\+ 62)
(each-char #\/ #\/ 63))
(define (each-char s e pos)
(let loop ([i (char->integer s)][pos pos])
(unless (> i (char->integer e))
(vector-set! digit-base64 pos i)
(loop (add1 i) (add1 pos)))))
(each-char #\A #\Z 0)
(each-char #\a #\z 26)
(each-char #\0 #\9 52)
(each-char #\+ #\+ 62)
(each-char #\/ #\/ 63)
(define (base64-filename-safe)
(vector-set! base64-digit (char->integer #\-) 62)
(vector-set! base64-digit (char->integer #\_) 63)
(each-char #\- #\- 62)
(each-char #\_ #\_ 63))
(define (base64-decode-stream in out)
(let loop ([waiting 0][waiting-bits 0])