mirror of
https://github.com/git/git
synced 2024-08-26 19:19:18 +00:00
test-line-buffer: simplify command parsing
The handle_command() function matches an incoming command string with a sequence of starts_with() checks. But it also surrounds these with a switch on the first character of the command, which lets us jump to the right block of starts_with() without going linearly through the list. However, each case arm of the switch falls through to the one below it. This is pointless (we know that a command starting with 'b' does not need to check any of the commands in the 'c' block), and it makes gcc's -Wimplicit-fallthrough complain. We could solve this by adding a break at the end of each block. However, this optimization isn't helping anything. Even if it does make matching faster (which is debatable), this is code that is run only in the test suite, and each run receives at most two of these "commands". We should favor simplicity and readability over micro-optimizing. Instead, let's drop the switch statement completely and replace it with an if/else cascade. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
59c0ea183a
commit
8968b7b0a8
|
@ -17,27 +17,17 @@ static uint32_t strtouint32(const char *s)
|
|||
|
||||
static void handle_command(const char *command, const char *arg, struct line_buffer *buf)
|
||||
{
|
||||
switch (*command) {
|
||||
case 'b':
|
||||
if (starts_with(command, "binary ")) {
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
strbuf_addch(&sb, '>');
|
||||
buffer_read_binary(buf, &sb, strtouint32(arg));
|
||||
fwrite(sb.buf, 1, sb.len, stdout);
|
||||
strbuf_release(&sb);
|
||||
return;
|
||||
}
|
||||
case 'c':
|
||||
if (starts_with(command, "copy ")) {
|
||||
buffer_copy_bytes(buf, strtouint32(arg));
|
||||
return;
|
||||
}
|
||||
case 's':
|
||||
if (starts_with(command, "skip ")) {
|
||||
buffer_skip_bytes(buf, strtouint32(arg));
|
||||
return;
|
||||
}
|
||||
default:
|
||||
if (starts_with(command, "binary ")) {
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
strbuf_addch(&sb, '>');
|
||||
buffer_read_binary(buf, &sb, strtouint32(arg));
|
||||
fwrite(sb.buf, 1, sb.len, stdout);
|
||||
strbuf_release(&sb);
|
||||
} else if (starts_with(command, "copy ")) {
|
||||
buffer_copy_bytes(buf, strtouint32(arg));
|
||||
} else if (starts_with(command, "skip ")) {
|
||||
buffer_skip_bytes(buf, strtouint32(arg));
|
||||
} else {
|
||||
die("unrecognized command: %s", command);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue