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]; | 	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; | 	int i; | ||||||
|  |  | ||||||
|  | 	if (len < 0) | ||||||
|  | 		len = strlen(str); | ||||||
|  |  | ||||||
| 	for (i = 1; i < ARRAY_SIZE(object_type_strings); i++) | 	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; | 			return i; | ||||||
|  |  | ||||||
|  | 	if (gentle) | ||||||
|  | 		return -1; | ||||||
|  |  | ||||||
| 	die("invalid object type \"%s\"", str); | 	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 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. |  * Return the current number of buckets in the object hashmap. | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Johannes Schindelin
						Johannes Schindelin