fsck: Don't require tmp_obj_ file names are 14 bytes in length
authorShawn O. Pearce <spearce@spearce.org>
Sun, 27 Jul 2008 02:33:00 +0000 (21:33 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 27 Jul 2008 21:49:26 +0000 (14:49 -0700)
Not all temporary file creation routines will ensure 14 bytes are
used to generate the temporary file name. In C Git this may be
true, but alternate implementations such as jgit are not always
able to generate a temporary file name with a specific prefix and
also ensure the file name length is 14 bytes long.

Since temporary files in a directory we are fsck'ing should be
uncommon (as they are short lived only long enough for an active
writer to finish writing the file and rename it) we shouldn't see
these show up very often. Always using a prefixcmp() call and
ignoring the length opens up room for other implementations to use
different name generation schemes.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-fsck.c
index 7a4a4f144f7550c5eee67e728ef5ff0df7a5d2ba..6eb7da88d3e8591a8c544acc61a42e00babff120 100644 (file)
@@ -377,10 +377,6 @@ static void fsck_dir(int i, char *path)
                        if (de->d_name[0] != '.')
                                break;
                        continue;
-               case 14:
-                       if (prefixcmp(de->d_name, "tmp_obj_"))
-                               break;
-                       continue;
                case 38:
                        sprintf(name, "%02x", i);
                        memcpy(name+2, de->d_name, len+1);
@@ -389,6 +385,8 @@ static void fsck_dir(int i, char *path)
                        add_sha1_list(sha1, DIRENT_SORT_HINT(de));
                        continue;
                }
+               if (prefixcmp(de->d_name, "tmp_obj_"))
+                       continue;
                fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
        }
        closedir(dir);