X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=alias.c;h=c4715380205b5f8dd032b16ade846842fa3c23b9;hb=a78305ffbca58e49a7cdad901df0ae779bbed8fb;hp=5efc3d69866731d0f56464c522b00f253f84c187;hpb=98e3d8faf9eebd382f62a75c886b7e1c6a20279b;p=platform%2Fupstream%2Fgit.git diff --git a/alias.c b/alias.c index 5efc3d6..c471538 100644 --- a/alias.c +++ b/alias.c @@ -1,32 +1,54 @@ #include "cache.h" +#include "alias.h" +#include "config.h" +#include "string-list.h" -static const char *alias_key; -static char *alias_val; +struct config_alias_data { + const char *alias; + char *v; + struct string_list *list; +}; -static int alias_lookup_cb(const char *k, const char *v, void *cb) +static int config_alias_cb(const char *key, const char *value, void *d) { - if (starts_with(k, "alias.") && !strcmp(k + 6, alias_key)) { - if (!v) - return config_error_nonbool(k); - alias_val = xstrdup(v); + struct config_alias_data *data = d; + const char *p; + + if (!skip_prefix(key, "alias.", &p)) return 0; + + if (data->alias) { + if (!strcasecmp(p, data->alias)) + return git_config_string((const char **)&data->v, + key, value); + } else if (data->list) { + string_list_append(data->list, p); } + return 0; } char *alias_lookup(const char *alias) { - alias_key = alias; - alias_val = NULL; - git_config(alias_lookup_cb, NULL); - return alias_val; + struct config_alias_data data = { alias, NULL }; + + read_early_config(config_alias_cb, &data); + + return data.v; +} + +void list_aliases(struct string_list *list) +{ + struct config_alias_data data = { NULL, NULL, list }; + + read_early_config(config_alias_cb, &data); } #define SPLIT_CMDLINE_BAD_ENDING 1 #define SPLIT_CMDLINE_UNCLOSED_QUOTE 2 static const char *split_cmdline_errors[] = { - "cmdline ends with \\", - "unclosed quote" + N_("cmdline ends with \\"), + N_("unclosed quote") }; int split_cmdline(char *cmdline, const char ***argv) @@ -34,7 +56,7 @@ int split_cmdline(char *cmdline, const char ***argv) int src, dst, count = 0, size = 16; char quoted = 0; - *argv = xmalloc(sizeof(**argv) * size); + ALLOC_ARRAY(*argv, size); /* split alias_string */ (*argv)[count++] = cmdline; @@ -58,8 +80,7 @@ int split_cmdline(char *cmdline, const char ***argv) src++; c = cmdline[src]; if (!c) { - free(*argv); - *argv = NULL; + FREE_AND_NULL(*argv); return -SPLIT_CMDLINE_BAD_ENDING; } } @@ -71,8 +92,7 @@ int split_cmdline(char *cmdline, const char ***argv) cmdline[dst] = 0; if (quoted) { - free(*argv); - *argv = NULL; + FREE_AND_NULL(*argv); return -SPLIT_CMDLINE_UNCLOSED_QUOTE; }