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:
commit
1666246b70
14
alias.c
14
alias.c
@ -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];
|
||||||
|
}
|
||||||
|
@ -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++;
|
||||||
|
2
cache.h
2
cache.h
@ -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
3
git.c
@ -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"
|
||||||
|
Loading…
Reference in New Issue
Block a user