gc: replace local buffer with git_path

We probe the "17/" loose object directory for auto-gc, and
use a local buffer to format the path. We can just use
git_path() for this. It handles paths of any length
(reducing our error handling). And because we feed the
result straight to a system call, we can just use the static
variant.

Note that git_path also knows the string "objects/" is
special, and will replace it with git_object_directory()
when necessary.

Another alternative would be to use sha1_file_name() for the
pretend object "170000...", but that ends up being more
hassle for no gain, as we have to truncate the final path
component.

Signed-off-by: Jeff King <peff@peff.net>
This commit is contained in:
Jeff King 2017-03-28 15:47:03 -04:00 committed by Junio C Hamano
parent 8c5acfb923
commit 07af889136

View file

@ -135,8 +135,6 @@ static int too_many_loose_objects(void)
* distributed, we can check only one and get a reasonable * distributed, we can check only one and get a reasonable
* estimate. * estimate.
*/ */
char path[PATH_MAX];
const char *objdir = get_object_directory();
DIR *dir; DIR *dir;
struct dirent *ent; struct dirent *ent;
int auto_threshold; int auto_threshold;
@ -146,11 +144,7 @@ static int too_many_loose_objects(void)
if (gc_auto_threshold <= 0) if (gc_auto_threshold <= 0)
return 0; return 0;
if (sizeof(path) <= snprintf(path, sizeof(path), "%s/17", objdir)) { dir = opendir(git_path("objects/17"));
warning(_("insanely long object directory %.*s"), 50, objdir);
return 0;
}
dir = opendir(path);
if (!dir) if (!dir)
return 0; return 0;