For each of the parsed lines we at some point skip past its initial identifier ("type ", "tag ", etc.). We also at some point calculate the length of the remaining line. This patch moves these calculations into one place. This provides _one_ place for all header lines where their respective pointers start pointing at the header value (instead of the start of the line), and their lengths are calculated. Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> --- tag.c | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) diff --git a/tag.c b/tag.c index ac76ec0..9a6924f 100644 --- a/tag.c +++ b/tag.c @@ -118,12 +118,20 @@ int parse_and_verify_tag_buffer(struct tag *item, tagger_line - data); } + /* + * Advance header field pointers past their initial identifier. + * Calculate lengths of header fields. + */ + type_line += strlen("type "); + type_len = tag_line - type_line - 1; + tag_line += strlen("tag "); + tag_len = tagger_line - tag_line - 1; + /* Get the actual type */ - type_len = tag_line - type_line - strlen("type \n"); if (type_len >= sizeof(type)) return error("Tag object (@ char " PD_FMT "): " - "Type too long", type_line + 5 - data); - memcpy(type, type_line + 5, type_len); + "Type too long", type_line - data); + memcpy(type, type_line, type_len); type[type_len] = '\0'; if (thorough_verify) { @@ -136,7 +144,7 @@ int parse_and_verify_tag_buffer(struct tag *item, sha1_to_hex(sha1)); /* Verify tag name: disallow control characters or spaces */ - for (i = 4;;) { + for (i = 0;;) { unsigned char c = tag_line[i++]; if (c == '\n') break; @@ -154,9 +162,8 @@ int parse_and_verify_tag_buffer(struct tag *item, } if (item) { - tag_len = tagger_line - tag_line - strlen("tag \n"); item->tag = xmalloc(tag_len + 1); - memcpy(item->tag, tag_line + 4, tag_len); + memcpy(item->tag, tag_line, tag_len); item->tag[tag_len] = '\0'; if (!strcmp(type, blob_type)) { @@ -169,7 +176,7 @@ int parse_and_verify_tag_buffer(struct tag *item, item->tagged = &lookup_tag(sha1)->object; } else { error("Tag object (@ char " PD_FMT "): " - "Unknown type '%s'", type_line + 5 - data, type); + "Unknown type '%s'", type_line - data, type); item->tagged = NULL; } -- 1.5.2 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html