Re: [PATCH] midx: use buffered I/O to talk to pack-objects
- From
Chris Torek <chris.torek@gmail.com>
- Date
- Aug 2, 2020, 16:11 UTC
- Message-ID
- <CAPx1GveChRzsA=FayzhZRSQLPz+o1Po3-_9ZvAGLPztpH5Jg9w@mail.gmail.com>
- In-Reply-To
- <c5920e08-b7dd-e870-f99e-225d0aafc663@web.de>
On Sun, Aug 2, 2020 at 7:40 AM René Scharfe <l.s.r@web.de> wrote:
Show 21 quoted lines
> @@ -1443,10 +1446,15 @@ int midx_repack(struct repository *r, const char *object_dir, size_t batch_size,
> continue;
>
> nth_midxed_object_oid(&oid, m, i);
> - xwrite(cmd.in, oid_to_hex(&oid), the_hash_algo->hexsz);
> - xwrite(cmd.in, "\n", 1);
> + fprintf(cmd_in, "%s\n", oid_to_hex(&oid));
> + }
> +
> + if (fclose(cmd_in)) {
> + error_errno(_("could not close stdin of pack-objects"));
> + result = 1;
> + finish_command(&cmd);
> + goto cleanup;
> }
> - close(cmd.in);
>
> if (finish_command(&cmd)) {
> error(_("could not finish pack-objects"));
> --
> 2.28.0Here, we don't have any explicit errno checking, but of course error_errno() uses errno. This too needs an ferror() (or fflush()) test before the final fclose(), and then we just need to use plain error(). Otherwise you'll need the clumsier test-after-each-fprintf() and an explicit final fflush()-and-test.
Chris