[PATCH] Document git-ssh-pull and git-ssh-push
[gitweb.git] / mktag.c
diff --git a/mktag.c b/mktag.c
index 8605802d388f348cfbecdefefceb01089e2b6a58..8cbbef67e624d1d15bc4f2d7e2f9509be937c36d 100644 (file)
--- a/mktag.c
+++ b/mktag.c
 static int verify_object(unsigned char *sha1, const char *expected_type)
 {
        int ret = -1;
-       unsigned long mapsize;
-       void *map = map_sha1_file(sha1, &mapsize);
-
-       if (map) {
-               char type[100];
-               unsigned long size;
-               void *buffer = unpack_sha1_file(map, mapsize, type, &size);
-
-               if (buffer) {
-                       if (!strcmp(type, expected_type))
-                               ret = check_sha1_signature(sha1, buffer, size, type);
-                       free(buffer);
-               }
-               munmap(map, mapsize);
+       char type[100];
+       unsigned long size;
+       void *buffer = read_sha1_file(sha1, type, &size);
+
+       if (buffer) {
+               if (!strcmp(type, expected_type))
+                       ret = check_sha1_signature(sha1, buffer, size, type);
+               free(buffer);
        }
        return ret;
 }
@@ -112,7 +106,18 @@ int main(int argc, char **argv)
                usage("cat <signaturefile> | git-mktag");
 
        // Read the signature
-       size = read(0, buffer, MAXSIZE);
+       size = 0;
+       for (;;) {
+               int ret = read(0, buffer + size, MAXSIZE - size);
+               if (!ret)
+                       break;
+               if (ret < 0) {
+                       if (errno == EAGAIN)
+                               continue;
+                       break;
+               }
+               size += ret;
+       }
 
        // Verify it for some basic sanity: it needs to start with "object <sha1>\ntype "
        if (verify_tag(buffer, size) < 0)