[PATCH 6/6] bundle: use prefix_filename with bundle path
- From
Jeff King <peff@peff.net>
- Date
- Mar 21, 2017, 01:31 UTC
- Message-ID
- <20170321013126.kcupajrxl7mrqq7i@sigill.intra.peff.net>
- In-Reply-To
- <20170321011838.rdhnbfwbigm4s4e3@sigill.intra.peff.net>
We may take the path to a bundle file as an argument, and need to adjust the filename based on the prefix we discovered while setting up the git directory. We do so manually into a fixed-size buffer, but using prefix_filename() is the normal way.
Besides being more concise, there are two subtle improvements:
1. The original inserted a "/" between the two paths, even
though the "prefix" argument always has the "/"
appended. That means that:cd subdir && git bundle verify ../foo.bundle
was looking at (and reporting) subdir//../foo.bundle.
Harmless, but ugly. Using prefix_filename() gets this
right. 2. The original checked for an absolute path by looking
for a leading '/'. It should have been using
is_absolute_path(), which also covers more cases on
Windows (backslashes and dos drive prefixes). But it's easier still to just pass the name to
prefix_filename(), which handles this case
automatically.Note that we'll just leak the resulting buffer in the name of simplicity, since it needs to last through the duration of the program anyway.
Signed-off-by: Jeff King <peff@peff.net> --- builtin/bundle.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/builtin/bundle.c b/builtin/bundle.c index 4883a435a..d0de59b94 100644 --- a/builtin/bundle.c +++ b/builtin/bundle.c @@ -20,21 +20,15 @@ int cmd_bundle(int argc, const char **argv, const char *prefix) struct bundle_header header; const char *cmd, *bundle_file; int bundle_fd = -1; - char buffer[PATH_MAX]; if (argc < 3) usage(builtin_bundle_usage); cmd = argv[1]; - bundle_file = argv[2]; + bundle_file = prefix_filename(prefix, argv[2]); argc -= 2; argv += 2; - if (prefix && bundle_file[0] != '/') { - snprintf(buffer, sizeof(buffer), "%s/%s", prefix, bundle_file); - bundle_file = buffer; - } - memset(&header, 0, sizeof(header)); if (strcmp(cmd, "create") && (bundle_fd = read_bundle_header(bundle_file, &header)) < 0)
-- 2.12.1.683.gcd02edfec