From 4fbc726b1adae68e63ac052bd7296fdf2ca777f0 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Fri, 25 Jan 2019 21:14:11 -0800 Subject: [PATCH] base85: change to not pad encoding, fix output bug. --- extra/base85/base85-tests.factor | 5 ++++- extra/base85/base85.factor | 21 +++++++++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/extra/base85/base85-tests.factor b/extra/base85/base85-tests.factor index a55b8292a0..4f1ebd6193 100644 --- a/extra/base85/base85-tests.factor +++ b/extra/base85/base85-tests.factor @@ -3,5 +3,8 @@ USING: base85 kernel strings tools.test ; { t } [ "Hello, world" dup >base85 base85> >string = ] unit-test { t } [ "ready" dup >base85 base85> >string = ] unit-test -{ "NM!&3" } [ "He" >base85 >string ] unit-test +{ "NM!" } [ "He" >base85 >string ] unit-test { t } [ "He" dup >base85 base85> >string = ] unit-test + +{ "00" } [ B{ 0 } >base85 >string ] unit-test +{ "\0" } [ "00" base85> >string ] unit-test diff --git a/extra/base85/base85.factor b/extra/base85/base85.factor index 3ddfcc8326..22fcf752b7 100644 --- a/extra/base85/base85.factor +++ b/extra/base85/base85.factor @@ -27,7 +27,12 @@ CONSTANT: alphabet 4 pick stream-read dup length { { 0 [ 3drop ] } { 4 [ encode4 write-lines (encode-base85) ] } - [ drop 4 0 pad-tail encode4 write-lines (encode-base85) ] + [ + drop + [ 4 0 pad-tail encode4 ] + [ length neg 4 rem head-slice* write-lines ] bi + (encode-base85) + ] } case ; PRIVATE> @@ -40,15 +45,19 @@ PRIVATE> ch ] bi* + ] reduce 4 >be - [ zero? ] trim-tail-slice write ; inline +: decode5 ( seq -- seq' ) + 0 [ [ 85 * ] [ base85>ch ] bi* + ] reduce 4 >be ; inline : (decode-base85) ( stream -- ) 5 "\n\r" pick read-ignoring dup length { { 0 [ 2drop ] } - { 5 [ decode5 (decode-base85) ] } - [ malformed-base85 ] + { 5 [ decode5 write (decode-base85) ] } + [ + drop + [ 5 CHAR: ~ pad-tail decode5 ] + [ length neg 5 rem head-slice* write ] bi + (decode-base85) + ] } case ; PRIVATE>