about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-07-10 15:40:43 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-10 16:16:34 -0700
commita3eb250f996bf5e12376ec88622c4ccaabf20ea8 (patch)
tree07ff6f4a2a0f1f31fad6543be9a41c7d9f7a030f
parentcf219196a89becccb50ad4a0a667a2814ddae60f (diff)
downloadgit-svn-0.99.tar.gz
The location alt_odb[j].name[0..] is filled with ??/?{38} to form a sha1
filename to try, but I was too lazy to allocate a copy, so while
fsck_object_dir() is running for the directory, the filenames ??/?{38}
are filled after NUL (usually and always the location should have '/'),
making them "not found".

This should fix it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--fsck-cache.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fsck-cache.c b/fsck-cache.c
index 48be6553a3..8e21bf1327 100644
--- a/fsck-cache.c
+++ b/fsck-cache.c
@@ -416,9 +416,11 @@ int main(int argc, char **argv)
                 struct packed_git *p;
                 prepare_alt_odb();
                 for (j = 0; alt_odb[j].base; j++) {
-                        alt_odb[j].name[-1] = 0; /* was slash */
-                        fsck_object_dir(alt_odb[j].base);
-                        alt_odb[j].name[-1] = '/';
+                        char namebuf[PATH_MAX];
+                        int namelen = alt_odb[j].name - alt_odb[j].base;
+                        memcpy(namebuf, alt_odb[j].base, namelen);
+                        namebuf[namelen - 1] = 0;
+                        fsck_object_dir(namebuf);
                 }
                 prepare_packed_git();
                 for (p = packed_git; p; p = p->next)