GNU bug report logs -
#35880
[PATCH 0/7] Lzip support for 'guix publish' and 'guix substitute'
Previous Next
Reported by: Ludovic Courtès <ludo <at> gnu.org>
Date: Fri, 24 May 2019 13:34:02 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Ludovic Courtès <ludo <at> gnu.org> skribis:
> Pierre Neidhardt <mail <at> ambrevar.xyz> skribis:
[...]
>>> +(define (lzwrite! encoder source source-offset source-count
>>> + target target-offset target-count)
>>> + "Write up to SOURCE-COUNT bytes from SOURCE to ENCODER, and read up to
>>> +TARGET-COUNT bytes into TARGET at TARGET-OFFSET. Return two values: the
>>> +number of bytes read from SOURCE, and the number of bytes written to TARGET."
>>> + (define read
>>> + (if (< 0 (lz-compress-write-size encoder))
>>> + (match (lz-compress-write encoder source source-offset source-count)
>>> + (0 (lz-compress-finish encoder) 0)
>>> + (n n))
>>> + 0))
>>> +
>>> + (let loop ()
>>> + (match (lz-compress-read encoder target target-offset target-count)
>>> + (0 (loop))
>>> + (written (values read written)))))
>>
>> Why looping on 0? If there is no byte to read, wouldn't this loop indefinitely?
>
> Hmm, good point. The idea is that ‘lzwrite!’ should return 0 only on
> end-of-file, but then the loop should include reading more from SOURCE.
> I’ll follow up on this one.
I noticed that ‘lz-compress-read’ is documented to return a “strictly
positive integer”, so I’m changing it to this:
--8<---------------cut here---------------start------------->8---
(define (lzwrite! encoder source source-offset source-count
target target-offset target-count)
"Write up to SOURCE-COUNT bytes from SOURCE to ENCODER, and read up to
TARGET-COUNT bytes into TARGET at TARGET-OFFSET. Return two values: the
number of bytes read from SOURCE, and the non-zero number of bytes written to
TARGET."
(define read
(if (< 0 (lz-compress-write-size encoder))
(match (lz-compress-write encoder source source-offset source-count)
(0 (lz-compress-finish encoder) 0)
(n n))
0))
(define written
;; Note: 'lz-compress-read' promises to return a non-zero integer.
(lz-compress-read encoder target target-offset target-count))
(values read written))
--8<---------------cut here---------------end--------------->8---
Let me know what you think!
Ludo’.
This bug report was last modified 5 years and 350 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.