summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0c04094)
raw | patch | inline | side by side (parent: 0c04094)
author | Linus Torvalds <torvalds@g5.osdl.org> | |
Sat, 16 Jul 2005 16:57:03 +0000 (09:57 -0700) | ||
committer | Linus Torvalds <torvalds@g5.osdl.org> | |
Sat, 16 Jul 2005 16:57:03 +0000 (09:57 -0700) |
git-fsck-cache complains about some of the odder ones, and is quiet
about the old (S_IFREG | 664) case, but that's wrong too.
Converting the kernel tree is too painful right now, but at least we
know how to do it if we ever want to.
about the old (S_IFREG | 664) case, but that's wrong too.
Converting the kernel tree is too painful right now, but at least we
know how to do it if we ever want to.
convert-cache.c | patch | blob | history |
diff --git a/convert-cache.c b/convert-cache.c
index 77f8bff9ac0cd61412e69921c610e7301f7c350b..ee599f1c027fc829ab98a3ba489a5c4bfd7e9977 100644 (file)
--- a/convert-cache.c
+++ b/convert-cache.c
@@ -116,6 +116,34 @@ static int write_subdirectory(void *buffer, unsigned long size, const char *base
return used;
}
+static int convert_mode(char *buffer)
+{
+ char *end;
+ unsigned short mode = strtoul(buffer, &end, 8);
+ unsigned short newmode;
+ char num[10];
+ int len;
+
+ if (*end != ' ')
+ die("corrupt tree object");
+ switch (mode) {
+ case S_IFREG | 0644:
+ case S_IFREG | 0755:
+ case S_IFLNK:
+ case S_IFDIR:
+ return 0;
+ }
+ newmode = 0;
+ if (S_ISREG(mode))
+ newmode = (mode & 0100) ? 0755 : 0644;
+ newmode |= mode & S_IFMT;
+ len = sprintf(num, "%o", newmode);
+ if (len != end - buffer)
+ return error("unable to convert tree entry mode %o to %o", mode, newmode);
+ memcpy(buffer, num, len);
+ return 0;
+}
+
static void convert_tree(void *buffer, unsigned long size, unsigned char *result_sha1)
{
void *orig_buffer = buffer;
@@ -124,6 +152,7 @@ static void convert_tree(void *buffer, unsigned long size, unsigned char *result
while (size) {
int len = 1+strlen(buffer);
+ convert_mode(buffer);
convert_binary_sha1(buffer + len);
len += 20;