[PATCH] Warning fix for gcc 4
[gitweb.git] / sha1_file.c
index a17a6d13b27630aec40a5e7ee48a7b2d1874d05a..8d189d4919f83c243c306973285cefb5b55e2f19 100644 (file)
@@ -1165,6 +1165,7 @@ void *read_object_with_reference(const unsigned char *sha1,
                        free(buffer);
                        return NULL;
                }
+               free(buffer);
                /* Now we have the ID of the referred-to object in
                 * actual_sha1.  Check again. */
        }
@@ -1296,8 +1297,11 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1)
        ssize_t size;
        unsigned long objsize;
        int posn = 0;
-       void *buf = map_sha1_file_internal(sha1, &objsize);
+       void *map = map_sha1_file_internal(sha1, &objsize);
+       void *buf = map;
+       void *temp_obj = NULL;
        z_stream stream;
+
        if (!buf) {
                unsigned char *unpacked;
                unsigned long len;
@@ -1313,7 +1317,7 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1)
                memset(&stream, 0, sizeof(stream));
                deflateInit(&stream, Z_BEST_COMPRESSION);
                size = deflateBound(&stream, len + hdrlen);
-               buf = xmalloc(size);
+               temp_obj = buf = xmalloc(size);
 
                /* Compress it */
                stream.next_out = buf;
@@ -1331,6 +1335,7 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1)
                while (deflate(&stream, Z_FINISH) == Z_OK)
                        /* nothing */;
                deflateEnd(&stream);
+               free(unpacked);
                
                objsize = stream.total_out;
        }
@@ -1347,6 +1352,12 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1)
                }
                posn += size;
        } while (posn < objsize);
+
+       if (map)
+               munmap(map, objsize);
+       if (temp_obj)
+               free(temp_obj);
+
        return 0;
 }
 
@@ -1377,7 +1388,7 @@ int write_sha1_from_fd(const unsigned char *sha1, int fd, char *buffer,
                ssize_t size;
                if (*bufposn) {
                        stream.avail_in = *bufposn;
-                       stream.next_in = buffer;
+                       stream.next_in = (unsigned char *) buffer;
                        do {
                                stream.next_out = discard;
                                stream.avail_out = sizeof(discard);