Refactor type_from_string() to allow continuing after detecting an error

In the next commits, we will enhance the fsck_tag() function to check
tag objects more thoroughly. To this end, we need a function to verify
that a given string is a valid object type, but that does not die() in
the negative case.

While at it, prepare type_from_string() for counted strings, i.e. strings
with an explicitly specified length rather than a NUL termination.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johannes Schindelin 2014-09-10 15:52:44 +02:00 committed by Junio C Hamano
parent 0c72b98f31
commit fe8e3b7180
2 changed files with 11 additions and 3 deletions

View file

@ -33,13 +33,20 @@ const char *typename(unsigned int type)
return object_type_strings[type];
}
int type_from_string(const char *str)
int type_from_string_gently(const char *str, ssize_t len, int gentle)
{
int i;
if (len < 0)
len = strlen(str);
for (i = 1; i < ARRAY_SIZE(object_type_strings); i++)
if (!strcmp(str, object_type_strings[i]))
if (!strncmp(str, object_type_strings[i], len))
return i;
if (gentle)
return -1;
die("invalid object type \"%s\"", str);
}

View file

@ -53,7 +53,8 @@ struct object {
};
extern const char *typename(unsigned int type);
extern int type_from_string(const char *str);
extern int type_from_string_gently(const char *str, ssize_t, int gentle);
#define type_from_string(str) type_from_string_gently(str, -1, 0)
/*
* Return the current number of buckets in the object hashmap.