Merge branch 'cc/replace'
[gitweb.git] / sha1_file.c
index 4bf24ffcf6dd45a80a64df937e724c70c57aaca4..4ea0b18d0aaeca48ed75ed21863195c5ce830cbc 100644 (file)
@@ -1162,8 +1162,7 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf,
                unsigned long len, enum object_type *type, unsigned long *sizep)
 {
        unsigned shift;
-       unsigned char c;
-       unsigned long size;
+       unsigned long size, c;
        unsigned long used = 0;
 
        c = buf[used++];
@@ -1171,7 +1170,7 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf,
        size = c & 15;
        shift = 4;
        while (c & 0x80) {
-               if (len <= used || sizeof(long) * 8 <= shift) {
+               if (len <= used || bitsizeof(long) <= shift) {
                        error("bad object header");
                        return 0;
                }
@@ -2145,8 +2144,10 @@ static void *read_object(const unsigned char *sha1, enum object_type *type,
        return read_packed_sha1(sha1, type, size);
 }
 
-void *read_sha1_file(const unsigned char *sha1, enum object_type *type,
-                    unsigned long *size)
+void *read_sha1_file_repl(const unsigned char *sha1,
+                         enum object_type *type,
+                         unsigned long *size,
+                         const unsigned char **replacement)
 {
        const unsigned char *repl = lookup_replace_object(sha1);
        void *data = read_object(repl, type, size);
@@ -2160,6 +2161,9 @@ void *read_sha1_file(const unsigned char *sha1, enum object_type *type,
        if (!data && (has_loose_object(repl) || has_packed_and_bad(repl)))
                die("object %s is corrupted", sha1_to_hex(repl));
 
+       if (replacement)
+               *replacement = repl;
+
        return data;
 }
 
@@ -2295,7 +2299,7 @@ static void close_sha1_file(int fd)
        if (fsync_object_files)
                fsync_or_die(fd, "sha1 file");
        if (close(fd) != 0)
-               die("error when closing sha1 file (%s)", strerror(errno));
+               die_errno("error when closing sha1 file");
 }
 
 /* Size of directory component, including the ending '/' */