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 | |
parent | Update draft release notes to 2.2 (diff) | |
download | tgif-fe8e3b71805cd13d139b62fa5a0c75387568c9ea.tar.xz |
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>
-rw-r--r-- | object.c | 11 | ||||
-rw-r--r-- | object.h | 3 |
2 files changed, 11 insertions, 3 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); } @@ -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. |