mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
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:
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];
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
3
object.h
3
object.h
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user