Browse Source

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>
maint
Johannes Schindelin 10 years ago committed by Junio C Hamano
parent
commit
fe8e3b7180
  1. 11
      object.c
  2. 3
      object.h

11
object.c

@ -33,13 +33,20 @@ const char *typename(unsigned int type) @@ -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);
}


3
object.h

@ -53,7 +53,8 @@ struct object { @@ -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.

Loading…
Cancel
Save