~ruther/guix-local

a93e91ff484005e05491621664ab71f888ad2ba2 — Ludovic Courtès 12 years ago 86d07a5
nar: 'write-file' can write to non-file ports.

* guix/nar.scm (write-contents): Use 'sendfile' only when P is a file
  port.
* tests/nar.scm ("write-file supports non-file output ports"): New test.
2 files changed, 9 insertions(+), 1 deletions(-)

M guix/nar.scm
M tests/nar.scm
M guix/nar.scm => guix/nar.scm +2 -1
@@ 112,7 112,8 @@
  (write-long-long size p)
  (call-with-binary-input-file file
    ;; Use `sendfile' when available (Guile 2.0.8+).
    (if (compile-time-value (defined? 'sendfile))
    (if (and (compile-time-value (defined? 'sendfile))
             (file-port? p))
        (cut sendfile p <> size 0)
        (cut dump <> p size)))
  (write-padding size p))

M tests/nar.scm => tests/nar.scm +7 -0
@@ 183,6 183,13 @@

(test-begin "nar")

(test-assert "write-file supports non-file output ports"
  (let ((input  (string-append (dirname (search-path %load-path "guix.scm"))
                               "/guix"))
        (output (%make-void-port "w")))
    (write-file input output)
    #t))

(test-assert "write-file + restore-file"
  (let* ((input  (string-append (dirname (search-path %load-path "guix.scm"))
                                "/guix"))