remove the artificial restriction tagsize < 8kb
[gitweb.git] / mktag.c
diff --git a/mktag.c b/mktag.c
index 23288781cf6caad62253130f75112e18eb4905aa..f1598dbd215811ead04d4f02c4d29012db699ac9 100644 (file)
--- a/mktag.c
+++ b/mktag.c
@@ -45,7 +45,7 @@ static int verify_tag(char *buffer, unsigned long size)
        unsigned char sha1[20];
        const char *object, *type_line, *tag_line, *tagger_line;
 
-       if (size < 64 || size > MAXSIZE-1)
+       if (size < 64)
                return -1;
        buffer[size] = 0;
 
@@ -105,8 +105,8 @@ static int verify_tag(char *buffer, unsigned long size)
 
 int main(int argc, char **argv)
 {
-       unsigned long size;
-       char buffer[MAXSIZE];
+       unsigned long size = 4096;
+       char *buffer = malloc(size);
        unsigned char result_sha1[20];
 
        if (argc != 1)
@@ -114,13 +114,9 @@ int main(int argc, char **argv)
 
        setup_git_directory();
 
-       // Read the signature
-       size = 0;
-       for (;;) {
-               int ret = xread(0, buffer + size, MAXSIZE - size);
-               if (ret <= 0)
-                       break;
-               size += ret;
+       if (read_pipe(0, &buffer, &size)) {
+               free(buffer);
+               die("could not read from stdin");
        }
 
        // Verify it for some basic sanity: it needs to start with "object <sha1>\ntype\ntagger "
@@ -129,6 +125,9 @@ int main(int argc, char **argv)
 
        if (write_sha1_file(buffer, size, tag_type, result_sha1) < 0)
                die("unable to write tag file");
+
+       free(buffer);
+
        printf("%s\n", sha1_to_hex(result_sha1));
        return 0;
 }