X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=tag.c;h=ecf7c1e9ce889514e04765695298ef11f28edab6;hb=c597ba801048be45d168b1f6335e91bab165448f;hp=28641cf85a0d32357269129f0e8b92bb9e21f399;hpb=3089c2b97a4d73866375a0ba815fc2fa4e2a1c1e;p=thirdparty%2Fgit.git diff --git a/tag.c b/tag.c index 28641cf85a..ecf7c1e9ce 100644 --- a/tag.c +++ b/tag.c @@ -4,6 +4,9 @@ #include "tree.h" #include "blob.h" +#define PGP_SIGNATURE "-----BEGIN PGP SIGNATURE-----" +#define PGP_MESSAGE "-----BEGIN PGP MESSAGE-----" + const char *tag_type = "tag"; struct object *deref_tag(struct object *o, const char *warn, int warnlen) @@ -53,7 +56,7 @@ static unsigned long parse_tag_date(const char *buf, const char *tail) return strtoul(dateptr, NULL, 10); } -int parse_tag_buffer(struct tag *item, void *data, unsigned long size) +int parse_tag_buffer(struct tag *item, const void *data, unsigned long size) { unsigned char sha1[20]; char type[20]; @@ -133,3 +136,15 @@ int parse_tag(struct tag *item) free(data); return ret; } + +size_t parse_signature(const char *buf, unsigned long size) +{ + char *eol; + size_t len = 0; + while (len < size && prefixcmp(buf + len, PGP_SIGNATURE) && + prefixcmp(buf + len, PGP_MESSAGE)) { + eol = memchr(buf + len, '\n', size - len); + len += eol ? eol - (buf + len) + 1 : size - len; + } + return len; +}