From cc655dc13b42a81d0afd8325ff431c2f3696b45a Mon Sep 17 00:00:00 2001 From: Eli Barzilay Date: Fri, 5 Jul 2013 18:07:07 -0400 Subject: [PATCH] Simplify decoding code into one `cond'. (It's likely to get written in some better way, for example, avoid the extra work for simple strings.) (cherry picked from commit 210c71d91c99eb39acfb0907421555918c6e9027) --- collects/net/uri-codec.rkt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/collects/net/uri-codec.rkt b/collects/net/uri-codec.rkt index 2c09c03781..69b8e311b7 100644 --- a/collects/net/uri-codec.rkt +++ b/collects/net/uri-codec.rkt @@ -172,16 +172,16 @@ See more in PR8831. (if (null? l) '() (let* ([c (car l)] [l (cdr l)] [hex (and (equal? #\% c) (pair? l) (pair? (cdr l)) - (string->number (string (car l) (cadr l)) 16))]) - (if hex - (cons hex (internal-decode (cddr l))) - (append (if (charinteger c))) - ;; This should probably error, but strings to be decoded - ;; might come from misbehaving sources; maybe it's better - ;; to add some parameter for a permissive mode - (bytes->list (string->bytes/utf-8 (string c)))) - (internal-decode l)))))) + (string->number (string (car l) (cadr l)) 16))] + [rest (internal-decode (if hex (cddr l) l))]) + (cond [hex (cons hex rest)] + [(charinteger c)) + rest)] + ;; This should probably error, but strings to be decoded + ;; might come from misbehaving sources; maybe it's + ;; better to add some parameter for a permissive mode + [else (append (bytes->list (string->bytes/utf-8 (string c))) + (internal-decode l))])))) (bytes->string/utf-8 (apply bytes (internal-decode (string->list str))))) ;; Utility for defining codecs