list-objects: pass full pathname to callbacks
[gitweb.git] / fsck.c
diff --git a/fsck.c b/fsck.c
index 88c92e82d19c9848b560822fe7c8002e759cf655..24b2a5f36c0c04c8bd956777eb86b23dfb0ca7fc 100644 (file)
--- a/fsck.c
+++ b/fsck.c
@@ -7,6 +7,7 @@
 #include "tag.h"
 #include "fsck.h"
 #include "refs.h"
+#include "utf8.h"
 
 static int fsck_walk_tree(struct tree *tree, fsck_walk_func walk, void *data)
 {
@@ -171,7 +172,9 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
                has_empty_name |= !*name;
                has_dot |= !strcmp(name, ".");
                has_dotdot |= !strcmp(name, "..");
-               has_dotgit |= !strcmp(name, ".git");
+               has_dotgit |= (!strcmp(name, ".git") ||
+                              is_hfs_dotgit(name) ||
+                              is_ntfs_dotgit(name));
                has_zero_pad |= *(char *)desc.buffer == '0';
                update_tree_entry(&desc);
 
@@ -238,8 +241,8 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
        return retval;
 }
 
-static int require_end_of_header(const void *data, unsigned long size,
-       struct object *obj, fsck_error error_func)
+static int verify_headers(const void *data, unsigned long size,
+                         struct object *obj, fsck_error error_func)
 {
        const char *buffer = (const char *)data;
        unsigned long i;
@@ -255,6 +258,15 @@ static int require_end_of_header(const void *data, unsigned long size,
                }
        }
 
+       /*
+        * We did not find double-LF that separates the header
+        * and the body.  Not having a body is not a crime but
+        * we do want to see the terminating LF for the last header
+        * line.
+        */
+       if (size && buffer[size - 1] == '\n')
+               return 0;
+
        return error_func(obj, FSCK_ERROR, "unterminated header");
 }
 
@@ -305,7 +317,7 @@ static int fsck_commit_buffer(struct commit *commit, const char *buffer,
        unsigned parent_count, parent_line_count = 0;
        int err;
 
-       if (require_end_of_header(buffer, size, &commit->object, error_func))
+       if (verify_headers(buffer, size, &commit->object, error_func))
                return -1;
 
        if (!skip_prefix(buffer, "tree ", &buffer))
@@ -384,7 +396,7 @@ static int fsck_tag_buffer(struct tag *tag, const char *data,
                }
        }
 
-       if (require_end_of_header(buffer, size, &tag->object, error_func))
+       if (verify_headers(buffer, size, &tag->object, error_func))
                goto done;
 
        if (!skip_prefix(buffer, "object ", &buffer)) {