[PATCH v2 1/6] Refactor type_from_string() to avoid die()ing in case of errors
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Sep 10, 2014, 13:52 UTC
- Message-ID
- <alpine.DEB.1.00.1409101552400.990@s15462909.onlinehome-server.info>
- In-Reply-To
- <cover.1410356761.git.johannes.schindelin@gmx.de>
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> --- object.c | 11 +++++++++-- object.h | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/object.c b/object.c index a16b9f9..aedac24 100644 --- a/object.c +++ b/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); } diff --git a/object.h b/object.h index 5e8d8ee..e028ced 100644 --- a/object.h +++ b/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.
-- 2.0.0.rc3.9669.g840d1f9