Skip to content

Commit b95d0a2

Browse files
committed
Merge branch 'gb/split-cmdline-errmsg'
* gb/split-cmdline-errmsg: split_cmdline: Allow caller to access error string
2 parents dfdb1e4 + ad9ac6d commit b95d0a2

File tree

4 files changed

+18
-4
lines changed

4 files changed

+18
-4
lines changed

alias.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ char *alias_lookup(const char *alias)
2222
return alias_val;
2323
}
2424

25+
#define SPLIT_CMDLINE_BAD_ENDING 1
26+
#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
27+
static const char *split_cmdline_errors[] = {
28+
"cmdline ends with \\",
29+
"unclosed quote"
30+
};
31+
2532
int split_cmdline(char *cmdline, const char ***argv)
2633
{
2734
int src, dst, count = 0, size = 16;
@@ -53,7 +60,7 @@ int split_cmdline(char *cmdline, const char ***argv)
5360
if (!c) {
5461
free(*argv);
5562
*argv = NULL;
56-
return error("cmdline ends with \\");
63+
return -SPLIT_CMDLINE_BAD_ENDING;
5764
}
5865
}
5966
cmdline[dst++] = c;
@@ -66,7 +73,7 @@ int split_cmdline(char *cmdline, const char ***argv)
6673
if (quoted) {
6774
free(*argv);
6875
*argv = NULL;
69-
return error("unclosed quote");
76+
return -SPLIT_CMDLINE_UNCLOSED_QUOTE;
7077
}
7178

7279
ALLOC_GROW(*argv, count+1, size);
@@ -75,3 +82,6 @@ int split_cmdline(char *cmdline, const char ***argv)
7582
return count;
7683
}
7784

85+
const char *split_cmdline_strerror(int split_cmdline_errno) {
86+
return split_cmdline_errors[-split_cmdline_errno-1];
87+
}

builtin/merge.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
486486
buf = xstrdup(v);
487487
argc = split_cmdline(buf, &argv);
488488
if (argc < 0)
489-
die("Bad branch.%s.mergeoptions string", branch);
489+
die("Bad branch.%s.mergeoptions string: %s", branch,
490+
split_cmdline_strerror(argc));
490491
argv = xrealloc(argv, sizeof(*argv) * (argc + 2));
491492
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
492493
argc++;

cache.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,6 +1099,8 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix);
10991099

11001100
char *alias_lookup(const char *alias);
11011101
int split_cmdline(char *cmdline, const char ***argv);
1102+
/* Takes a negative value returned by split_cmdline */
1103+
const char *split_cmdline_strerror(int cmdline_errno);
11021104

11031105
/* builtin/merge.c */
11041106
int checkout_fast_forward(const unsigned char *from, const unsigned char *to);

git.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ static int handle_alias(int *argcp, const char ***argv)
188188
}
189189
count = split_cmdline(alias_string, &new_argv);
190190
if (count < 0)
191-
die("Bad alias.%s string", alias_command);
191+
die("Bad alias.%s string: %s", alias_command,
192+
split_cmdline_strerror(count));
192193
option_count = handle_options(&new_argv, &count, &envchanged);
193194
if (envchanged)
194195
die("alias '%s' changes environment variables\n"

0 commit comments

Comments
 (0)