~ruther/guix-local

776463ba9fa73e7d3e147b74614ca25d7c9d8785 — Ludovic Courtès 11 years ago c28606b
http-client: Monkey-patch 'make-chunked-input-port' on Guile <= 2.0.11.

Fixes <http://bugs.gnu.org/19976>.

* guix/http-client.scm (when-guile<=2.0.5): Rename to...
  (when-guile<=2.0.5-or-otherwise-broken): ... this.
  (%web-http): New variable.
  Monkey-patch 'make-chunked-input-port' when %WEB-HTTP defines
  'read-chunk-body'.
1 files changed, 10 insertions(+), 2 deletions(-)

M guix/http-client.scm
M guix/http-client.scm => guix/http-client.scm +10 -2
@@ 55,7 55,7 @@
  (reason http-get-error-reason))                 ; string


(define-syntax when-guile<=2.0.5
(define-syntax when-guile<=2.0.5-or-otherwise-broken
  (lambda (s)
    (syntax-case s ()
      ((_ body ...)


@@ 64,12 64,15 @@
       ;; when using "guix pull".
       #'(begin body ...)))))

(when-guile<=2.0.5
(when-guile<=2.0.5-or-otherwise-broken
 ;; Backport of Guile commits 312e79f8 ("Add HTTP Chunked Encoding support to
 ;; web modules.") and 00d3ecf2 ("http: Do not buffer HTTP chunks.")

 (use-modules (ice-9 rdelim))

 (define %web-http
   (resolve-module '(web http)))

 ;; Chunked Responses
 (define (read-chunk-header port)
   (let* ((str (read-line port))


@@ 127,6 130,11 @@ closed it will also close PORT, unless the KEEP-ALIVE? is true."

   (make-custom-binary-input-port "chunked input port" read! #f #f close))

 ;; Chunked encoding support in Guile <= 2.0.11 would load whole chunks in
 ;; memory---see <http://bugs.gnu.org/19939>.
 (when (module-variable %web-http 'read-chunk-body)
   (module-set! %web-http 'make-chunked-input-port make-chunked-input-port))

 (define (read-response-body* r)
   "Reads the response body from @var{r}, as a bytevector.  Returns
 @code{#f} if there was no response body."