@@ -140,7 +140,7 @@ void release_tag_memory(struct tag *t)
int parse_tag_buffer(struct repository *r, struct tag *item, const void *data, unsigned long size)
{
struct object_id oid;
- char type[20];
+ enum object_type type;
const char *bufptr = data;
const char *tail = bufptr + size;
const char *nl;
@@ -167,23 +167,24 @@ int parse_tag_buffer(struct repository *r, struct tag *item, const void *data, u
return -1;
bufptr += 5;
nl = memchr(bufptr, '\n', tail - bufptr);
- if (!nl || sizeof(type) <= (nl - bufptr))
+ if (!nl)
+ return -1;
+ type = type_from_string_gently(bufptr, nl - bufptr);
+ if (type < 0)
return -1;
- memcpy(type, bufptr, nl - bufptr);
- type[nl - bufptr] = '\0';
bufptr = nl + 1;
- if (!strcmp(type, blob_type)) {
+ if (type == OBJ_BLOB) {
item->tagged = (struct object *)lookup_blob(r, &oid);
- } else if (!strcmp(type, tree_type)) {
+ } else if (type == OBJ_TREE) {
item->tagged = (struct object *)lookup_tree(r, &oid);
- } else if (!strcmp(type, commit_type)) {
+ } else if (type == OBJ_COMMIT) {
item->tagged = (struct object *)lookup_commit(r, &oid);
- } else if (!strcmp(type, tag_type)) {
+ } else if (type == OBJ_TAG) {
item->tagged = (struct object *)lookup_tag(r, &oid);
} else {
return error("unknown tag type '%s' in %s",
- type, oid_to_hex(&item->object.oid));
+ type_name(type), oid_to_hex(&item->object.oid));
}
if (!item->tagged)
Change a series of strcmp() to instead use type_from_string_gently() to get the integer type early, and then use that for comparison. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- tag.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)