Browse Source

receive-pack: simplify keep_arg computation

To generate "--keep=receive-pack $pid on $host", we write
progressively into a single buffer, which requires keeping
track of how much we've written so far. But since the result
is destined to go into our argv array, we can simply use
argv_array_pushf.

Unfortunately we still have to have a fixed-size buffer for
the gethostname() call, but at least it now doesn't involve
any extra size computation. And as a bonus, we drop an
sprintf and a strcpy call.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 9 years ago committed by Junio C Hamano
parent
commit
b26cb7c777
  1. 17
      builtin/receive-pack.c

17
builtin/receive-pack.c

@ -1524,15 +1524,18 @@ static const char *unpack(int err_fd, struct shallow_info *si)
if (status) if (status)
return "unpack-objects abnormal exit"; return "unpack-objects abnormal exit";
} else { } else {
int s; char hostname[256];
char keep_arg[256];

s = sprintf(keep_arg, "--keep=receive-pack %"PRIuMAX" on ", (uintmax_t) getpid());
if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
strcpy(keep_arg + s, "localhost");


argv_array_pushl(&child.args, "index-pack", argv_array_pushl(&child.args, "index-pack",
"--stdin", hdr_arg, keep_arg, NULL); "--stdin", hdr_arg, NULL);

if (gethostname(hostname, sizeof(hostname)))
xsnprintf(hostname, sizeof(hostname), "localhost");
argv_array_pushf(&child.args,
"--keep=receive-pack %"PRIuMAX" on %s",
(uintmax_t)getpid(),
hostname);

if (fsck_objects) if (fsck_objects)
argv_array_pushf(&child.args, "--strict%s", argv_array_pushf(&child.args, "--strict%s",
fsck_msg_types.buf); fsck_msg_types.buf);

Loading…
Cancel
Save