X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=alias.c;h=eb9f08b912b2089d434926fc6083ac5ab90c73bc;hb=bc62ca13c03a7f73b7091c26093c552776b749ee;hp=e687fe54c1ce2a435e8f0d7806db231c06f998eb;hpb=77f143bf3e218857ec8e5244d7e862e8e0c1a041;p=git.git diff --git a/alias.c b/alias.c index e687fe54c..eb9f08b91 100644 --- a/alias.c +++ b/alias.c @@ -22,6 +22,13 @@ char *alias_lookup(const char *alias) 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 src, dst, count = 0, size = 16; @@ -38,10 +45,7 @@ int split_cmdline(char *cmdline, const char ***argv) while (cmdline[++src] && isspace(cmdline[src])) ; /* skip */ - if (count >= size) { - size += 16; - *argv = xrealloc(*argv, sizeof(char *) * size); - } + ALLOC_GROW(*argv, count+1, size); (*argv)[count++] = cmdline + dst; } else if (!quoted && (c == '\'' || c == '"')) { quoted = c; @@ -56,7 +60,7 @@ int split_cmdline(char *cmdline, const char ***argv) if (!c) { free(*argv); *argv = NULL; - return error("cmdline ends with \\"); + return -SPLIT_CMDLINE_BAD_ENDING; } } cmdline[dst++] = c; @@ -69,9 +73,15 @@ int split_cmdline(char *cmdline, const char ***argv) if (quoted) { free(*argv); *argv = NULL; - return error("unclosed quote"); + return -SPLIT_CMDLINE_UNCLOSED_QUOTE; } + ALLOC_GROW(*argv, count+1, size); + (*argv)[count] = NULL; + return count; } +const char *split_cmdline_strerror(int split_cmdline_errno) { + return split_cmdline_errors[-split_cmdline_errno-1]; +}