Skip to content

Commit

Permalink
Refactor type_from_string() to allow continuing after detecting an error
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Sep 10, 2014
1 parent 0c72b98 commit fe8e3b7
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
11 changes: 9 additions & 2 deletions object.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
3 changes: 2 additions & 1 deletion object.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down

0 comments on commit fe8e3b7

Please sign in to comment.