filename safe mode, see base64 rfc

svn: r3445
This commit is contained in:
Jay McCarthy 2006-06-23 13:15:52 +00:00
parent a8535d4dd0
commit 3021890cd1
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])