Merge branch 'gb/split-cmdline-errmsg' into gb/shell-ext

* gb/split-cmdline-errmsg:
  split_cmdline: Allow caller to access error string
This commit is contained in:
Junio C Hamano 2010-08-27 09:46:47 -07:00
commit 1666246b70
4 changed files with 18 additions and 4 deletions

14
alias.c
View File

@ -22,6 +22,13 @@ char *alias_lookup(const char *alias)
return alias_val; return alias_val;
} }
#define SPLIT_CMDLINE_BAD_ENDING 1
#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
static const char *split_cmdline_errors[] = {
"cmdline ends with \\",
"unclosed quote"
};
int split_cmdline(char *cmdline, const char ***argv) int split_cmdline(char *cmdline, const char ***argv)
{ {
int src, dst, count = 0, size = 16; int src, dst, count = 0, size = 16;
@ -53,7 +60,7 @@ int split_cmdline(char *cmdline, const char ***argv)
if (!c) { if (!c) {
free(*argv); free(*argv);
*argv = NULL; *argv = NULL;
return error("cmdline ends with \\"); return -SPLIT_CMDLINE_BAD_ENDING;
} }
} }
cmdline[dst++] = c; cmdline[dst++] = c;
@ -66,7 +73,7 @@ int split_cmdline(char *cmdline, const char ***argv)
if (quoted) { if (quoted) {
free(*argv); free(*argv);
*argv = NULL; *argv = NULL;
return error("unclosed quote"); return -SPLIT_CMDLINE_UNCLOSED_QUOTE;
} }
ALLOC_GROW(*argv, count+1, size); ALLOC_GROW(*argv, count+1, size);
@ -75,3 +82,6 @@ int split_cmdline(char *cmdline, const char ***argv)
return count; return count;
} }
const char *split_cmdline_strerror(int split_cmdline_errno) {
return split_cmdline_errors[-split_cmdline_errno-1];
}

View File

@ -486,7 +486,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
buf = xstrdup(v); buf = xstrdup(v);
argc = split_cmdline(buf, &argv); argc = split_cmdline(buf, &argv);
if (argc < 0) if (argc < 0)
die("Bad branch.%s.mergeoptions string", branch); die("Bad branch.%s.mergeoptions string: %s", branch,
split_cmdline_strerror(argc));
argv = xrealloc(argv, sizeof(*argv) * (argc + 2)); argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1)); memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
argc++; argc++;

View File

@ -1096,6 +1096,8 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix);
char *alias_lookup(const char *alias); char *alias_lookup(const char *alias);
int split_cmdline(char *cmdline, const char ***argv); int split_cmdline(char *cmdline, const char ***argv);
/* Takes a negative value returned by split_cmdline */
const char *split_cmdline_strerror(int cmdline_errno);
/* builtin/merge.c */ /* builtin/merge.c */
int checkout_fast_forward(const unsigned char *from, const unsigned char *to); int checkout_fast_forward(const unsigned char *from, const unsigned char *to);

3
git.c
View File

@ -188,7 +188,8 @@ static int handle_alias(int *argcp, const char ***argv)
} }
count = split_cmdline(alias_string, &new_argv); count = split_cmdline(alias_string, &new_argv);
if (count < 0) if (count < 0)
die("Bad alias.%s string", alias_command); die("Bad alias.%s string: %s", alias_command,
split_cmdline_strerror(count));
option_count = handle_options(&new_argv, &count, &envchanged); option_count = handle_options(&new_argv, &count, &envchanged);
if (envchanged) if (envchanged)
die("alias '%s' changes environment variables\n" die("alias '%s' changes environment variables\n"