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
							parent
							
								
									0c72b98f31
								
							
						
					
					
						commit
						fe8e3b7180
					
				
							
								
								
									
										11
									
								
								object.c
								
								
								
								
							
							
						
						
									
										11
									
								
								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); | ||||
| } | ||||
|  | ||||
|  |  | |||
							
								
								
									
										3
									
								
								object.h
								
								
								
								
							
							
						
						
									
										3
									
								
								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. | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Johannes Schindelin
						Johannes Schindelin