summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSlavomir Vlcek <svlc@inventati.org>2014-11-12 14:10:22 +0100
committerJunio C Hamano <gitster@pobox.com>2014-11-13 10:40:41 -0800
commitc4f901d1593f3ef097c3e73daa2847ed9ad9efe0 (patch)
tree11c5b4fe233ad7c6e8e58c638bc7bb7262390b19
parent7fa1365c54c28b3cd9375539f381b54061a1880d (diff)
downloadgit-c4f901d1593f3ef097c3e73daa2847ed9ad9efe0.tar.gz
builtin: move builtin retrieval to get_builtin()sv/get-builtin
There was a redundant code for a builtin command retrieval in 'handle_builtin()' and 'is_builtin()'. Introduce a new function 'get_builtin()' and using it from both of these places to reduce the redundancy. Signed-off-by: Slavomir Vlcek <svlc@inventati.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--git.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/git.c b/git.c
index 9c49519831..84310e30ee 100644
--- a/git.c
+++ b/git.c
@@ -486,15 +486,20 @@ static struct cmd_struct commands[] = {
{ "write-tree", cmd_write_tree, RUN_SETUP },
};
-int is_builtin(const char *s)
+static struct cmd_struct *get_builtin(const char *s)
{
int i;
for (i = 0; i < ARRAY_SIZE(commands); i++) {
- struct cmd_struct *p = commands+i;
+ struct cmd_struct *p = commands + i;
if (!strcmp(s, p->cmd))
- return 1;
+ return p;
}
- return 0;
+ return NULL;
+}
+
+int is_builtin(const char *s)
+{
+ return !!get_builtin(s);
}
static void handle_builtin(int argc, const char **argv)
@@ -502,6 +507,7 @@ static void handle_builtin(int argc, const char **argv)
const char *cmd = argv[0];
int i;
static const char ext[] = STRIP_EXTENSION;
+ struct cmd_struct *builtin;
if (sizeof(ext) > 1) {
i = strlen(argv[0]) - strlen(ext);
@@ -518,15 +524,12 @@ static void handle_builtin(int argc, const char **argv)
argv[0] = cmd = "help";
}
- for (i = 0; i < ARRAY_SIZE(commands); i++) {
- struct cmd_struct *p = commands+i;
- if (strcmp(p->cmd, cmd))
- continue;
- if (saved_environment && (p->option & NO_SETUP)) {
+ builtin = get_builtin(cmd);
+ if (builtin) {
+ if (saved_environment && (builtin->option & NO_SETUP))
restore_env();
- break;
- }
- exit(run_builtin(p, argc, argv));
+ else
+ exit(run_builtin(builtin, argc, argv));
}
}