GNU bug report logs -
#30066
'get-bytevector-some' returns only 1 byte from unbuffered ports
Previous Next
Reported by: ludo <at> gnu.org (Ludovic Courtès)
Date: Wed, 10 Jan 2018 15:03:02 UTC
Severity: normal
Tags: notabug
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Full log
Message #41 received at 30066 <at> debbugs.gnu.org (full text, mbox):
On Fri 12 Jan 2018 11:15, ludo <at> gnu.org (Ludovic Courtès) writes:
> Andy Wingo <wingo <at> igalia.com> skribis:
>
>> On Thu 11 Jan 2018 22:55, Mark H Weaver <mhw <at> netris.org> writes:
>
> [...]
>
>>>>> Out of curiosity, is there a reason why you're using an unbuffered port
>>>>> in your use case?
>>>>
>>>> It’s to implement redirect à la socat:
>>>>
>>>> https://git.savannah.gnu.org/cgit/guix.git/commit/?id=17af5d51de7c40756a4a39d336f81681de2ba447
>>>
>>> Why is an unbuffered port being used here? Can we change it to a
>>> buffered port?
>>
>> This was also a question I had! If you make it a buffered port at 4096
>> bytes (for example), then get-bytevector-some works exactly like you
>> want it to, no?
>
> It might work, but that’s more by chance no?
No, it is reliable. get-bytevector-some on a buffered port must either
return all the buffered bytes or perform exactly one read (up to the
buffer size) and either return those bytes or EOF. As far as I
understand, that is exactly what you want.
Using buffered ports has two additional advantages: you get to specify
the read size, and returned bytevectors can be allocated to precisely
the right size (no need to overallocate then truncate).
Andy
This bug report was last modified 7 years and 99 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.