On 09.01.2022 15:49, Eric Sunshine wrote:
On Wed, Jan 5, 2022 at 5:36 AM Fabian Stelzer <fs@xxxxxxxxxxxx> wrote:
On 05.01.2022 02:09, Eric Sunshine wrote:
>> > line = strchrnul(line + 1, '\n')) {
>> > while (*line == '\n')
>> > line++;
>> > if (!*line)
>> > break;
>
>Indeed, the existing code is confusing me. I've been staring at it for
>several minutes and I think I'm still failing to understand the
>purpose of the +1 in the strchrnul() call. Perhaps I'm missing
>something obvious(?).
This whole loop was basically copied from parse_gpg_output() above. Without
the +1 this would always find the same line in the buffer. The +1 skips over
the previously found LF.
I still don't see the point of +1 in the strchrnul() call. After:
line = strchrnul(line + 1, '\n'))
`line` is going to point either at '\n' or at NUL. Then:
while (*line == '\n')
line++;
skips over the '\n' if present. So, by the time the next loop
iteration starts, `line` will already be pointing past the '\n' we
just found, thus the +1 seems pointless (and maybe even buggy).
But perhaps I have a blind spot and am missing something obvious...
Hm, yeah. I think you are correct. The while below should make the +1
unnecessary. I think this never mattered to parse_gpg_output() since it is
only looking for the [GNUPG:] status line which probably comes first anyway.
If it does not then I think the loop will skip over it. Same thing with ssh
(but we are changing this whole loop anyway)