Skip to content

Commit

Permalink
fsck: Don't require tmp_obj_ file names are 14 bytes in length
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shawn O. Pearce authored and Junio C Hamano committed Jul 27, 2008
1 parent f5d600e commit a08c53a
Showing 1 changed file with 2 additions and 4 deletions.
6 changes: 2 additions & 4 deletions builtin-fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down

0 comments on commit a08c53a

Please sign in to comment.