Code

Fix lost-found to show commits only referenced by reflogs
[git.git] / mktag.c
diff --git a/mktag.c b/mktag.c
index fa4a9e6003b5014fb8e222ad8813ce5954f9a38a..931011121e7276513b55fc41691c65a0d924119d 100644 (file)
--- a/mktag.c
+++ b/mktag.c
 static int verify_object(unsigned char *sha1, const char *expected_type)
 {
        int ret = -1;
-       char type[100];
+       enum object_type type;
        unsigned long size;
-       void *buffer = read_sha1_file(sha1, type, &size);
+       void *buffer = read_sha1_file(sha1, &type, &size);
 
        if (buffer) {
-               if (!strcmp(type, expected_type))
-                       ret = check_sha1_signature(sha1, buffer, size, type);
+               if (type == type_from_string(expected_type))
+                       ret = check_sha1_signature(sha1, buffer, size, expected_type);
                free(buffer);
        }
        return ret;
 }
 
+#ifdef NO_C99_FORMAT
+#define PD_FMT "%d"
+#else
+#define PD_FMT "%td"
+#endif
+
 static int verify_tag(char *buffer, unsigned long size)
 {
        int typelen;
@@ -67,15 +73,15 @@ static int verify_tag(char *buffer, unsigned long size)
        /* Verify tag-line */
        tag_line = strchr(type_line, '\n');
        if (!tag_line)
-               return error("char%td: could not find next \"\\n\"", type_line - buffer);
+               return error("char" PD_FMT ": could not find next \"\\n\"", type_line - buffer);
        tag_line++;
        if (memcmp(tag_line, "tag ", 4) || tag_line[4] == '\n')
-               return error("char%td: no \"tag \" found", tag_line - buffer);
+               return error("char" PD_FMT ": no \"tag \" found", tag_line - buffer);
 
        /* Get the actual type */
        typelen = tag_line - type_line - strlen("type \n");
        if (typelen >= sizeof(type))
-               return error("char%td: type too long", type_line+5 - buffer);
+               return error("char" PD_FMT ": type too long", type_line+5 - buffer);
 
        memcpy(type, type_line+5, typelen);
        type[typelen] = 0;
@@ -92,14 +98,14 @@ static int verify_tag(char *buffer, unsigned long size)
                        break;
                if (c > ' ')
                        continue;
-               return error("char%td: could not verify tag name", tag_line - buffer);
+               return error("char" PD_FMT ": could not verify tag name", tag_line - buffer);
        }
 
        /* Verify the tagger line */
        tagger_line = tag_line;
 
        if (memcmp(tagger_line, "tagger", 6) || (tagger_line[6] == '\n'))
-               return error("char%td: could not find \"tagger\"", tagger_line - buffer);
+               return error("char" PD_FMT ": could not find \"tagger\"", tagger_line - buffer);
 
        /* TODO: check for committer info + blank line? */
        /* Also, the minimum length is probably + "tagger .", or 63+8=71 */
@@ -108,14 +114,16 @@ static int verify_tag(char *buffer, unsigned long size)
        return 0;
 }
 
+#undef PD_FMT
+
 int main(int argc, char **argv)
 {
        unsigned long size = 4096;
-       char *buffer = malloc(size);
+       char *buffer = xmalloc(size);
        unsigned char result_sha1[20];
 
        if (argc != 1)
-               usage("cat <signaturefile> | git-mktag");
+               usage("git-mktag < signaturefile");
 
        setup_git_directory();