On Tue, Apr 07, 2009 at 09:33:19AM +0200, Bert Wesarg wrote: > Now that get_short_ref() always return an malloced string, consolidate to > one xstrcpy() call. Makes sense to squash in on top of what I have. But I think it actually is pretty easy to always return a pointer into the existing string (patch based on current master): --- diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c index 5cbb4b0..8b24a4a 100644 --- a/builtin-for-each-ref.c +++ b/builtin-for-each-ref.c @@ -569,7 +569,7 @@ static void gen_scanf_fmt(char *scanf_fmt, const char *rule) /* * Shorten the refname to an non-ambiguous form */ -static char *get_short_ref(struct refinfo *ref) +static const char *get_short_ref(const char *ref) { int i; static char **scanf_fmts; @@ -598,17 +598,17 @@ static char *get_short_ref(struct refinfo *ref) /* bail out if there are no rules */ if (!nr_rules) - return ref->refname; + return ref; /* buffer for scanf result, at most ref->refname must fit */ - short_name = xstrdup(ref->refname); + short_name = xstrdup(ref); /* skip first rule, it will always match */ for (i = nr_rules - 1; i > 0 ; --i) { int j; int short_name_len; - if (1 != sscanf(ref->refname, scanf_fmts[i], short_name)) + if (1 != sscanf(ref, scanf_fmts[i], short_name)) continue; short_name_len = strlen(short_name); @@ -637,12 +637,14 @@ static char *get_short_ref(struct refinfo *ref) * short name is non-ambiguous if all previous rules * haven't resolved to a valid ref */ - if (j == i) - return short_name; + if (j == i) { + ref += strlen(ref) - strlen(short_name); + break; + } } free(short_name); - return ref->refname; + return ref; } @@ -684,7 +686,7 @@ static void populate_value(struct refinfo *ref) if (formatp) { formatp++; if (!strcmp(formatp, "short")) - refname = get_short_ref(ref); + refname = get_short_ref(ref->refname); else die("unknown refname format %s", formatp); -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html