Re: [PATCH] connected: use buffered I/O to talk to rev-list
- From
Johannes Sixt <j6t@kdbg.org>
- Date
- Aug 3, 2020, 18:17 UTC
- Message-ID
- <5de5acdf-382b-6907-4a64-02ae02abaf13@kdbg.org>
- In-Reply-To
- <CAPx1Gvesmwf_CBj6D=YriFQgtEsDyUe7PHa6p9AvxG=fwAvHpA@mail.gmail.com>
Am 02.08.20 um 18:08 schrieb Chris Torek:
Show 24 quoted lines
> On Sun, Aug 2, 2020 at 7:39 AM René Scharfe <l.s.r@web.de> wrote:
>> @@ -135,16 +135,10 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
>> if (new_pack && find_pack_entry_one(oid.hash, new_pack))
>> continue;
>>
>> - memcpy(commit, oid_to_hex(&oid), hexsz);
>> - if (write_in_full(rev_list.in, commit, hexsz + 1) < 0) {
>> - if (errno != EPIPE && errno != EINVAL)
>> - error_errno(_("failed write to rev-list"));
>> - err = -1;
>> - break;
>> - }
>> + fprintf(rev_list_in, "%s\n", oid_to_hex(&oid));
>> } while (!fn(cb_data, &oid));
>>
>> - if (close(rev_list.in))
>> + if (fclose(rev_list_in))
>> err = error_errno(_("failed to close rev-list's stdin"));
>>
>> sigchain_pop(SIGPIPE);
>
> The same ferror()-before-fclose() remarks apply here too,
> but this time the explicit errno checking (EPIPE) cannot
> be done -- it's too late, errno is probably overwritten.The EPIPE check should really remain in the loop above. (Same comment on EPIPE on Windows applies here.)
-- Hannes