projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix debianization: mark git-tk architecture neutral.
[git.git]
/
sha1_file.c
diff --git
a/sha1_file.c
b/sha1_file.c
index
a17a6d1
..
8d189d4
100644
(file)
--- a/
sha1_file.c
+++ b/
sha1_file.c
@@
-1165,6
+1165,7
@@
void *read_object_with_reference(const unsigned char *sha1,
free(buffer);
return NULL;
}
free(buffer);
return NULL;
}
+ free(buffer);
/* Now we have the ID of the referred-to object in
* actual_sha1. Check again. */
}
/* 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;
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;
z_stream stream;
+
if (!buf) {
unsigned char *unpacked;
unsigned long len;
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);
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;
/* 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);
while (deflate(&stream, Z_FINISH) == Z_OK)
/* nothing */;
deflateEnd(&stream);
+ free(unpacked);
objsize = stream.total_out;
}
objsize = stream.total_out;
}
@@
-1347,6
+1352,12
@@
int write_sha1_to_fd(int fd, const unsigned char *sha1)
}
posn += size;
} while (posn < objsize);
}
posn += size;
} while (posn < objsize);
+
+ if (map)
+ munmap(map, objsize);
+ if (temp_obj)
+ free(temp_obj);
+
return 0;
}
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;
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);
do {
stream.next_out = discard;
stream.avail_out = sizeof(discard);