void prune_packed_objects(int opts) { int i; static char pathname[PATH_MAX]; const char *dir = get_object_directory(); int len = strlen(dir); if (opts == VERBOSE) progress = start_progress_delay("Removing duplicate objects", 256, 95, 2); if (len > PATH_MAX - 42) die("impossible object directory"); memcpy(pathname, dir, len); if (len && pathname[len-1] != '/') pathname[len++] = '/'; for (i = 0; i < 256; i++) { DIR *d; display_progress(progress, i + 1); sprintf(pathname + len, "%02x/", i); d = opendir(pathname); if (!d) continue; prune_dir(i, d, pathname, len + 3, opts); closedir(d); } stop_progress(&progress); }
static void prune_object_dir(const char *path) { int i; for (i = 0; i < 256; i++) { static char dir[4096]; sprintf(dir, "%s/%02x", path, i); prune_dir(i, dir); } }
static void prune_object_dir(const char *path) { struct strbuf buf = STRBUF_INIT; size_t baselen; int i; strbuf_addstr(&buf, path); strbuf_addch(&buf, '/'); baselen = buf.len; for (i = 0; i < 256; i++) { strbuf_addf(&buf, "%02x", i); prune_dir(i, &buf); strbuf_setlen(&buf, baselen); } }