Guard against empty responses from servers - holymoly - A tor enabled gopher client written in CHICKEN scheme
 (HTM) git clone git://vernunftzentrum.de/holymoly.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 02329f003f6d70906f71cf8a0c07155c6642551a
 (DIR) parent 6ce1e49ab2c1d57d67c93165ce029de812267e3e
 (HTM) Author: Christian Kellermann <ckeen@pestilenz.org>
       Date:   Wed, 15 Aug 2018 09:36:48 +0200
       
       Guard against empty responses from servers
       
       Diffstat:
         holymoly.scm                        |      25 +++++++++++++++----------
       
       1 file changed, 15 insertions(+), 10 deletions(-)
       ---
 (DIR) diff --git a/holymoly.scm b/holymoly.scm
       @@ -176,11 +176,15 @@
               (display (string-append resource (string #\return #\linefeed)) o)
               (let ((response (if until-eof?
                                  (read-u8vector #f i)
       -                          (read-lines i))))
       +                          (read-lines i)))
       +             (empty-response
       +                (if until-eof?
       +                    #u8()
       +                    '("iGot an empty response from server\tfoo\tserver\t70\r\n"))))
                 (close-input-port i)
                 (close-output-port o)
       -         (cond ((null? response)
       -                    '("iGot an empty response from server\tfoo\tserver\t70\r\n"))
       +         (cond ((or (eof-object? response) (null? response))
       +                    empty-response)
                       (until-eof? response)
                       ((pair? response) (butlast response))
                       (else (error "Unknown return type of response")))))
       @@ -244,13 +248,14 @@
             (sprintf " > ~a" (entry-title e)))))
        
        (define (xdg-open r)
       - (if (string? r)
       -    (process "xdg-open" (list (string-join (cdr (string-split r ":")) ":")))
       -    (let-values (((fd temp-path) (file-mkstemp "/tmp/mytemporary.XXXXXX")))
       -        (let ((temp-port (open-output-file* fd)))
       -            (write-u8vector r temp-port)
       -            (close-output-port temp-port))
       -            (process "xdg-open" (list temp-path))))
       + (cond ((string? r)
       +        (process "xdg-open" (list (string-join (cdr (string-split r ":")) ":"))))
       +       ((and (u8vector? r) (not (zero? (u8vector-length r))))
       +        (let-values (((fd temp-path) (file-mkstemp "/tmp/holymoly.XXXXXX")))
       +            (let ((temp-port (open-output-file* fd)))
       +                (write-u8vector r temp-port)
       +                (close-output-port temp-port))
       +                (process "xdg-open" (list temp-path)))))
          (previous-page))
        
        (define history '())