[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'.
From: |
Ludovic Courtès |
Subject: |
[bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'. |
Date: |
Mon, 27 May 2019 17:45:21 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Ludovic Courtès <address@hidden> skribis:
> Pierre Neidhardt <address@hidden> 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’.
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., (continued)
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Ludovic Courtès, 2019/05/24
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Pierre Neidhardt, 2019/05/25
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Ludovic Courtès, 2019/05/26
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Pierre Neidhardt, 2019/05/26
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Ludovic Courtès, 2019/05/26
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Pierre Neidhardt, 2019/05/27
- [bug#35880] [PATCH 7/7] lzlib: 'lzread!' never returns more than it was asked for., Ludovic Courtès, 2019/05/27
[bug#35880] [PATCH 4/7] publish: Add support for lzip., Ludovic Courtès, 2019/05/24
[bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Pierre Neidhardt, 2019/05/25
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Ludovic Courtès, 2019/05/26
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'.,
Ludovic Courtès <=
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Pierre Neidhardt, 2019/05/27
- bug#35880: [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Ludovic Courtès, 2019/05/27
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Pierre Neidhardt, 2019/05/27
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Ludovic Courtès, 2019/05/28
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Pierre Neidhardt, 2019/05/28
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Ludovic Courtès, 2019/05/28
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Pierre Neidhardt, 2019/05/29
- [bug#35880] [PATCH 1/7] lzlib: Add 'make-lzip-input-port/compressed'., Ludovic Courtès, 2019/05/31