mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00:00
![Jeff King](/assets/img/avatar_default.png)
A few commands don't take any options at all, and confirm this by checking argc. After that they have no need to look at argv, but we're still stuck with it by convention. Let's annotate these cases so that the compiler doesn't complain with -Wunused-parameter. Note that in scalar and get-tar-commit-id, we're forced to keep argv by calling convention (the functions must match cmd_main() and builtin cmd_foo() conventions, respectively). In diff, these are subcommand modes that we call individually, so we _could_ just drop the argv parameters entirely. But it's weird to pass argc without argv, and it implies that the caller knows that the subcommands aren't interested in further arguments. It's less confusing to just keep them and silence the compiler warning. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
55 lines
1.3 KiB
C
55 lines
1.3 KiB
C
/*
|
|
* Copyright (c) 2005, 2006 Rene Scharfe
|
|
*/
|
|
#include "cache.h"
|
|
#include "commit.h"
|
|
#include "tar.h"
|
|
#include "builtin.h"
|
|
#include "quote.h"
|
|
|
|
static const char builtin_get_tar_commit_id_usage[] =
|
|
"git get-tar-commit-id";
|
|
|
|
/* ustar header + extended global header content */
|
|
#define RECORDSIZE (512)
|
|
#define HEADERSIZE (2 * RECORDSIZE)
|
|
|
|
int cmd_get_tar_commit_id(int argc, const char **argv UNUSED, const char *prefix)
|
|
{
|
|
char buffer[HEADERSIZE];
|
|
struct ustar_header *header = (struct ustar_header *)buffer;
|
|
char *content = buffer + RECORDSIZE;
|
|
const char *comment;
|
|
ssize_t n;
|
|
long len;
|
|
char *end;
|
|
|
|
BUG_ON_NON_EMPTY_PREFIX(prefix);
|
|
|
|
if (argc != 1)
|
|
usage(builtin_get_tar_commit_id_usage);
|
|
|
|
n = read_in_full(0, buffer, HEADERSIZE);
|
|
if (n < 0)
|
|
die_errno("git get-tar-commit-id: read error");
|
|
if (n != HEADERSIZE)
|
|
die_errno("git get-tar-commit-id: EOF before reading tar header");
|
|
if (header->typeflag[0] != 'g')
|
|
return 1;
|
|
|
|
len = strtol(content, &end, 10);
|
|
if (errno == ERANGE || end == content || len < 0)
|
|
return 1;
|
|
if (!skip_prefix(end, " comment=", &comment))
|
|
return 1;
|
|
len -= comment - content;
|
|
if (len < 1 || !(len % 2) ||
|
|
hash_algo_by_length((len - 1) / 2) == GIT_HASH_UNKNOWN)
|
|
return 1;
|
|
|
|
if (write_in_full(1, comment, len) < 0)
|
|
die_errno("git get-tar-commit-id: write error");
|
|
|
|
return 0;
|
|
}
|