Browse Source

Make "write_sha1_file()" exit early if the file already exists.

Avoid the compression.
maint
Linus Torvalds 20 years ago
parent
commit
706bc531a1
  1. 26
      sha1_file.c

26
sha1_file.c

@ -173,12 +173,30 @@ int write_sha1_file(char *buf, unsigned len, unsigned char *returnsha1) @@ -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) @@ -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…
Cancel
Save