Jiang Xin <worldhello.net@xxxxxxxxx> writes: > diff --git a/test-path-utils.c b/test-path-utils.c > index 0092cb..18267 100644 > --- a/test-path-utils.c > +++ b/test-path-utils.c > @@ -1,6 +1,19 @@ > #include "cache.h" > #include "string-list.h" > > +#define PARSE_ARGV_STRING(var, input) do { \ > + if (!strcmp(input, "<null>")) { \ > + var = NULL; \ > + } else if (!strcmp(input, "<empty>")) { \ > + var = ""; \ > + } else if (*input == '<' || *input == '(') { \ > + fprintf(stderr, "Bad value: %s\n", input); \ > + return 1; \ > + } else { \ > + var = input; \ > + } \ > +} while (0) Yuck. Why does it have to be a macro like this? I do not think "because we may return" justifies it. > /* > * A "string_list_each_func_t" function that normalizes an entry from > * GIT_CEILING_DIRECTORIES. If the path is unusable for some reason, > @@ -103,6 +116,18 @@ int main(int argc, char **argv) > return 0; > } > > + if (argc == 4 && !strcmp(argv[1], "relative_path")) { > + const char *abs, *base, *rel; > + PARSE_ARGV_STRING(abs, argv[2]); > + PARSE_ARGV_STRING(base, argv[3]); > + rel = relative_path(abs, base); > + if (!rel) > + puts("(null)"); > + else > + puts(strlen(rel) > 0 ? rel : "(empty)"); > + return 0; > + } > + > fprintf(stderr, "%s: unknown function name: %s\n", argv[0], > argv[1] ? argv[1] : "(there was none)"); > return 1; -- 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