diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2014-09-10 15:52:44 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-09-10 13:52:13 -0700 |
commit | fe8e3b71805cd13d139b62fa5a0c75387568c9ea (patch) | |
tree | 62a7b6b4a44cbc07cc58d36bccc2d2df205471b8 /object.c | |
parent | 0c72b98f31bf6eabd75be565a08ffcf0d8e74b1f (diff) | |
download | git-fe8e3b71805cd13d139b62fa5a0c75387568c9ea.tar.gz |
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>
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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); } |