[PATCH 2/5] don't die immediately when convert an invalid type name
Signed-off-by: Liu Yubao <yubao.liu@gmail.com>
---
object.c | 14 +++++++++++++-
object.h | 1 +
sha1_file.c | 2 +-
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/object.c b/object.c
index 50b6528..0a18db6 100644
--- a/object.c
+++ b/object.c
@@ -33,13 +33,25 @@ 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)
{
int i;
for (i = 1; i < ARRAY_SIZE(object_type_strings); i++)
if (!strcmp(str, object_type_strings[i]))
return i;
+
+ return -1;
+}
+
+int type_from_string(const char *str)
+{
+ int i;
+
+ i = type_from_string_gently(str);
+ if (i > 0)
+ return i;
+
die("invalid object type \"%s\"", str);
}
diff --git a/object.h b/object.h
index d962ff1..88baf2b 100644
--- a/object.h
+++ b/object.h
@@ -36,6 +36,7 @@ struct object {
};
extern const char *typename(unsigned int type);
+extern int type_from_string_gently(const char *str);
extern int type_from_string(const char *str);
extern unsigned int get_max_object_index(void);
diff --git a/sha1_file.c b/sha1_file.c
index efe6967..dccc455 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -1291,7 +1291,7 @@ static int parse_sha1_header(const char *hdr, unsigned long length, unsigned lon
/*
* The length must be followed by a zero byte
*/
- return *hdr ? -1 : type_from_string(type);
+ return *hdr ? -1 : type_from_string_gently(type);
}
static void *unpack_sha1_file(void *map, unsigned long mapsize, enum object_type *type, unsigned long *size, const unsigned char *sha1)
--
1.6.1.rc1.5.gde86c