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>maint
parent
0c72b98f31
commit
fe8e3b7180
11
object.c
11
object.c
|
@ -33,13 +33,20 @@ const char *typename(unsigned int type)
|
||||||
return object_type_strings[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;
|
int i;
|
||||||
|
|
||||||
|
if (len < 0)
|
||||||
|
len = strlen(str);
|
||||||
|
|
||||||
for (i = 1; i < ARRAY_SIZE(object_type_strings); i++)
|
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;
|
return i;
|
||||||
|
|
||||||
|
if (gentle)
|
||||||
|
return -1;
|
||||||
|
|
||||||
die("invalid object type \"%s\"", str);
|
die("invalid object type \"%s\"", str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
object.h
3
object.h
|
@ -53,7 +53,8 @@ struct object {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const char *typename(unsigned int type);
|
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.
|
* Return the current number of buckets in the object hashmap.
|
||||||
|
|
Loading…
Reference in New Issue