Make "write_sha1_file()" exit early if the file already exists.
Avoid the compression.
This commit is contained in:
parent
f18ca73166
commit
706bc531a1
26
sha1_file.c
26
sha1_file.c
@ -173,12 +173,30 @@ int write_sha1_file(char *buf, unsigned len, unsigned char *returnsha1)
|
||||
z_stream stream;
|
||||
unsigned char sha1[20];
|
||||
SHA_CTX c;
|
||||
char *filename;
|
||||
int fd;
|
||||
|
||||
/* Sha1.. */
|
||||
SHA1_Init(&c);
|
||||
SHA1_Update(&c, buf, len);
|
||||
SHA1_Final(sha1, &c);
|
||||
|
||||
if (returnsha1)
|
||||
memcpy(returnsha1, sha1, 20);
|
||||
|
||||
filename = sha1_file_name(sha1);
|
||||
fd = open(filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
|
||||
if (fd < 0) {
|
||||
if (errno != EEXIST)
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* We might do collision checking here, but we'd need to
|
||||
* uncompress the old file and check it. Later.
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Set it up */
|
||||
memset(&stream, 0, sizeof(stream));
|
||||
deflateInit(&stream, Z_BEST_COMPRESSION);
|
||||
@ -195,10 +213,10 @@ int write_sha1_file(char *buf, unsigned len, unsigned char *returnsha1)
|
||||
deflateEnd(&stream);
|
||||
size = stream.total_out;
|
||||
|
||||
if (write_sha1_buffer(sha1, compressed, size) < 0)
|
||||
return -1;
|
||||
if (returnsha1)
|
||||
memcpy(returnsha1, sha1, 20);
|
||||
if (write(fd, compressed, size) != size)
|
||||
die("unable to write file");
|
||||
close(fd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user